![PHP mkdir() 权限被拒绝](https://linux22.com/image/1281924/PHP%20mkdir()%20%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D.png)
我有一个 Centos 5.6、Apache 2.2.19 和 PHP 5.2.17 的服务器设置。PHP 由 suPHP 处理。
在全局 php.ini 中
safe_mode = off
open_basedir = none
Apache 设置为按照nobody
suPHP 配置运行。
我有两个域名设置:
/home/user1/public_html
和/home/user2/public_html
两个public_html
目录的权限均为 0750,组为nobody
每个用户目录中的所有文件/目录都归该用户所有,并且也将组设置为该用户。
我正在运行一个脚本,/home/user1/public_html/scripts/functions.php
试图创建一个目录/home/user2/public_html/user_files
(其 chmod 权限设置为 0757),但是我收到了权限被拒绝错误......
我假设这与 PHP 以 身份运行有关nobody
,但我不确定要进行哪些更改才能使每个用户文件夹中的脚本能够写入其他用户的文件夹,除非我让任何人都可以写入用户文件夹,但这听起来不太安全……
有人知道我哪里错了吗?
编辑:
drwx--x--x root.root /home
drwx-wx--x user2.user2 /home/user2
drwxrwx--- user2.nobody /home/user2/public_html
drwxrwxrwx user2.nobody /home/user2/public_html/user_files
答案1
该目录的/home/user2/public_html/user_files
所有者为xxx:nobody
,并具有 权限757
,对吗?
757
这意味着任何人都可以读取/访问它,但只有不属于 组 的用户才被授予写入权限nobody
。因此,如果您只更改此目录的组,或者最好将权限更改为 ,您的问题可能会得到解决。775
所有者775
和组具有写入权限,因此他们可以在其中创建更多文件/目录,但其他任何人都无法写入此目录。
答案2
我在 F15 上遇到了类似的问题,而 SELinux 就是罪魁祸首。尝试:
chcon -R -h -t http_sys_rw_content_t /home/user2/public_html/user_files
在您希望 Apache 具有 R/W 访问权限的任何其他目录上使用相同的命令。如果有效,请使用 semanage 使上下文更改在重新启动后永久生效。
答案3
最后,我创建了一个包含用户 1 和用户 2 的新组,并仅更改了相关文件夹的组所有权,以允许跨文件夹写入。