Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php写入属于不同用户的目录中的文件_Php_Linux_File Permissions - Fatal编程技术网

使用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运行它时

我有一个托管多个域的服务器。 从其中一个域开始,使用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文件的内容。根据您试图完成的任务,可能有不同的方法,可能不需要太多地放松权限。