Linux系统通过文件/etc/sudoers设置用户使用sudo的权限/用户使用sudo的授权配置

文章目录

  • sudo 权限配置说明
  • 如何修改 sudo 会话有效期
  • 设置输入密码时显示星(*)号
  • 别名规则
    • 如何定义别名及使用别名配置权限
  • 为什么配置的命令要使用绝对路径
  • 参考示例
    • 授权用户 test 可以重启服务器
    • 授权群组可以使用 sudo 切换成任何用户身份,执行任何命令
    • 通过命令别名进行授权
    • 授权指定用户允许以root身份无密码执行某些命令
    • 授权指定用户允许在某个网段上连接主机以root身份执行某些命令
    • 授权指定用户允许以任何用户身份执行任何命令,且不要输入密码
    • 设置禁止某用户执行某操作
    • 授权指定用户执行某些命令需要输入密码,某些命令不需要输入密码

sudo 权限配置说明

权限配置语法:

who where whom command
or
who which_hosts=(runas) command

解释:谁(who)能够以哪个用户(runas)的身份通过什么主机(which_hosts)执行什么命令(command)。说白了就是,哪个用户在哪个主机以谁的身份执行哪些命令。

使用 visudo 命令可以打开 /etc/sudoers 文件进行编辑设置 sudo,visodo 是编辑 /etc/sudoers 的命令,也可以不用这个命令,直接用 vi 来编辑 /etc/sudoers。不建议直接使用 vi,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件后进行保存时,系统会自行检验 /etc/sudoers 文件的语法。

因此,修改 /etc/sudoers 文件的命令如下:

[root@htlwk0001host ~]# visudo
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
...

通过 visudo 命令,我们就打开了 /etc/sudoers 文件,可以看到如上显示的两行行信息,这是系统给我们提供的两个模板,分别用于添加用户和群组,使其能够使用 sudo 命令。

这两行模板的含义分为是:

root     ALL       =(ALL)         ALL
用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel   ALL       =(ALL)         ALL
%组名  被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
参数项说明
root表示 root 用户。
ALL表示从任何的主机上都可以执行。
(ALL)是以谁的身份来执行,ALL 就代表 root 可以任何人的身份来执行命令。
ALL表示任何命令。
%wheel表示 wheel 用户组
root ALL=(ALL) ALL

该条规则的含义就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。

%wheel  ALL=(ALL) ALL

该条规则的含义就是 wheel 用户组中的用户可以在任何主机以任何人的身份来执行所有的命令。

表 1 对以上 2 个模板的各部分进行详细的说明。

项目说明
用户名或群组名表示系统中的那个用户或群组,可以使用 sudo 这个命令。
被管理主机的地址用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。
可使用的身份就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。
授权命令表示 root 把什么命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。
表 1 /etc/sudoers 用户和群组模板的含义

如何修改 sudo 会话有效期

sudo 默认在输入一次密码后 5 分钟内不会再次要求密码。5 分钟后,你会再次被要求输入密码。我们可以对有效期进行设置,打开文件 /etc/sudoers,找到下面这行:

Defaults env_reset

在这行的后面添加如下的变量:

Defaults env_reset,timestamp_timeout=[new-value]

[new-value]为想要sudo会话持续的时间数。例如,设数值为 40:

Defaults env_reset,timestamp_timeout=40

如果你希望每次使用 sudo 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 sudo 会话永远不过时,应赋值为 -1

设置输入密码时显示星(*)号

你可能注意过,当sudo要求输入密码然后你开始输入时,不会显示任何东西,甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。在 /etc/sudoers 文件中找到下面这行:

Defaults env_reset

在后面添加如下参数:

Defaults env_reset,pwfeedback

然后保存文件。现在,无论什么时候输入 sudo 密码,星号都会显示。

别名规则

sudoers 文件支持使用别名对同类对象进行分组:组名必须使用全大写字母,使用逗号将同类对象命令隔开。
Host_Alias:主机别名
User_Alias:用户别名
Runas_Alias:以谁的身份运行的别名
Cmnd_Alias:命令别名

如何定义别名及使用别名配置权限

