2010-04-01 90 views
5

有没有一种方法来设置PHP apache下运行创造与创造,而不是由阿帕奇所拥有它由程序的所有者拥有该文件夹的文件夹?PHP的mkdir和Apache所有权

使用word的时候按下它由他们在运行网站创建新的文件夹上传到但这些都是apache.apache拥有,不,这也正好利用ostickets。现在,我们必须SSH进入服务器并chmod该文件夹,但似乎会有一个设置来覆盖任何程序以外的所有权。

回答

2

Safe_mode是打开你的服务器上。函数mkdir()创建与拥有者(“apache”,“none”,..)不同的当前脚本所有者的文件夹。而且脚本无法将文件上传(移动,复制)到另一个所有者的文件夹中(这不像当前脚本所有者)。

禁用safe_mode,这将是工作。详情请参阅http://php.net/manual/en/features.safe-mode.php

P.S.启用safe_mode您不能在php中使用chmod()函数。

+0

这工作三河 - 谢谢 – 2010-04-10 10:00:56

+0

**警告此功能已从PHP 5.3.0和从PHP 5.4.0删除截至**。** – Jim 2017-10-05 16:54:57

1

不直接,没有。除非您是root用户,否则您不能“​​放弃”文件的所有权给其他用户。您可以使用“AssignUserID”apache指令进行调查,以强制该特定虚拟主机作为特定用户/组运行。与阿帕奇/ PHP将创建任何文件与适当的所有权

+0

万一别人认为这可能是去(使用mpm_perchild_module)的方式 - 这是我没有想到:从链接:**此模块的功能。这个模块的开发并不完整,目前不活跃。除非你是一个愿意帮助解决它的程序员,否则不要使用perchild。** – Jim 2017-10-05 16:48:11

0

退房PHP chown()功能

+1

如果没有超级用户运行,此功能将失败。 – webbiedave 2010-04-01 15:17:41

2

另一种方法是把apache用户和“客户用户”在一个新的组。另外该目录应该使用粘性位SGID,这样每个新文件都将该组分配给这个新组。通过这种方式,网络服务器和“客户用户”可以用文件的工作没有任何问题

[17:57] [email protected] /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] [email protected] /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] [email protected] /tmp/test $ rm x 
rm: remove write-protected regular empty file `x'? y 
[18:01] [email protected] /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,如果你想编辑文件作为rw-r--r--只是组读访问。但更改chmod,甚至可能与umask一起工作,比处理根访问和使用chown要好。