我有一个脚本在用户的主目录中执行几个命令.这些文件归用户所有,而Apache(www-data组)只对它们具有读权限.脚本需要由
PHP通过exec()按需执行,并执行一些文件的删除/解除,因为Apache没有对目录的写权限而失败.
我试过像这样编辑sudoers文件:
www-data ALL=(user) NOPASSWD: /bin/su user -c /home/user/bin/script.sh
我也试过了
www-data ALL=(root) NOPASSWD: /usr/bin/sudo su user -c /home/user/bin/script.sh
但是这会提示输入www-data的sudo密码
如何在没有密码的情况下使用它?
解决方法
最后让它使用这一行:
www-data ALL=(ALL) NOPASSWD: /usr/bin/sudo -u user /home/user/bin/script.sh
由于我需要对脚本进行参数,因此我必须在行尾添加“shell样式通配符”:
www-data ALL=(ALL) NOPASSWD: /usr/bin/sudo -u user /home/user/bin/script.sh [[\:alpha\:]]*
这不是我想要的,但它确实有效(即,我的参数以字母字符开头,但实际上我希望表达式只匹配字母数字字符,破折号和句点).
我对shell通配符和POSIX字符类并不熟悉,我使用的基本上是从sudoers手册中复制粘贴的.任何知道如何应用于此类问题的人,请留下您的意见!