我正在尝试将一些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或放! 在它面前像:
默认值!