[root@localhost ~]# visudo
Host_Alias USERHOSTS = 172.16.0.0/16,127.0.0.0/8,192.168.0.0/24    ##定义主机别名,可以在哪些机器执行特殊命令
Cmnd_Alias    USERADMIN=/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel    ##定义命令别名
root    ALL=(ALL)       ALL
tom     ALL=(root)      USERADMIN    ##此处定义tom可以执行别名USERADMIN中的所有命令
tom     USERHOSTS=(ROOT)        USERADMIN    ##可以在别名USERHOSTS中机器上执行别名USERADMIN中的命令

为什么配置的命令要使用绝对路径

当我们为用户定义可以运行的命令时,必须使用完整的命令路径。这样做是完全出于安全的考虑,如果我们给出的命令只是简单的useradd而非/usr/sbin/useradd,那么用户有可能创建一个他自己的脚本,也叫做useradd,然后放在它的本地路径中,如此一来他就能够使用 root 身份执行这个这个名为useradd的本地脚本,通过这个脚本文件来执行任何他想要的命令了。这是相当危险的。

参考示例

授权用户 test 可以重启服务器

以 root 用户身份执行命令 visudo,编辑文件 /etc/sudoers,在配置文件中添加如下内容:

test ALL=/sbin/shutdown -r now

注意:
1.这里把可以使用的身份 (ALL) 这个参数省略掉了,表示用户可以使用 sudo 切换成任何用户身份。
2.这里也可以写多个授权命令,之间用逗号分隔。授权完之后,用户 lamp 可以使用 sudo -l 查看授权的命令列表。

授权群组可以使用 sudo 切换成任何用户身份,执行任何命令

/etc/sudoers 文件中添加群组配置信息:

%group ALL=(ALL) ALL

此配置信息表示 group 这个群组中的所有用户都能够使用 sudo 切换任何身份,执行任何命令。

假设现在有 pro1,pro2,pro3 这 3 个用户,接下来,我们使用 usermod 命令将 pro1 加入 group 群组,看看有什么效果:

[root@localhost ~]# usermod -a -G group pro1 # 选项`-a`表示将用户pro1追加到群组group中,之前添加的群组也会保留
[root@localhost ~]# su - pro1 # 切换成用户pro1
[pro1@localhost ~]# sudo tail -n 1 /etc/shadow # 用户pro1通过sudo执行命令tail查看文件shadow的最后一行,注意身份是pro1
Password:
pro3:$1$GfinyJgZ$9J8IdrBXXMwZIauANg7tW0:14302:0:99999:7:::
[pro1@localhost ~]# su - pro2 # 切换成用户pro2
[pro2@localhost ~]# sudo tail -n 1 /etc/shadow 
Password:
pro2 is not in the sudoers file.  This incident will be reported. # 提示用户pro2不在文件sudoers中,该事件会被上报给管理员

可以看到,由于 pro1 加入到了 group 群组,因此 pro1 就可以使用 sudo 命令,而 pro2 不行。同样的道理,如果我们想让 pro3 也可以使用 sudo 命令,不用再修改 /etc/sudoers 文件,只需要将 pro3 加入 group 群组即可。

通过命令别名进行授权

root ALL=(ALL)     ALL
mysql 192.168.200.201=NOPASSWD:COMM1,PASSWD:COMM2
Cmnd_Alias COMM1=/usr/sbin/useradd,/usr/sbin/usermod
Cmnd_Alias COMM2=/user/sbin/userdel

上述的配置中,配置了两个命令组别名:COMM1 和 COMM2,接着授权用户 mysql 可以在主机 192.168.200.201 上以任何用户的身份执行两个命令组别名所包含的命令,但是执行命令别名 COMM1 所含命令无需输入密码,而执行命令别名 COMM2 所含的命令则需要输入密码。

PASSWD:执行被授权的命令之前,必须输入密码进行身份验证
NOPASSWD:执行被授权的命令之前,无需输入密码进行身份验证

注意:PASSWD、NOPASSWD 等标签只能在授权项中使用,不能在别名中使用

授权指定用户允许以root身份无密码执行某些命令

mysql ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod

解释:授权用户 mysql 可以在任何主机上以 root 用户的名义执行命令 useradd 和 usermod,且无需输入密码。

授权指定用户允许在某个网段上连接主机以root身份执行某些命令

