一、sudo权限的配置
root账号登录系统不会记录root账号做了什么操作。
su虽然不记录以root执行了哪些命令,但会创建一条日志记录谁在什么时候变成了root。而su切换为root身份,仍然有很大的无法受控的权限,因此sudo是一个更好的选择。
sudo命令的意思是以其他用户身份执行命令,用户是否拥有sudo权限?拥有哪些权限?sudo执行时是否需要输入密码?这些都是通过/etc/sudoers文件进行配置和控制的。普通用户我们可以通过su命令切换到其他用户,但是需要知道其他用户的密码,如果是需要执行管理员命令则需要知道root密码。但是如果普通用户拥有sudo权限则可以只需要输入自己密码或者不输入密码完成管理员命令的执行。既保证了超级管理员的密码的安全性,又满足了普通用户执行特殊命令的需求,这就是/etc/sudoers文件的作用。
1. 编辑 sudo权限 命令
visudo
visudo 命令实际修改的是
/etc/sudoers
文件
2. /etc/sudoers
配置文件说明
[root/etc]# cat /etc/sudoers [root@s142 etc]# cat /etc/sudoers ## Sudoers allows particular users to run various commands as ## the root user, without needing the root password. ##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 ## ## Examples are provided at the bottom of the file for collections ## of related commands, which can then be delegated out to particular ## users or groups. ## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或 ## ## 用户组所使用 ## This file must be edited with the 'visudo' command. ## 该文件必须使用"visudo"命令编辑 ## Host Aliases #主机别名 ## Groups of machines. You may prefer to use hostnames (perhap using ## wildcards for entire domains) or IP addresses instead. ## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符) ## 或IP地址代替,这时可以配置主机别名 # Host_Alias FILESERVERS = fs1, fs2 # Host_Alias MAILSERVERS = smtp, smtp2 ## User Aliases #用户别名 ## These aren't often necessary, as you can use regular groups ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname ## rather than USERALIAS ## 这并不很常用,因为你可以通过使用组来代替一组用户的别名 # User_Alias ADMINS = jsmith, mikem ## Command Aliases ## These are groups of related commands... ## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限, ## 可以通过sudo调用所有别名包含的命令,下面是一些示例 ## Networking #网络操作相关命令别名 Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ## Installation and management of software #软件安装管理相关命令别名 Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum ## Services #服务相关命令别名 Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig ## Updating the locate database #本地数据库升级命令别名 Cmnd_Alias LOCATE = /usr/sbin/updatedb ## Storage #磁盘操作相关命令别名 Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount ## Delegating permissions #代理权限相关命令别名 Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp ## Processes #进程相关命令别名 Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall ## Drivers #驱动命令别名 Cmnd_Alias DRIVERS = /sbin/modprobe ... ## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems). ## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享) ## Syntax: ##语法 ## user MACHINE=COMMANDS ## 用户 登录的主机=(可以变换的身份) 可以执行的命令 ## ## Allow root to run any commands anywhere ## 允许root在任何地方运行任何命令 root ALL=(ALL) ALL ## Allows members of the 'sys' group to run networking, software, service management apps and more. ## 允许“sys”用户组的成员运行 网络、软件、服务管理应用等命令。 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands ## 允许“wheel”用户组的成员运行所有命令 %wheel ALL=(ALL) ALL ## Allows people in group wheel to run all commands without a password ## 允许“wheel”用户组的成员运行所有命令,且运行时不需要输入密码 # %wheel ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the cdrom as root ## 允许“users”组的成员运行 挂载、卸载光盘的命令 # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom ## Allows members of the users group to shutdown this system ## 允许“users”组的成员在本机运行 /sbin/shutdown -h now 命令 # %users localhost=/sbin/shutdown -h now ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) ## 读取 /etc/sudoers.d 目录下所有文件的内容作为配嵌入到此配置文件 ## 注意,下面的 # 后面并不是注释 #includedir /etc/sudoers.d
为用户配置sudo权限
[用户名] [被管理主机的IP]=([可以使用的身份]) [NOPASSWD: ][授权的命令]
[被管理主机的IP]
、[可以使用的身份]
、[授权的命令]
都可以使用ALL
来表示不限制。
添加[NOPASSWD: ]
选项可以使用户在使用sudo权限时不需要输入密码。[授权的命令]
要使用绝对路径,多条命令之间可用逗号(,
)分隔。
- 例:
## Allow root to run any commands anywhere
## 允许root在任何地方运行任何命令
root ALL=(ALL) ALL
为用户组配置sudo权限
%[组名] [被管理主机的IP]=([可以使用的身份]) [NOPASSWD: ][授权的命令]
[被管理主机的IP]
、[可以使用的身份]
、[授权的命令]
都可以使用ALL
来表示不限制。
添加[NOPASSWD: ]
选项可以使用户在使用sudo权限时不需要输入密码。
用户组 与 用户 的唯一区别是用户组前有个%
- 例:
## 允许“wheel”用户组的成员运行所有命令,且运行时不需要输入密码
%wheel ALL=(ALL) NOPASSWD: ALL
3. 注意事项
1) 赋予用户sudo权限时一定要谨慎,够用即可,不要赋予过高的权限
2) [授权的命令]
设置得越具体,用户获得的权限越小。
3) 严禁赋予普通用户 /usr/bin/passwd
、/usr/bin/vi
、/usr/bin/su
、/usr/bin/bash
命令的权限,拥此权限的用户可以修改root用户密码,然后为所欲为。
4) 权力越大,责任越大。
二、sudo 命令介绍
1. sudo [命令]
:以 root 身份来执行命令
用户必须有相应命令的sudo权限
例子
- 普通用户使用 less 命令查看 root 用户的历史命令
[vagrant~]$ sudo less /root/.bash_history
cat report.md | grep -v ID | awk '$4 >= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 <= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 == 100 {print $2}'
sed -n '2p' report.md
sed -n '2,4p' report.md
sed '2,4d' report.md
cat -n report.md
sed '1a Begin' report.md
sed '1i Begin' report.md
sed '1a Begin' report.md
sed '1a End' report.md
sed '1c Hello World' report.md
sed '5c Hello World' report.md
... 省略 ...
2. sudo su
:切换到root用户
用户必须有/usr/bin/su
命令的sudo权限
一旦切换成功,用户可以以root身份执行任何命令
例子
- 普通用户使用 sudo su 命令切换到 root 用户,然后修改root用户的密码
[vagrant/tmp]$ sudo su
[root/tmp]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
3. sudo -s <shell>
:切换到root用户的shell
可以不加<shell>
,会使用默认 shell
用户必须有相应shell命令的sudo权限,例如/usr/bin/bash
一旦切换成功,用户可以以root身份执行任何命令
例子
- 普通用户使用
sudo -s /usr/bin/bash
命令切换到 root 的shell,然后修改root用户的密码
[vagrant/tmp]$ sudo -s /usr/bin/bash
[root/tmp]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
- 可以不加
<shell>
,会使用默认 shell
[vagrant/tmp]$ sudo -s
[root/tmp]# exit
4. sudo -l
:列出目前用户可用的sudo权限的指令
例子
[vagrant~]$ sudo -l
...省略部分内容...
用户 vagrant 可以在本机上运行以下命令:
(ALL) /usr/bin/bash, /usr/bin/su, /usr/bin/less
三、sudo权限的应用
1. 授权普通用户可以重启服务器
- 执行
visudo
,然后添加如下内容
user1 ALL=(ALL) /sbin/shutdown -r now
- 切换到user1账号,查看user1可用的sudo权限的指令
[user1@10 ~]$ sudo -l
...省略部分内容...
用户 user1 可以在 10 上运行以下命令:
(ALL) /sbin/shutdown -r now
2. 授权普通用户可以添加其他用户
功能分析
要想添加其他用户,必须拥有添加用户和设置密码的权限,即 /usr/sbin/useradd
和 /usr/bin/passwd
两个命令的sudo权限
若用户完全拥有 /usr/bin/passwd
的sudo权限,则可以通过 sudo passwd
命令或者 sudo passwd root
命令修改 root 密码,这样就会变得非常不安全。
因此,需要严格限制用户对 /usr/bin/passwd
的权限:
user ALL=(ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
/usr/bin/passwd [A-Za-z]*
表示 passwd 命令后附加的第一个字符只能是大小写字母。 !/usr/bin/passwd ""
表示 passwd 命令后不能什么都不加。 !/usr/bin/passwd root
表示 passwd 命令后不能加 root。
三条语句的缺一不可,且顺序不能颠倒。
实例
- 执行
visudo
,然后添加如下内容
user1 ALL=(ALL) /usr/sbin/useradd
user1 ALL=(ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
- 切换到user1账号,查看user1可用的sudo权限的指令
[user1@10 ~]$ sudo -l
...省略部分内容...
用户 user1 可以在 10 上运行以下命令:
(ALL) /usr/sbin/useradd
(ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
- 添加用户user2,并为其设置密码
[user1@10 ~]$ sudo useradd user2
[user1@10 ~]$ sudo passwd user2
更改用户 user2 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[user1@10 ~]$ grep user2 /etc/passwd
user2:x:1006:1007::/home/user2:/bin/bash
- 尝试以
passwd
和passwd root
两种方式修改 root 用户的密码,全部失败
[user1@10 ~]$ sudo passwd
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd。
[user1@10 ~]$ sudo passwd root
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd root。
- 添加用户2_user,尝试为其设置密码,失败。因为
/usr/bin/passwd [A-Za-z]*
决定 passwd 命令后附加的第一个字符只能是大小写字母。
[user1@10 ~]$ sudo useradd 2_user
[user1@10 ~]$ sudo passwd 2_user
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd 2_user。
四、visudo命令简介
1、使用语法
用法:
#visudo [-chqsV] [-f sudoers]
2、参数说明
参数 参数说明
-c, --check 检查sudoers配置文件
-f, --file=sudoers 修改sudoers配置文件
-h, --help 获取命令帮助
-q, --quiet 静默输出
-s, --strict 严格语法检查
-V, --version 查看命令版本
四、visudo命令使用示例
1、查看命令版本
[root@s142 ~]# visudo -V
visudo version 1.8.23
visudo grammar version 46
…
2、获取命令帮助
[root@s142 ~]# visudo -h
visudo - safely edit the sudoers file
…
3、检查sudoers文件
[root@s142 ~]# visudo -c
/etc/sudoers: parsed OK
4、修改sudoers文件
[root@s142 ~]# cd /etc/
[root@s142 etc]# visudo -f sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
…
5、严格执行语法检查编辑
实际上我们可以直接编辑/etc/sudoers文件,直接编辑不会进行语法检查。使用visudo -s可以执行sudoers文件的编辑,编辑国产中实际编辑的是/etc/sudoers.tmp文件,编辑完成后必须wr保存后才会存入sudoers文件。保存前会进行语法检查,如果语法检查失败,会进程错误提示,告知是哪一行有语法错误。如果强制保存会有危险。这就是visudo方式编辑sudo文件的好处。
[root@s142 etc]# visudo -s文章来源:https://www.toymoban.com/news/detail-418534.html
文章来源地址https://www.toymoban.com/news/detail-418534.html
到了这里,关于Linux用户权限——sudoers的深入剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!