我需要没有密码提示的sudo脚本。我哪里做错了?


9

我在sudo组中:

$ id
uid=1002(molot) gid=1002(molot) groups=1002(molot),27(sudo),33(www-data)

在我看来,我似乎有适当的设置:

sudo    ALL=(ALL:ALL) NOPASSWD: ALL

这是最后一条未注释的行。

但是,当我尝试git pull输入时,我被要求重新输入密码:

$ sudo -u www-data git --git-dir /var/www/.git --work-tree /var/www pull "origin" master
[sudo] password for molot:

当我登录控制台时这不是问题,但是在脚本中是不可接受的。那么,如何允许sudo组中的任何人git pull作为www-data而不重新输入密码?

当我直接输入我的名字时:

molot ALL=(ALL) NOPASSWD: ALL

这个对我有用。但是,显然,不适合玛丽安或sudo组的其他用户。据我了解的手册,用户名和组名都应该在第一个文件中工作。


可以sudo -u www-data ./your_script.sh吗 该脚本的目的是什么?
jimbobmcgee 2014年

@jimbobmcgee这是一个git钩子,所以不,我不能在上面添加任何内容。它由推送git更改的用户调用,但我没有找到解决之道。
Mołot

第一个字段(如果我对sudoers文件格式的快速理解正确)是调用用户的用户名。您是否尝试过用通配符替换它*,还是git钩子以哪个用户身份运行?
CVn 2014年

@MichaelKjörling如说这里应该可以写在第一个字段用户和组。*不起作用。显然,直接输入我的名字对我有效……但不适用于sudo组中的其他用户。
Mołot

@MichaelKjörling谢谢,您的评论让我寻找特殊字符,并允许我找到答案:D编辑:删除了自己的答案,并从同一时间接受了第三者的答案。
Mołot

Answers:


19

似乎您的sudoers中有相关行缺少字符:

sudo ALL =(全部:全部)NOPASSWD:全部

匹配名为“ sudo”的用户。对于“ sudo组中的所有用户”,应为:

%sudo ALL =(全部:全部)NOPASSWD:全部

(请注意开头的%符号)。


1
嗯,这就是%in的%wheel意思。
nikhil 2014年

1

sudo visudo

然后,假设molot是您的用户名,请转到文件末尾并:

molot ALL=(ALL) NOPASSWD: ALL

这应该可以,但是如果不能,请及时通知我们。


这可行。为了我。但是,显然,不适用于marian或sudo组中的任何其他用户。
Mołot

然后创建用户别名(User_Alias),并授予以root(Runas_Alias)身份运行特定命令的权限。我不知道您的小组的设置方式,您可以查看Sudoers Wiki help.ubuntu.com/community/Sudoers。 这确实很简洁。检查“用户规范”部分,这将有所帮助。
Jugurtha Hadjar 2014年
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.