使用php写入属于不同用户的目录中的文件
我有一个托管多个域的服务器。 从其中一个域开始,使用php脚本,我希望能够在其他域的.htaccess中添加几行内容 例如,在masterdomain.com中,我想在otherdomain.com的.htaccess中添加一些行。因此,从/home/masterdomain/www/php文件中,我想在位于/home/otherdomain/www的.htaccess中添加几行内容 为此,我编写了一个shell脚本,当我以root用户身份运行shell脚本时,它可以工作,但当通过php运行它时,使用php写入属于不同用户的目录中的文件,php,linux,file-permissions,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\u htaccess.sh')
它不工作,什么也没有发生。我检查了,没有返回错误
我在write_htaccess.sh上尝试了chmod u+s,试图使它每次都以root身份运行,但这也不起作用,尽管我可能将s设置得有点错误
我怎样才能做到这一点?我是否必须给php根权限,最好的方法是什么?如何将php添加到sudoers并允许它只做一件事。如何将php添加到sudoers并允许它只做一件事。php可能由您的web服务器运行的任何用户运行;我猜你说的服务器是指网络服务器。在Red Hat或Fedora即apache上(除非您使用的是不同的web服务器),其他版本的linux可能会使用www或其他用户。当您从PHP运行shell脚本时,它由用户apache执行。该用户需要对.htaccess文件具有写入权限,或者需要位于对.htaccess文件具有写入权限的组中
尝试将.htaccess文件的组所有权更改为apache(或其他类型),并使其组可写。这样可以避免与sudo或setuid位混在一起。当然,这意味着该组中的任何人都可以修改.htaccess文件。PHP可能由运行web服务器的任何用户运行;我猜你说的服务器是指网络服务器。在Red Hat或Fedora即apache上(除非您使用的是不同的web服务器),其他版本的linux可能会使用www或其他用户。当您从PHP运行shell脚本时,它由用户apache执行。该用户需要对.htaccess文件具有写入权限,或者需要位于对.htaccess文件具有写入权限的组中
尝试将.htaccess文件的组所有权更改为apache(或其他类型),并使其组可写。这样可以避免与sudo或setuid位混在一起。当然,这意味着该组中的任何人都可以修改.htaccess文件。您可以使用php连接到sftp/ftp/ssh,并以用户身份验证您试图编辑的文件 您可以使用php连接到sftp/ftp/ssh,并以用户身份验证要编辑的文件 Bash(和其他shell)调用其他命令作为实际用户id而不是有效用户id,因此“s”标志无效。使用sudo调用程序,程序应能按预期工作,或者将脚本设置为从[x]inetd(具有适当的访问控制)运行。Bash(和其他shell)调用其他命令,因为实际用户id不是有效用户id,因此“s”标志无效。使用sudo调用程序,程序应能按预期工作,或将脚本设置为从[x]inetd(具有适当的访问控制)运行。能否使文件组可写,并将两个用户添加到同一组?能否使文件组可写,并将两个用户添加到同一组?您可以向apache用户授予sudo权限,而无需密码,只允许一个命令,即您的
write\htaccess.sh
脚本。然后使用exec('sudo./write\u htaccess.sh')
就个人而言,我可能只是打开文件和目录权限。您可以向apache用户授予sudo权限,而无需密码,只允许一个命令,即
write\u htaccess.sh
脚本。然后使用exec('sudo./write\u htaccess.sh')
就我个人而言,我可能只是打开文件和目录权限。问题是其中许多.htaccess还不存在,我不想手动创建它们,因为我在这台服务器上有超过100个域。你可以确保web服务器用户有写权限(直接或通过组所有权)并让write_access.sh脚本创建.htaccess文件(如果该文件不存在)。我想你应该警惕放弃太多的权限,这是一个安全风险。您肯定应该仔细阅读有关保护.htaccess文件的内容。根据您试图完成的任务,可能会有不同的方法,可能不需要太多地放松权限。问题是其中许多.htaccess还不存在,我不想手动创建它们,因为我在这台服务器上有超过100个域。你可以确保web服务器用户对每个目录都有写权限(直接或通过组所有者),如果不存在,请让你的write_access.sh脚本创建.htaccess文件。我想你应该警惕放弃太多的权限,这是一个安全风险。您肯定应该仔细阅读有关保护.htaccess文件的内容。根据您试图完成的任务,可能有不同的方法,可能不需要太多地放松权限。