我想添加一条/etc/sudoers
规则,允许组中的任何用户admin
以组用户的身份登录users
。
例子:
在群组admin
I 中有:alan
和smith
。在群组 中users
:anna
,mike
。以及其他用户:stephen
,nick
。
alan
并且smith
可以这样做:
sudo su - anna
sudo su - mike
但不能这样做:
sudo su -
sudo su - root
sudo su - stephen
我徒劳地尝试了这样的事情:
%admin ALL=(ALL) NOPASSWD:/bin/su - %users
有任何想法吗?
PS如果能再满足一个依赖关系就更好了:
alan
也在users
群组中,smith
不能执行以下操作:
sudo su - alan
因为alan
是在admin
团体中。
答案1
我认为您实际上并不想要或需要su
您的用例。您似乎想要的是让特定用户组能够任意假设特定其他组中任何用户的身份。您只需要 sudoers 即可:
%admin ALL=(%users) NOPASSWD:ALL
上述 sudoers 规则意味着admin
组内的所有用户都可以运行任何命令作为组中的任何用户users
通过sudo -u <user> <command>
。
如果您愿意,您可以限制管理员用户可以以其他用户身份运行的命令,ALL
最后用更具体的命令替换。man sudoers
有关更多信息,请参阅。
要获取给定组用户的 ~login shell users
,而不是su
使用行政可以做:
sudo -u anna /bin/bash -il
su
关于(man su)的注释:
su 命令用于在登录会话期间成为另一个用户。
su
总是提示你输入登录用户的密码,除了对于调用用户为 root 的情况。sudo su - [user]
不会提示输入密码,因为您提升为 root(通过 sudo),然后 execsu - [user]
开始新的登录会话。但如果您不想将 sudoer 提升为 root,则 sudoer 需要知道他们想要作为的用户的密码,这首先su
违背了使用的目的。sudo
答案2
您不能使用“%users”,因为这意味着一个 Linux 组,而不是一个 sudoers 变量。
您可以执行以下操作:
Cmnd_Alias SWITCH_USERS = /bin/su - anna, /bin/su - mike
%admin ALL=(ALL) NOPASSWD: SWITCH_USERS
如果你只为此事在系统中创建两个组 admin/users,你可能想要创建 sudoers 用户别名(这样你只需要跟踪 sudoers 文件)我个人认为,最好对 sudo 使用 sudoers 选项,对文件/目录使用系统组相关权限(但这是我认为,不是必须的)
Sudoers 手册在某些主题上有点难以理解。这里有一份很好的指南(附有示例),可以帮助您编辑 sudoers 文件:如何编辑 sudoers 文件
我认为对于您要完成的任务,您需要牢记的最有用的一点是:如果您在 sudoers 中添加完整的命令(包含所有选项和参数,则应该以这种方式运行,因此,如果您在命令后指定用户名,“/bin/su - ”将不起作用(参见我的示例)您可以使用 NOEXEC 否定:您想在 sudo 中以任何方式禁止的命令,并始终使用“visudo”来编辑 /etc/sudoers,以检查语法。