使用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

猜你喜欢

转载自blog.csdn.net/weixin_44792728/article/details/90677903