下面的配置只允许 nick 在 192.168.10.0/24 网段上连接主机并且以 root 权限执行 useradd 命令。

nick  192.168.10.0/24=(root) /usr/sbin/useradd

授权指定用户允许以任何用户身份执行任何命令,且不要输入密码

mysql ALL=(ALL) NOPASSWD:ALL

如上配置,用户 mysql 执行命令 sudo,无需输入密码。

设置禁止某用户执行某操作

下面的配置,表示允许用户 tom 以 root 的身份更改任何用户的密码,但禁止更改 root 用户的密码。

tom ALL=(root) /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root

说明:
1.passwd 是更改用户密码的命令
2.[a-zA-Z]* 是正则表达式,可以匹配任意数量的任意英文字母,在这里表示匹配任意用户名称
3./usr/bin/passwd [a-zA-Z]* 表示设置任意用户的密码
4.!/usr/bin/passwd root 表示不允许修改用户 root 的密码

授权指定用户执行某些命令需要输入密码,某些命令不需要输入密码

tom ALL=(root) /usr/sbin/useradd,NOPASSWD: /usr/sbin/userdel,/usr/sbin/groupdel,PASSWD: /usr/sbin/usermod,/usr/sbin/groupmod

说明:
1.执行 /usr/sbin/useradd 操作时必须使用密码;
2.执行 /usr/sbin/userdel, /usr/sbin/groupdel 操作时可以不使用密码;
3.执行 /usr/sbin/usermod, /usr/sbin/groupmod 操作时还是要输入密码;
4.注意,PASSWD和NOPASSWD不可定义于别名中哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

system.gc 性能_使用这些先进的GC技术提高应用程序性能

system.gc 性能应用程序性能是我们关注的重点,垃圾收集优化是取得小而有意义的进步的好地方 自动化垃圾收集(与JIT HotSpot编译器一起)是JVM中最先进,最有价值的组件之一,但是许多开发人员和工程师对垃圾收集&#…

Linux 命令之 who -- 打印当前登录用户/显示目前登入系统的用户信息。

文章目录命令介绍常用选项参考示例打印用户登录信息打印全面的信息打印系统登录进程显示登录系统的所有用户名称和总人数命令介绍 who 命令用来打印当前登录用户信息,包含了系统的启动时间 、 活动进程 、 使用者 ID、使用终端等信息,是系统管理员了解系…

SpringCloud全局过滤器自定义

一、实现步骤: 在gateway_service工程编写全局过滤器类GlobalFilter,Ordered编写业务逻辑代码访问接口测试,加token和不加token。 二、业务逻辑代码 package com.william.filters;import org.springframework.cloud.gateway.filter.GatewayFilterChain…

Linux 命令之 whoami -- 打印当前有效的用户名称

文章目录命令介绍参考示例命令介绍 whoami 命令用于打印当前有效的用户名称,相当于执行 id -un 命令。 参考示例 [roothtlwk0001host ~]# whoami root

java流写入数据库_使用Java流查询数据库

java流写入数据库在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够使用现有数据库中的数据,而无需编写一行SQL(或类似的语言,如HQL),而无需花费数小时将所有内容放在一起。 准备好应用…

Linux 命令之 id -- 显示用户ID和组ID

文章目录命令介绍常用选项参考示例显示当前用户的用户id及所属用户组的信息显示用户所属群组的ID显示用户所属附加群组的ID显示指定用户信息命令介绍 id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应…

SpringCloud局部过滤器自定义

一、实现步骤: 在gateway_service中编写MyParamGatewayFilterFactory类实现业务代码:循环请求参数中是否包含name,如果包含则输出参数值修改配置文件访问请求测试,带name参数 二、在gateway_service中编写MyParamGatewayFilterF…

enum.values_占用内存的Enum.values()方法

enum.values我是Java 枚举的忠实拥护者 。 似乎我们一直在等待获得它,但是当我们最终获得它( J2SE 5 )时,该枚举比C和C 提供的枚举要好得多,对我来说似乎“ 值得等待” 。 与Java enum一样好,它也不是没有问…

搭建配置中心微服务

