一尘不染

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

linux

大喊之前,请重复!把我放进深渊,听我说。:)

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


mkdir(): Permission denied

这是我已经完成的工作:

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

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

如果即使更改了权限,任何人都可能对它为什么不起作用有更多的了解,请赐教。如果我碰巧错过了一篇解释这种特殊情况的文章,那就大喊一声,把我放逐到深渊。大声笑
:)


编辑 好的,因此在进一步测试中,我发现了2个似乎引起此总体问题的问题。

  1. 当使用脚本创建文件夹时,PHP尝试设置该文件夹的权限,即使apache是​​所有者,服务器似乎也不喜欢这样。删除该部分代码后,权限错误消失了,并且出现“没有此类文件或目录”的错误。
  2. 当通过sudo与用户Apache测试创建目录时,它能够创建目录没有问题。但是,我的PHP脚本正在创建2个目录,然后在最后一个目录中创建一个日志文件。看来您无法同时创建两个目录?例如,已经创建了一个Logs文件夹,PHP试图在其下创建两个目录,一个目录用于输入用户的ID,然后在其中的另一个文件夹中添加日期。因此,一旦PHP脚本运行,它应该创建类似“ Logs / 5235 / 3-3-2015 /”的内容

只是要注意,我试图在PHP的mkdir上将递归值设置为true,但这是当我得到最初指出的权限问题时。删除递归/模式后,它不会出现权限问题,但无法创建嵌套目录。


编辑2

为了检验我的理论,我删除了嵌套,并尝试使mkdir仅创建1个目录,并且它生成的错误与以前相同。尽管它是Apache拥有的,即使我将其设置为777,它也会抛出权限问题。


阅读 809

收藏
2020-06-03

共1个答案

一尘不染

可能是,尽管您拥有755/777权限,但SELinux阻止了httpd编写/创建目录。

尝试:

chcon -R -t httpd_sys_content_t /path/to/www
chcon -R -t httpd_sys_content_rw_t /path/to/www/dir/for/rw

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

2020-06-03