假设我有一组非特权用户(user01、user02、user03...),他们是名为“x_users”的 Linux 安全组的成员:
$ groups user01
user01 : user01 x_users
此外,假设我有一组管理员用户(admin01、admin02、admin03...),他们都是名为“x_admins”的 Linux 安全组的成员:
$ groups admin01
admin01 : admin01 x_admins
我希望 x_admin 组的每个成员都能够使用 sudo(8) 和 su(1) 来调用交互式登录 shell,就像 x_users 组成员的任何用户一样,例如,
[admin01 ~]$ sudo su - user01
[user01 ~]$ # do stuff as user01
[user01 ~]$ exit
[admin01 ~]$
x_admins 组的成员不得使用 sudo(8) 和 su(1) 为非 x_users 组成员的任何用户调用交互式登录 shell:
[admin01 ~]$ sudo su - nonxuser
[sudo] password for admin01:
Sorry, user admin01 is not allowed to execute '/bin/su - nonxuser' as root on localhost
[admin01 ~]$
实现此目的的一种方法是创建一个配置文件“/etc/sudoers.d/x_admins”,如下所示:
# /etc/sudoers.d/x_admins
User_Alias ADMINS = %x_admins, %wheel
ADMINS ALL = (root) /bin/su - user01
ADMINS ALL = (root) /bin/su - user02
ADMINS ALL = (root) /bin/su - user03
# ...
当然,在 sudoers 配置文件中手动列出 x_users 组的各个成员是乏味且容易出错的。在 sudoers 配置文件中是否有更简洁的方法来完成此任务?
答案1
更严格地实现您想要的效果的一种方法是允许 admins 组的用户直接使用“sudo”以 users 组的用户身份运行命令。这大致可以通过将以下内容添加到 /etc/sudoers 来完成:
%x_admins ALL = (%x_users) ALL
然后,管理员可以使用以下命令为用户“user0”运行命令:
sudo -u user0 command...
要获得该用户的完整 shell 访问权限,管理员可以使用以下命令:
sudo -i -u user0
这样你就不会让管理员以 root 身份运行任何东西,甚至是“su”。