有没有办法设置 php 在 apache 下运行以创建文件夹,该文件夹由创建它的程序所有者拥有,而不是由 apache 拥有?
使用 word press 它会创建要上传到的新文件夹,但这些文件夹归 apache.apache 所有,而不归它们运行的站点所有。这也使用 ostickets 发生。现在我们必须通过 SSH 连接到服务器并 chmod 文件夹,但似乎在某个地方会有一个设置来覆盖任何执行此操作的程序之外的所有权。
Safe_mode
在您的服务器上打开。该函数mkdir()
使用与当前脚本所有者不同的所有者(“apache”、“none”、..)创建文件夹。并且脚本无法将文件上传(移动、复制)到另一个所有者(与当前脚本所有者不同)的文件夹中。
禁用safe_mode
,这将是工作。
有关详细信息,请参阅http://php.net/manual/en/features.safe-mode.php。
PS 启用后safe_mode
,您不能chmod()
在 php 中使用函数。
另一种方法是将 apache 用户和“客户用户”放在一个新组中。另外目录应该使用粘性位SGID
,以便每个新文件都将组分配给这个新组。这样,网络服务器和“客户用户”可以毫无问题地处理文件
[17:57] progman@proglap /tmp/test $ ls -al /tmp/test
total 9
drwxrwsr-x 2 root users 48 Apr 1 17:55 .
drwxrwxrwt 36 root root 9264 Apr 1 17:53 ..
正如您所看到的,该目录有点棘手SGID
,所有者是我 ( progman
) 所在的“用户”组。否,如果其他用户添加文件,则组自动设置为该组
[17:55] proglap ~ # touch /tmp/test/x
这是从根执行的。现在我们得到:
[17:57] progman@proglap /tmp/test $ ls -la /tmp/test
total 9
drwxrwsr-x 2 root users 72 Apr 1 17:59 .
drwxrwxrwt 36 root root 9264 Apr 1 17:53 ..
-rw-r--r-- 1 root users 0 Apr 1 17:59 x
如您所见,添加的文件来自根目录,但组设置为users
,这样我可以将其删除
[18:00] progman@proglap /tmp/test $ rm x
rm: remove write-protected regular empty file `x'? y
[18:01] progman@proglap /tmp/test $ ls -la /tmp/test
total 9
drwxrwsr-x 2 root users 48 Apr 1 18:01 .
drwxrwxrwt 36 root root 9264 Apr 1 17:53 ..
chmod
请记住,如果您想像组读取访问一样编辑文件,您仍然需要更改。但是更改,甚至可能使用,比处理 root 访问和使用.rw-r--r--
chmod
umask
chown
不直接,不。除非您是 root,否则您不能将文件的所有权“放弃”给其他用户。您可以使用“ AssignUserID ”apache 指令进行调查,以强制该特定虚拟主机作为特定用户/组运行。使用该 Apache/PHP 将创建具有适当所有权的任何文件
查看 PHP chown()函数