允许 Apache 以不同的用户身份运行命令

And*_*rei 6 linux php sudo apache-2.2

我有一个脚本,可以在用户的​​主目录中执行多个命令。这些文件归用户所有,Apache(www-data组)对它们只有读取权限。该脚本需要由 PHP 通过 按需执行exec(),并执行一些文件的删除/解压缩,由于 Apache 没有对目录的写权限,因此失败。

我试过sudoers像这样编辑文件:

www-data ALL=(user) NOPASSWD: /bin/su user -c /home/user/bin/script.sh
Run Code Online (Sandbox Code Playgroud)

但它提示我输入用户的密码

我也试过

www-data ALL=(root) NOPASSWD: /usr/bin/sudo su user -c /home/user/bin/script.sh
Run Code Online (Sandbox Code Playgroud)

但这会提示输入www-data's sudopassword

如何在没有密码的情况下使其工作?

And*_*rei 5

终于让它与这条线一起工作:

www-data ALL=(ALL) NOPASSWD: /usr/bin/sudo -u user /home/user/bin/script.sh
Run Code Online (Sandbox Code Playgroud)

由于我的脚本需要参数,我不得不在行尾添加一个“shell 风格的通配符”:

www-data ALL=(ALL) NOPASSWD: /usr/bin/sudo -u user /home/user/bin/script.sh [[\:alpha\:]]*
Run Code Online (Sandbox Code Playgroud)

这并不完全是我想要的,但它有效(即,我的参数碰巧以字母字符开头,但实际上我希望表达式仅匹配字母数字字符、破折号和句点)。

我一点也不熟悉 shell 通配符和 POSIX 字符类,我使用的基本上是从 sudoers 手册中复制粘贴的。任何知道这些如何适用于此类问题的人,请留下您的评论!