如何在sudoers中将命令参数与Cmnd_Alias一起使用?


36

如何在sudoers中指定命令参数?作为背景,aws命令实际上是通向大量子系统的网关,我想限制用户只能运行aws s3 cp ...any other args...

当我尝试以下内容时 /etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

不幸的是,shell提示输入密码

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

如果我在Cmnd_Alias中删除了命令args,那么它会按需要流动(没有密码提示),但是授权范围太广。因此,仅将某些类型的命令调用限制为正确的方法是什么

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

然后

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

非常感谢。


为什么会有/ usr / local / bin / aws,/ usr / local / aws / bin / aws?我的意思是您在同一行中重复了两次命令?
Mohammed Noureldin

Answers:


47

您没有使用任何通配符,但是提供了两个参数。因此,请sudo查找与编写完全相同的命令(路径查找除外)(来自man 5 sudoers):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

尝试类似的方法:

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

注意:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

因此,每个命令只需要一个通配符。


1
+1简要说明并分享知识,谢谢。
Dinesh

1
请注意,sudo不能正确考虑在某些情况下可用于利用漏洞的参数分隔,请参见unix.stackexchange.com/a/279142/43920。因此/usr/local/bin/aws s3 cp,与其在sudoers 中指定,不如将其替换为脚本(只能由root写入),这是更安全的。
pcworld

6

与@muru相同,但对于喜欢完整示例的用户:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

/sbin/cmd1/sbin/cmd2可以是任何其他命令。

的目的ECHO_CMD是提出sudo echo X A要求输入密码而sudo echo A X不是密码的要求,并使您能够通过这种简单的实验获得信心。

(假设echo位于中/bin/echo,以检查它在系统上的位置,请尝试whereis echo


是的,有/bin/echo二进制文件,但是echo如果您不提供完整路径,大多数外壳程序还具有内置函数,它将代替该二进制文件使用。
Marki555
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.