Apache sudoers 访问

Apache sudoers 访问

我正在从 php 进行系统调用,它是

`sudo /usr/bin/perl -pi -e 's/foo/bar/g' /tmp/newxml.xml`;

在 php cli 中运行良好。但在通过浏览器的 php 中无法运行,因为 apache 没有所需的执行权限。如何让 apache 成为 sudoer 以允许仅运行 /usr/bin/perl ?

我知道必须编辑 /etc/sudoers 才能执行此操作,但我不确定该怎么做。有什么提示吗?

我正在运行 RHEL 5.5

答案1

visudo

添加

nobody ALL=(ALL)NOPASSWD:/usr/bin/perl

将 nobody 替换为您的 apache 用户。

但你不应该这么做。授予 apache sudo 访问 perl 的权限实际上会赋予任何破坏你的 php 应用程序的人立即访问你的机器的权限。

您应该检查 umask/tmp/newxml.xml并确保您的 apache 用户具有写入权限。

答案2

从安全角度来看,我认为授予 apache 用户 sudo 权限并不明智。您是否考虑过在组级别更改该文件的所有权,以便 apache 无需 sudo 即可对其进行写入?

答案3

首先,您可以在 php 内部执行相同的操作,而无需调用 perl。

其次,由于您正在运行 rhel,因此可能是 SELinux 妨碍了您。尝试运行 setroubleshooter,它将为您提供有关如何修复此问题的必要信息。

第三:不要给予 apache root 权限,也不要给予 sudoers 权限或类似权限。

答案4

最好将 apache 的访问权限限制为您需要运行的 Perl 命令,而不是整个 Perl 或 root。为此,围绕 Perl 创建一个包装器脚本。创建一个新用户或找到一个合适的用户。在此示例中,该用户是 bob:

EDITOR=emacs                              #or other favorite editor
visudo -f /etc/sudoers.d/apache_foobar    #safe edit as root

添加此行,保存并退出编辑器:

apache ALL=(bob) NOPASSWD: /the/path/myscript

然后将其放入/the/path/myscript 中

#!/bin/bash
echo "Hello, I'm "`whoami`  #should see bob
/usr/bin/perl -pi -e 's/foo/bar/g' "$1"

如果这是唯一需要操作的文件,则替换"$1"为。/tmp/newxml.xml

该脚本仅对 bob 可读+可执行,而对 apache 或其他人则不需要:

chown bob:bobsgroup /the/path/myscript
chmod 500 /the/path/myscript

现在用户 apache 应该能够在你的 php 中以用户 bob 的身份运行此程序:

`sudo -u bob /the/path/myscript /tmp/newxml.xml`;

如果 bob 是为此目的新创建的用户,则可能必须将 bob 添加到 /etc/shadow。(注意:SELinux 可能会给此设置带来麻烦,但这也是可以解决的)

相关内容