【发布时间】:2012-11-28 07:06:33
【问题描述】:
是否可以以其他用户身份运行exec()(在我的机器上它以 www-data 身份运行)。我希望执行一个需要访问不属于 www-data 的文件的脚本。
【问题讨论】:
是否可以以其他用户身份运行exec()(在我的机器上它以 www-data 身份运行)。我希望执行一个需要访问不属于 www-data 的文件的脚本。
【问题讨论】:
如果您有权访问服务器的配置(假设它是 Apache),您可以考虑使用suPHP。在虚拟主机的configuration 中,您可以显式设置执行 PHP 脚本的用户和组:
<VirtualHost 192.168.1.1:80>
...
suPHP_UserGroup user group
...
</VirtualHost>
此设置可用于使用 --with-setid-mode=paranoid 选项构建的 suPHP 配置。
另一种更改用户 ID 的方法是 posix_setuid(),这需要相应的权限。这意味着以 root 身份运行您的 PHP 脚本,这是一个 serios 安全问题。
【讨论】:
几年前我有一个类似的要求,需要一些 PHP 脚本来与串行端口通信。第一个串行端口通常是 /dev/ttyS0,由 root 拥有并在组拨出中。
对于我的初始设置,我将我的 apache 用户添加到组拨出。 PHP 脚本能够毫无问题地直接与串口通信。但是,任何时候只有一个脚本实例可以打开串口,所以这个解决方案是行不通的。
然后我创建了一个守护程序,它在串行端口和 PHP 脚本之间提供了一个层。 PHP 脚本将通过命名管道与守护进程对话,然后守护进程将格式化请求并将其传递到串行端口 - 在此过程中进行一些缓存。
因此,要么将 www-data 或任何您的 apache 用户添加到拥有这些文件的组中,给予组执行权限,或者像我一样使用代理。如果您担心安全问题,那么我会选择后者。
【讨论】:
不,不是直接的。如果您在 linux 机器上并且有权限,您可以在文件上设置 set the setuid 位。
请记住,网络服务器以不同的用户身份运行是有原因的。这是一个非常重要的安全机制,如果绕过它,您可能会导致安全漏洞。
【讨论】:
您可以更改运行服务器的用户。这可以使用 windows 版本的 apache 轻松完成(apache 作为服务运行在那里,并且很容易配置运行 apache 的用户)。
您使用哪个服务器平台?
【讨论】: