我正在运行一项服务,其中有一些用户从他们的主目录运行服务。他们都在组中serviceusers
,并且我有一个用户将在服务用户文件上执行从网站发起的自动化任务。我们叫他taskrunner
。
我正在尝试允许taskrunner
以任何用户身份使用 sudo serviceusers
。
现在我尝试通过 sudoers 文件执行此操作:
serviceuser=ALL(serviceusers:serviceusers) NOPASSWD:ALL
(我意识到“serviceusers:serviceusers”表示 serviceuser 用户和 serviceuser 组。但我不希望用户taskrunner
能够以所有用户的身份使用 sudo。只是serviceusers
组中的用户)
因此,更具体地说,我希望能够sudo -u serviceuser1 ...
运行sudo -g serviceusers...
。
我一直在尝试添加/etc/pam.d/sudo
以允许这样做。但我找不到很好的资源来了解 pam.d/sudo 文件的正确语法。
我知道我可以添加到 pam.d/su 并允许用户 su 到组中的用户,所以这可能是一个选项,但是我想知道是否只使用普通的 sudo 就可以实现。
我对服务器管理还很陌生,所以如果这不是正确的方法,请告诉我一些好的资源。
答案1
詹姆士。
sudoers
我相信您可以使用以下配置行来实现预期的结果:
taskrunner ALL = (%serviceusers) NOPASSWD: ALL
上面这一行告诉用户sudo
授权taskrunner
以该组成员的身份运行任何命令serviceusers
。相关部分如下man 5 sudoers
:
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
(':' Host_List '=' Cmnd_Spec_List)*
Cmnd_Spec_List ::= Cmnd_Spec |
Cmnd_Spec ',' Cmnd_Spec_List
Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
Runas_List ::= Runas_Member |
Runas_Member ',' Runas_List
Runas_Member ::= '!'* user name |
'!'* #uid |
'!'* %group |
'!'* %#gid |
'!'* %:nonunix_group |
'!'* %:#nonunix_gid |
'!'* +netgroup |
'!'* Runas_Alias
A用户规范确定用户可以在指定主机上运行哪些命令(以及以什么用户身份运行)。默认情况下,命令以 root 身份运行,但可以根据每个命令进行更改。用户规范的基本结构是“who where = (as_whom) what”。
ARunas_Spec确定可以以何种用户和/或组身份运行命令。完全指定的Runas_Spec由两个组成运行方式列表(如上所定义)用冒号(“:”)分隔,并放在一对括号中。第一个运行方式列表表示可以通过 sudo 的 -u 选项以哪些用户身份运行该命令。第二个定义了可以通过 sudo 的 -g 选项指定的组列表。如果两个运行方式列表指定了,则可以使用其各自 Runas_Lists 中列出的任何用户和组组合来运行该命令。如果仅指定了第一个,则可以使用列表中的任何用户运行该命令,但不能-G可以指定选项。如果第一个运行方式列表为空,但指定了第二个,则该命令可以作为调用用户运行,并将组设置为运行方式列表. 如果两者运行方式列表为空,则命令只能以调用用户身份运行。如果没有Runas_Spec指定该命令可以以 root 身份运行,并且不能指定任何组。
因此,我建议的配置行的含义是:
- 用户规范:taskrunner ALL = (%serviceusers) NOPASSWD:全部
- 用户列表:任务运行器
- 主机列表:全部
- 命令规范列表:(%serviceusers)NOPASSWD:全部
- 命令规范:(%serviceusers)NOPASSWD:全部
- 运行方式规范(Runas_Spec):(%服务用户)
- 运行方式列表:%服务用户
- Runas_Member:%服务用户
- 标签规格:无密码:
- 命令:全部