使用sudo分配管理权限

2.使用sudo分配管理权限
问题
本案例要求利用sudo机制分配管理操作权限,主要完成以下任务:
1)为sudo机制启用日志记录,以便跟踪sudo执行操作
2)允许网站运营专员tradm通过sudo方式控制httpd、mysqld服务的运行
3)允许用户ugadm通过sudo方式添加/删除/修改除root以外的用户账号
4)允许wheel组成员以特权执行/usr/bin/下的命令
步骤
实现此案例需要按照如下步骤进行。
步骤一:为sudo机制启用日志记录,以便跟踪sudo执行操作
1)修改/etc/sudoers配置,添加日志设置
[root@svr5 ~]# visudo
Defaults logfile="/var/log/sudo"
… …
2)以root(默认有所有权限)执行sudo操作
[root@svr5 ~]# sudo -l //查看授权的sudo操作
匹配此主机上 root 的默认条目:
logfile=/var/log/sudo, requiretty, !visiblepw, always_set_home, env_reset, env_keep=“COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS”, env_keep+=“MAIL PS1 PS2 QTDIR USERNAME
LANG LC_ADDRESS LC_CTYPE”, env_keep+=“LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES”, env_keep+=“LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE”,
env_keep+=“LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY”,
secure_path=/sbin:/bin:/usr/sbin:/usr/bin

用户 root 可以在该主机上运行以下命令:
(ALL) ALL
3)确认日志记录已生效
[root@svr5 ~]# tail /var/log/sudo
… …
May 16 22:14:49 : root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=list
步骤二:允许网站运营专员tradm通过sudo方式控制httpd、mysqld服务的运行
1)修改/etc/sudoers配置
为tradm授予相关脚本的执行权限,允许通过servivce工具来管理httpd、mysqld服务,或者直接执行这两个脚本。
[root@svr5 ~]# visudo
… …
Cmnd_Alias LAMP_CTRL=/sbin/service httpd *, /sbin/service mysqld, /etc/init.d/ht
tpd, /etc/init.d/mysqld
tradm localhost,svr5=LAMP_CTRL
2)切换为tradm用户,并验证sudo执行权限
[root@svr5 ~]# su - tradm
[tradm@svr5 ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for tradm: //验证用户tradm的口令
… …
用户 tradm 可以在该主机上运行以下命令:
(root) /sbin/service httpd *, /sbin/service mysqld *, /etc/init.d/httpd,
/etc/init.d/mysqld

[tradm@svr5 ~]$ service mysqld start //不用sudo时启动服务失败
touch: 无法创建"/var/log/mysqld.log": 权限不够
chown: 正在更改"/var/log/mysqld.log" 的所有者: 不允许的操作
[失败]
… …
[tradm@svr5 ~]$ sudo service mysqld start //通过sudo启动服务成功
正在启动 mysqld: [确定]
步骤三:允许用户ugadm通过sudo方式添加/删除/修改除root以外的用户账号
1)修改/etc/sudoers配置
为ugadm授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*。
[root@svr5 ~]# visudo
… …
Cmnd_Alias UADM_CTRL=/usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user*,
!/usr/sbin/user* * root
ugadm localhost,svr5=UADM_CTRL
2)切换为ugadm用户,验证sudo权限
可以通过sudo方式来添加/删除/修改普通用户:
[root@svr5 ~]# su – ugadm
[ugadm@svr5 ~]$ sudo -l
… …
用户 ugadm 可以在该主机上运行以下命令:
(root) /usr/bin/passwd, !/usr/bin/passwd root, /usr/sbin/user*,
!/usr/sbin/user* * root
[ugadm@svr5 ~]$ sudo useradd newuser01 //可以添加用户
[ugadm@svr5 ~]$ sudo passwd newuser01 //可以修改普通用户的口令
更改用户 newuser01 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[ugadm@svr5 ~]$ sudo usermod -L newuser01 //可以修改用户属性
[ugadm@svr5 ~]$ sudo userdel -r newuser01 //可以删除用户账号
但是不能修改root用户的属性:
[ugadm@svr5 ~]$ sudo usermod -L root
对不起,用户 ugadm 无权以 root 的身份在 svr5.tarena.com 上
执行 /usr/sbin/usermod -L root。
[ugadm@svr5 ~]$ sudo passwd root
对不起,用户 ugadm 无权以 root 的身份在 svr5.tarena.com 上
执行 /usr/bin/passwd root。
步骤四:允许wheel组成员以特权执行/bin/下的所有命令
此案例用来展示sudo的便利性及设置不当带来的危险性,生产环境下慎用。
实现时参考下列操作:
[root@svr5 ~]# visudo
… …
%wheel localhost,svr5=/bin/*
[root@svr5 ~]# usermod -a -G wheel zengye
[zengye@svr5 ~]$ sudo -l
… …
用户 zengye 可以在该主机上运行以下命令:
(root) /bin/*
[zengye@svr5 ~]$ sudo /bin/bash //与sudo –i 等效,表示初始化登录
[root@svr5 zengye]# //直接成root了
注意:类Shell的程序不要允许用户sudo执行,否则等同于开放所有root权限。
比方说,如果将/bin/bash复制为/sbin/serv1ce(名称可以有一定迷惑性),然后夹杂在其他正常命令里一起授权给用户tradm,则用户tradm执行sudo serv1ce后就具有了root的身份。
[zengye@svr5 ~]$ sudo serv1ce //执行伪装的Shell程序
[sudo] password for zengye: //验证用户口令
[root@svr5 zengye]# whoami //查看当前身份
root

你可能感兴趣的:(使用sudo分配管理权限)