以不同的用户身份运行exec

时间:2011-01-17 09:24:19

标签: php exec

是否可以作为不同的用户运行exec()(在我的盒子上它作为www-data运行)。我希望执行一个需要访问不属于www-data的文件的脚本。

4 个答案:

答案 0 :(得分:6)

如果您可以访问服务器的配置(假设它是Apache),您可以考虑使用suPHP。在虚拟主机configuration中,您可以显式设置执行PHP脚本的用户和组:

<VirtualHost 192.168.1.1:80>
...
suPHP_UserGroup user group
...
</VirtualHost>

此设置适用于使用--with-setid-mode=paranoid选项构建的suPHP配置。

更改用户ID的另一种方法是posix_setuid(),需要适当的权限。这意味着将PHP脚本作为 root 运行,这是一个严重的安全问题。

答案 1 :(得分:4)

几年前我有一个类似的要求,需要一些PHP脚本与串口通信。第一个串口通常是/ dev / ttyS0,由root拥有并在组拨出中。

对于我的初始设置,我将我的apache用户添加到组拨出。 PHP脚本能够直接与串口通信,没有任何问题。但是,只有一个脚本实例可以在任何时候打开串行端口,因此该解决方案无法工作。

然后我创建了一个守护进程,它在串口和PHP脚本之间提供了一个层。 PHP脚本将通过命名管道与守护进程通信,然后守护进程将格式化请求并将其传递到串行端口 - 在此过程中进行一些缓存。

所以,要么将www-data或者你的apache用户添加到拥有这些文件的组中,给予组执行权限,要么像我一样使用代理。如果安全问题涉及你,那么我会选择后者。

答案 2 :(得分:1)

不,不是直接的。如果您在Linux机器上并拥有权限,则可以在文件上设置setuid位。

请记住,网络服务器出于某种原因以不同的用户身份运行。这是一个非常重要的安全机制,通过解决它,您可能会导致安全漏洞。

答案 3 :(得分:0)

您可以更改运行服务器的用户。这可以使用windows版本的apache轻松完成(apache在那里作为服务运行,并且很容易配置运行apache的用户)。

您使用哪种服务器平台?