centos7系统;在CentOS7上是 sudo.x86_64,使用yum install sudo命令即可安装。
sudo 的配置文件为/etc/sudoers、/etc/sudoers.d、/etc/sudoers 为总配置文件,也可以
在/etc/sudoers.d/文件夹下单独创建配置文件,实现配置分别管理。
可通过/usr/sbin/visudo 对配置文件进行编辑。
sudo程序的可执行文件为/usr/bin/sudo 有特殊权限位。
sun 172.20.121.11=(root) /bin/cat /etc/shadow
被授权用户 登录主机地址=(授权成的用户) 授权的具体命令
被授权用户 user: 命令的发起用户
登录主机 host: 被授权用户所在的主机地址,可以写成ALL
授权成的用户 (runas): 想用哪个用户身份去运行命令
授权命令 command: 想被授权的命令 ,可以写成ALL 即所有命
-a type 使用指定的 BSD 认证类型
-b 在后台运行命令
-C fd 关闭所有 >= fd 的文件描述符
-E 在执行命令时保留用户环境
-e 编辑文件而非执行命令
-g group 以指定的用户组执行命令
-H 将 HOME 变量设为目标用户的主目录。
-h 显示帮助消息并退出
-i [command] 以目标用户身份运行一个登录 shell
-K 完全移除时间戳文件
-k 无效的时间戳文件
-l[l] command 列出用户能执行的命令
-n 非交互模式,将不提示用户
-P 保留组向量,而非设置为目标的组向量
-p prompt 使用指定的密码提示
-S 从标准输入读取密码
-s [command] 以目标用户身份运行 shell
-U user 在列表时,列出指定用户的权限
-u user 以指定用户身份运行命令(或编辑文件)
-V 显示版本信息并退出
-v 更新用户的时间戳而不执行命令
-- 停止处理命令行参数
编辑/etc/sudoers ⽂件
root ALL=(ALL) ALL
sun 192.168.26.6=(root) /bin/cat /etc/shadow
----------------------------------------------------
使用sun用户直接cat /etc/shadow 提示权限不够;
使用sudo cat /etc/shadow 提示输入sun用户密码,让后执行授权操
----------------------------------------------------
cat /etc/shadow 不能访问
sudo cat /etc/shadow 输入密码后可访问
visudo 编辑 配置⽂件/etc/sudoers 配置如下
%wheel ALL=(ALL) ALL
%tom ALL=(ALL) ALL
tom组的⽤户具有所有⽤户的所有命令的权限
su -l tom
sudo cat /etc/shadow
输入密码即可
在/etc/sudoers.d ⽬录下创建授权配置⽂件 tom,并授权成root权限,可执⾏所有命令
cd /etc/sudoers.d/
vim tom
tom ALL=(root) ALL
-------------------------
su -l tom
cat /etc/shadow #拒绝
sudo /etc/shadow #输入密码即可
对于/etc/sudoers.d 下的授权管理配置⽂件也可以⽤visudo编辑,使⽤-f选项即可
visudo -f /etc/sudoers.d/tom
visudo 可以加上-c选项进⾏内容格式检查
visudo -c -f /etc/sudoers.d/tom
使⽤sudo -V 可以查看⼀下sudo的详细信息
sudo -V
---------------------------------------
...
Authentication timestamp timeout: 5.0 minutes
Password prompt timeout: 5.0 minutes
Number of tries to enter a password: 3
Umask to use or 0777 to use user's: 022
Path to mail program: /usr/sbin/sendmail
Flags for mail program: -t
Address to send mail to: root
Subject line for mail messages: *** SECURITY information for %h ***
Incorrect password message: Sorry, try again.
Path to authentication timestamp dir: /var/db/sudo #时间戳文件路径
...
---------------------------------------------------
查看⼀下对应⽤户的时间戳⽂件,⽂件内容不可直接查看
[root@centos6 ~]# cd /var/db/sudo #时间戳文件路径
[root@centos6 sudo]# ll
total 4
drwx------ 2 root sun 4096 Nov 10 18:07 sun
[root@centos6 sudo]# cat sun
cat: sun: Is a directory
[root@centos6 sudo]# cd sun/
[root@centos6 sun]# ll
total 4
-rw------- 1 root sun 48 Nov 10 18:11 1
[root@centos6 sun]# cat 1
ᆝQ®
user host=(runas) command
其中user除了使⽤⽤户名外,还可以使⽤#uid代替user还可以使⽤⽤户组名
为了和⽤户名作区分,需要使⽤%groupname,同样使⽤%#gid代替也可以。
使⽤wang⽤户的uid进⾏授权操作,使⽤tom组id进⾏授权操作
#编辑授权配置⽂件
[root@centos6 sun]# cat /etc/passwd | grep sun
sun:x:500:500:sunxiaobo:/home/sun:/bin/bash
------------------------------------------------
[root@centos6 sun]# visudo -f /etc/sudoers.d/test
[root@centos6 sun]# cat /etc/sudoers.d/test
%#1000 ALL=(ALL) ALL
[root@centos6 sun]# visudo -f /etc/sudoers.d/test
[root@centos6 sun]# cat /etc/sudoers.d/test
sun ALL=(ALL) NOPASSWD:AL
[root@centos6 sun]# su -l sun
[sun@centos6 ~]$ cat /etc/shadow | grep root
cat: /etc/shadow: Permission denied #权限拒绝
[sun@centos6 ~]$ sudo cat /etc/shadow | grep root
root:$6$.L/ggVlq$D2qqIHGALvmeBjauATdeiF/Cc1A3Au.q.vtK...
[sun@centos6 ~]$ exit
配置⽂件中的4个部分都可以使⽤别名替换,别名只能使⽤⼤写字⺟和数字构成,以字⺟开头
每种⽂件都有特定的定义⽅法
cat /etc/sudoers.d/test
User_Alias SYSUSER=sun
HostAlias SYSHOST=192.168.26.6
Runas_Alias SYSRUNAS=root
Cmnd_Alias SYSCMD=/bin/cat /etc/shadow
SYSUSER SYSHOST=(SYSRUNAS) SYSCMD
su -l sun
cat /etc/shadow #权限拒绝
sudo cat /etc/shadow | grep root #可以查看
授权时禁⽌直⾏特定的命令,需要再命令前加上!
visudo -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
sun ALL=(root) /bin/cat /etc/sudoers.d/test
su -l sun
cat /etc/shadow #权限拒绝
cat /etc/gshadow #权限拒绝
sudo cat /etc/shadow | grep sun
sudo cat /etc/gshadow | grep sun
exit
设置tom为默认⽤户
cat /etc/sudoers.d/test
Defaults:sun runas_default=tom
sun ALL=(tom,root) ALL
su -l sun
cat /etc/shadow | grep root #权限拒绝
sudo cat /etc/shadow | grep root #权限拒绝
sudo -u root cat /etc/shadow | grep root
exit
将tom换成root
visudo -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
Defaults:sun runas_default=root
sun ALL=(tom,root) ALL
su -l sun
cat /etc/shadow | grep root #权限拒绝
sudo -u tom cat /etc/shadow | grep root #权限拒绝
sudo cat /etc/shadow | grep root
exit
在命令后⾯加上*号,会出现如下漏洞,未授权查看/etc/shadow,但是却可以查看shadow⽂件
cat /etc/sudoers.d/test
sun ALL=(root) /bin/head -1 /var/log/message*
su -l sun
head -1 /var/log/messages
权限拒绝;
sudo head -1 /var/log/messages
sudo head -1 /var/log/messages /etc/shadow
visudo -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
sun ALL=(root) /bin/head -1 /var/log/messages
su -l sun
sudo head -1 /var/log/messages
sudo -l
sudo -ll
exit
cd /var/run/sudo/ts/
date
su -l sun
sudo -v
exit
date
sudo -k 可以重置密码时间为1970年01⽉01⽇
由于当前时间肯定⼤于这个时间,因此下次执⾏sudo时,需要输⼊密码
sudo -K 可以删除时间戳⽂件,因此下次执⾏sudo时需要输⼊密码
ll
su -l sun
sudo -K
exit
su -l sun
sudo head -1 /var/log/messages
exit
ll
sudo -i -u sun
sudo -i -u root
输入密码;
exit
visodu -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
tom ALL=(root) ALL
su -l sun
sudo -i -u root
输入密码;
exit
exit
visodu -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
sun ALL=(root) /bin/cat /etc/shadow
su -l sun
sudoedit /etc/sudoers
权限拒绝;
exit
visudo -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
tom ALL=(root) /bin/cat /etc/shadow, sudoedit
su -l sun
sudoedit /etc/sudoers
exit