Centos 7/Apache/PHP - mkdir():权限被拒绝

Fat*_*r0r 15 php unix linux apache centos

在你大喊大叫之前!把我赶进深渊,听我说.:)

我一直在为我合作的公司开发一个Intranet站点,最初我是从运行Windows 7/IIS的工作站直接开发它.当我接近完成站点/应用程序时,我得到了一个运行ApacheCentos 7盒子,所以我开始将它迁移到该系统.我已经整理了大部分小问题,现在让网站运行了.但是,该站点的一部分与我们的数据库交互,并根据登录的人创建一个日志目录/文件.这部分使用mkdir()函数,但我收到了权限问题.

mkdir(): Permission denied
Run Code Online (Sandbox Code Playgroud)

这是我已经做过的事情:

  • 由于我使用的是Centos 7,因此Apache用户/组是apache:apache.我已经使用了chown并将/ var/www/html /和Logs文件夹的所有者更改为apache用户/组.为了安全起见,我仔细检查了httpd.conf并检查了正在运行的进程以确保我有正确的用户/组.
  • 为了测试目的,我试图将所有这些文件夹的权限更改为chmod 777,但是得到了同样的错误.
  • 从上到下搜索StackOverflow,只获得我已经尝试过的东西的答案,但无济于事.

因此,无论我使用chmod还是chown来更改正在访问的文件夹的权限,我都会遇到相同类型的错误.为了安全起见,我也检查了PHP用户,并且它也使用了apache用户.

如果有人可能有额外的洞察力,为什么它不工作,即使权限已更改,那么请赐教.如果我碰巧错过了一篇解释这种特殊情况的文章,那么大喊大叫并将我驱逐到深渊.大声笑 :)


编辑 好的,经过进一步的测试,我发现了两个似乎导致这个整体问题的问题.

  1. PHP正在尝试在从脚本创建文件夹时设置文件夹的权限,即使apache是​​所有者,服务器似乎也不喜欢它.删除该部分代码后,权限错误消失,我收到"没有这样的文件或目录"的错误.
  2. 当通过sudo测试用户Apache创建目录时,它能够创建一个没有问题的目录.但是,我的PHP脚本创建了2个目录,然后创建了最后一个目录中的日志文件.看来你不能同时创建两个目录?例如,已经创建了一个Logs文件夹,PHP正在尝试在其下创建两个目录,一个用于用户的ID,然后是另一个带有日期的文件夹.所以一旦PHP脚本运行,它应该创建类似"Logs/5235/3-3-2015 /"的东西

请注意,我试图在PHP中的mkdir上将递归值设置为true,但是当我得到最初提到的权限问题时.删除递归/模式时,它不会获得权限问题,但无法创建嵌套目录.


EDIT2

为了测试我的理论,我删除了嵌套并尝试使mkdir只创建一个目录,并且它产生与以前相同的错误.虽然它由Apache拥有,即使我将其设置为777,它也会抛出权限问题.

dra*_*ack 39

可能是因为你有755/777权限,SELinux阻止httpd编写/创建dirs.

尝试:

chcon -R -t httpd_sys_content_t /path/to/www
chcon -R -t httpd_sys_content_rw_t /path/to/www/dir/for/rw
Run Code Online (Sandbox Code Playgroud)

更多信息:http://wiki.centos.org/TipsAndTricks/SelinuxBooleans

  • 正确的上下文是httpd_sys_rw_content_t,而不是httpd_sys_content_rw_t (4认同)
  • 经过3天的搜索,谢谢! (4认同)
  • 感谢DUDE我花了差不多一个小时试着理解为什么这个基本的东西不起作用! (3认同)
  • 在新安装的CentOs 7 + Apache + PHP(FastCGI)上,它也对我有用。 (2认同)