一、实现步骤&#xff1a; 创建配置中心SpringBoot项目config_server配置坐标依赖启动类添加开启配置中心服务注解配置服务中心application.yml文件启动测试 二、创建配置中心SpringBoot项目config_server 配置坐标依赖 需要依赖父工程 <?xml version"1.0" en…

Linux命令之 users -- 显示当前登录的用户

文章目录命令介绍参考示例查看当前登录的所有用户命令介绍 users 命令用于显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话&#xff0c;那他的用户名将显示相同的次数。 参考示例 查看当前登录的所有用户 [rooth…

使用Spring Boot和H2可以正常工作的原型

我们确实在弹簧上使用了很多h2&#xff0c;特别是对于单元测试。 但是&#xff0c;我们可能希望有一个功能齐全的原型来显示数据&#xff0c;而不是进行单元测试。 H2是最理想的选择&#xff0c;它在spring上运行良好&#xff0c;与大多数数据库都具有良好的语法兼容性&#x…

服务去获取配置中心配置

目标&#xff1a;改造user_service工程&#xff0c;配置文件不再由微服务项目提供&#xff0c;而是从配置中心获取。 实现步骤&#xff1a; 添加配置中心客户端启动依赖修改服务提供者的配置文件启动服务测试效果 一、添加依赖 <!--spring cloud 配置中心--> <depe…

Linux查看用户信息/查看所有用户信息的命令

文章目录通过文件 /etc/passwd 来查看所有用户信息通过文件 /etc/shadow 查看所有用户信息使用 getent 命令查看所有用户信息使用 compgen 命令查看所有的用户信息相关文件/etc/passwd/etc/passwd 文件内容格式说明/etc/shadow/etc/group/etc/group 文件内容格式说明/etc/gshad…

graalvm_GraalVM上的Picocli:极快的命令行应用程序

graalvmGraalVM GraalVM允许您提前将程序编译为本地可执行文件。 与Java VM相比&#xff0c;生成的程序具有更快的启动时间和更低的运行时内存开销。 这对于通常寿命很短的命令行实用程序尤其有用。 GraalVM对Java反射的支持有限&#xff0c;它需要提前知道反射访问的程序元素…

Linux 命令之 getent -- 查看记录

文章目录命令介绍常用选项参考示例查看文件 /etc/protocols 中的所有记录查看指定用户组是否存在&#xff0c;若不存在则创建指定的用户组根据主机名称&#xff0c;查看对应的IP地址根据域名查找对应的IP根据用户名查找对应的UID获取当前登陆用户的信息根据UID查找用户名查找那…

运行SpringBoot时:Type javax.xml.bind.JAXBContext not present

原因和简单介绍 我有一些代码使用JAXB API类&#xff0c;它们是作为Java 6/7/8中JDK的一部分提供的。当我使用Java 9运行相同的代码时&#xff0c;在运行时我得到错误&#xff0c;指示无法找到JAXB类。 自Java 6以来&#xff0c;JAXB类已作为JDK的一部分提供&#xff0c;为什么…

Linux 命令之 chfn -- 修改用户信息

文章目录命令简介常用选项参考示例改变用户 root 的 finger 信息命令简介 chfn 命令的英文全称是 change finger&#xff0c;即用来改变 finger 命令显示的信息。这些信息都存放在 /etc/passwd 文件里。若不指定任何选项&#xff0c;则chfn 命令会进入问答式界面。 常用选项 …

cassandra可视化_容器化Spring Data Cassandra应用程序

cassandra可视化我正在继续学习Docker的旅程。 在这一点上&#xff0c;我仍然保持简单。 这次&#xff0c;我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题。 更确切地说&#xff0c;使用Spring Data Cassandra整理应用程序。 我希望我前几天…

自定义Mybatis框架

一、开发环境的准备及统一 1、 Jdk环境&#xff1a;JDK 1.8 64bit 2、 Maven环境&#xff1a;MAVEN 3.3.9 二、创建Maven工程并引入坐标 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

Linux 命令之 userconf -- 设置用户账号

文章目录命令介绍常用选项参考示例新增用户账号新增群组删除用户账号删除群组命令介绍 userconf的命令全称是“user config”&#xff0c;该命令是用户账号设置程序。 userconf实际上为linuxconf的符号连接&#xff0c;提供图形界面的操作方式&#xff0c;供管理员建立与管理各…