授予 A 组成员对 B 组用户帐户的“sudo su”访问权限

授予 A 组成员对 B 组用户帐户的“sudo su”访问权限

假设我有一组非特权用户(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”。

相关内容