使用php写入属于不同用户的目录中的文件

时间:2010-10-08 10:42:30

标签: php linux file-permissions

我有一台托管多个域的服务器。 从其中一个域,使用php脚本我希望能够在其他域的.htaccess中添加几行。

例如来自masterdomain.com我想将一些行附加到otherdomain.com的.htaccess。所以从/ home / masterdomain / www /中的php文件我想在/ home / otherdomain / www上添加几行到.htaccess。

为了做到这一点,我编写了一个shell脚本,当我以root身份运行shell脚本时,它可以工作,但是当通过php运行它时,exec('./write_htaccess.sh')它不起作用,没有任何事情发生。我检查过并且没有返回任何错误。

我已经在write_htaccess.sh上尝试了chmod u + s来尝试让它每次都以root身份运行但是这也没有用,我可能会错误地设置它。

我怎么能实现这个目标?我是否必须提供php root权限,最好的方法是什么?

6 个答案:

答案 0 :(得分:1)

PHP可能正由您的Web服务器运行的任何用户运行;我猜你说服务器你的意思是web服务器。在Apache的Red Hat或Fedora上(除非您使用的是其他Web服务器),其他版本的linux可能会使用www或其他一些用户。当您从PHP运行shell脚本时,它由用户apache执行。该用户需要对.htaccess文件具有写入权限,或者需要位于对.htaccess文件具有写入权限的组中。

尝试将.htaccess文件的组所有权更改为apache(或其他)并使其成为可写组。这避免了与sudo或setuid位相关的问题。当然,这意味着该组中的任何人都可以修改.htaccess文件。

答案 1 :(得分:0)

如何将php添加到sudoers并允许它只执行一件事。

答案 2 :(得分:0)

您可以使用php连接到sftp / ftp / ssh,并以您尝试编辑的文件身份进行身份验证。

答案 3 :(得分:0)

Bash(和其他shell)调用其他命令,因为真实用户ID不是有效用户ID - 因此's'标志无效。使用sudo调用程序,它应该按预期工作,或者设置脚本从[x] inetd运行(带有适当的访问控制)。

答案 4 :(得分:0)

您可以将文件设为可写文件,并将两个用户添加到同一个组中吗?

答案 5 :(得分:0)

您可以在没有密码的情况下向apache用户授予sudo权限,并且只允许一个命令作为您的write_htaccess.sh脚本。然后使用exec('sudo ./write_htaccess.sh')

就个人而言,我可能只是打开文件和目录权限。