PHP не может создать каталог с mkdir

У меня есть ранее работающий PHP script, который может создать каталог с mkdir:

$webfolder = "/var/www/html/images/user";
mkdir($webfolder, 0770);

Я внес некоторые изменения в настройку разрешения папки /var/www/html/images, которая теперь:

drwxrwx---. myself apache system_u:object_r:httpd_sys_content_t:s0 images

Я думаю, что ранее эта папка принадлежала apache. Но поскольку apache имеет полные привилегии чтения, записи и выполнения как группы пользователей, мне интересно, почему он не может создать папку внутри. Использование mkdir создает логическое значение false.

Является ли проблема из-за принадлежности к каталогу или есть другие причины? Обратите внимание, что я использую PHP версии 5.4.

Добавлен журнал ошибок

[Mon Dec 17 11:12:34 2012] [ошибка] [клиент 127.0.0.1] PHP Предупреждение: mkdir(): разрешение отклонено в /var/www/html/upload в строке 33, referar: https://mywebsite.com/referer

Ответ 1

Ответ смотрит прямо передо мной, но я скучаю по нему из-за моей незнакомости с SELinux.

Тип контекста SELinux должен быть установлен как httpd_sys_content_rw_t вместо httpd_sys_content_t, так что папка читается и записывается для apache. Изменение рекурсивного контекста выполняется с помощью следующей команды:

# chcon -R -t httpd_sys_content_rw_t /var/www/html/images

Хорошее горе. Надеюсь, что это поможет другим, кто сталкивается с этим.

Ответ 2

В CentOS7 VM, с PHP5.4.16/Apache 2.4.6/mariadb 5.5.44, каталог шаблона smarty не был доступен для записи, чтобы сгенерировать скомпилированные файлы шаблонов и дал следующую ошибку (в/var/log/httpd/error_log ):

[Thu Mar 31 12:36:08.201383 2016] [:error] [pid 13094] [client 192.168.212.65:52204] PHP Fatal error:  Smarty error: unable to write to $compile_dir '/var/www/html/app1/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/html/app1/libs/smarty/Smarty.class.php on line 1093

поэтому приложение PHP отображало пустой экран.

chmod 777 templates_c тоже не работал; но в соответствии с предложением @Question Overflow, разрешение на веб-root на этой виртуальной машине разрешило проблему.

Мне пришлось выполнить:

[[email protected] html]# chcon -R -t httpd_sys_content_rw_t /var/www/html

конечно, templates_c и cache должны принадлежать пользователю apache:

drwxr-xr-x.  2 apache apache     6 Mar 31 12:56 templates_c
drwxr-xr-x.  2 apache apache     6 Mar 31 12:56 cache

Проведя более полудня, наткнулся на это. Благодаря