2010-10-08 47 views
1

我有一台服务器,它承载多个域。 从其中一个域,使用PHP脚本我想能够追加几行到其他域的.htaccess。使用php写入属于不同用户的目录中的文件

例如来自masterdomain.com我想追加一些行到otherdomain.com的.htaccess。因此,从/ home/masterdomain/www /中的php文件中,我想追加几行到位于/ home/otherdomain/www的.htaccess。

为此,我编写了一个shell脚本,当我以root用户身份运行shell脚本时,它可以工作,但是通过php运行时,它不工作,没有任何事情发生。我检查了并且没有返回错误。

我试过在write_htaccess.sh上尝试使用chmod u + s,并且每次都以root身份运行它,但那也不起作用,但我可能已经错误地设置了s位。

我怎么能做到这一点?我必须给予PHP根权限,那么执行此操作的最佳方法是什么?

回答

0

如何将PHP添加到sudoers并允许它只做一件事。

1

PHP可能正在运行无论您的Web服务器运行在哪个用户;我猜你说服务器是指网络服务器。在红帽或Fedora上,这是Apache(除非你使用的是不同的Web服务器),其他类型的Linux可能使用www或其他用户。当您从PHP运行shell脚本时,它将由用户apache执行。该用户需要向.htaccess文件写入权限,或者需要位于具有对.htaccess文件的写入权限的组中。

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

+0

问题是,许多这些.htaccess文件还不存在,我不想手动创建它们,因为我在此服务器上拥有超过100个域。 – b2238488 2010-10-08 13:26:16

+1

您可以确保Web服务器用户拥有对每个目录的写权限(直接或通过组所有权),并让您的write_access.sh脚本创建.htaccess文件(如果它不存在)。我认为你想警惕放弃太多的权限,但这是一个安全风险。你绝对应该阅读关于保护.htaccess文件。取决于你想要完成的事情,可能有不同的做法,也许不需要太多松动权限。 – mazianni 2010-10-08 15:00:45

0

您可以使用php连接到sftp/ftp/ssh并以用户身份验证您正在尝试编辑哪些文件。

0

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

0

你可以使文件组可写,并将两个用户添加到同一组?

0

您可以授予sudo权限给没有密码的apache用户,并且只允许一个命令,它将是您的write_htaccess.sh脚本。然后使用exec('sudo ./write_htaccess.sh')

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

相关问题