文件特定的visudo权限

我正在尝试将一些bash脚本集成到一个网站pipe理区域。

背景

我在Ubuntu服务器上运行Apache。 给Apache(万维网数据)sudo权利是远非理想,所以我不会去。 但是,可以为非sudo用户指定sudo访问权限。

出于一些安全原因,apache必须没有,或者最坏的情况下严格限制sudo访问…因此,适当的解决方法是指定www-data可以sudo的特定脚本。

为了控制这个,我使用visudo创build和编辑了etc/sudoers.tmp

我在var/www/html/scripts添加了一个名为sudoscripts.sh的testing脚本。

这很简单:

 #!/bin/sh sudo whoami 

所以,作为一个testing,我添加了一行:

www-data ALL=(ALL) NOPASSWD: ALL

这按预期工作。 但是,这可以在任何地方访问所有脚本。

然后我把它换成:

www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

这失败了(在我的应用程序例外):

sudo: no tty present and no askpass program specified

…即:没有sudo访问。

任何人都可以指出我做错了什么? 我已经看了几个例子/其他堆栈溢出线程,他们或者是一个糟糕的匹配,或者没有答案。

编辑清晰

这里是完整的文件:

 Defaults env_reset Defaults exempt_group=sudo Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL) NOPASSWD:ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d # Apache using /var/www/html/scripts # (doesnt work) www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh # (works) # www-data ALL=(ALL) NOPASSWD: ALL 

谢谢

问题是,你没有运行你用sudoinputsudoers文件的命令。

您直接从您的networking服务器运行/var/www/html/scripts/sudoscript.sh 。 然后脚本用whoami调用sudo,但whoami不允许在你的sudoers文件中。 您需要在sudoers中设置whoami ,而不是脚本位置。

这当然没有多less意义。

更有意义的是:

/var/www/html/scripts/sudoscript.sh

 #!/bin/sh whoami 

在/ etc / sudoers文件

 www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh 

然后从你的networking服务器用sudo运行脚本:

 sudo /var/www/html/scripts/sudoscript.sh 

在visudo注释掉requiretty或放! 在它面前像:

默认值!