У меня есть этот код PHP:

<?php
$myfile = fopen("testfile.txt", "w")
?>

И следующие разрешения в моем каталоге /usr/share/nginx/html

drwxrwxrwx. 3 root root  4096 Nov 20 08:51 .
drwxr-xr-x. 3 root root    17 Nov 18 23:48 ..
-rwxrwxrwx. 1 root root   537 Sep 16 14:56 50x.html
-rwxrwxrwx. 1 root root  1171 Nov 20 03:50 make.php

Но когда я запускаю приведенный выше PHP-код, который находится в make.php он не создает testfile.txt !

Что здесь не так? Я также попытался изменить пользователя на nginx с помощью команды chown но это не работает.

2 ответа2

0

Хорошо, так что в основном я должен был изменить это:

SELINUX=permissive

в /etc/selinux/config . Больше информации здесь: Как отключить SELinux .

Я не знаю, является ли это лучшим решением.

0

Относительно вашей проблемы и SELinux:

В Интернете полно сообщений людей, которые рекомендуют отключить SELinux. Это, безусловно, самое простое "решение", но оно не идеально в производственной среде, так как делает ваш сервер более уязвимым.

Вчера я сделал второе погружение в изучение SELinux. Мне очень помог следующий доклад Томаса Кэмерона :

SELinux для простых смертных (40 минут)

Я не знаю, какой дистрибутив Linux вы используете (и я не уверен, насколько сильно SELinux отличается от других), но CentOS предоставляет руководство по SELinux.


Краткое введение:

SELinux "контексты" отображаются в формате user:role:type:range . По умолчанию SELinux поставляется в targeted режиме, который ограничивает доступ к ресурсам по атрибуту type .

Вы можете добавить флаг -Z к таким командам, как ps , ls , cp , mv , mkdir , netstat и другие, чтобы просмотреть контексты SELinux для различных ресурсов.

Чтобы просмотреть контексты SELinux вашей веб-папки, запустите:

ls -lZ /usr/share/nginx/html

Чтобы просмотреть контекст вашего процесса nginx , запустите:

ps -auxZ | grep -i nginx

Существуют также "логические значения" SELinux, которые можно включать / отключать для общих случаев использования. Чтобы просмотреть список логических значений, связанных с веб-сервером (в данном случае nginx ), выполните:

getsebool -a | grep -i httpd

Чтобы обновить логическое значение, вы можете установить его с помощью команды setsebool . Пример:

setsebool httpd_read_user_content 1

Я хочу обратиться к документации по SELinux для нескольких других команд (потому что именно поэтому они их и поместили). Несколько других полезных команд:

  • Маркировка SELinux
    • chcon - временно изменить контекст файла
    • semanage fcontext - навсегда изменить контекст файла
    • restorecon - восстановить контексты
  • Полезные утилиты

Это то, где я сейчас нахожусь с моим ноу-хау SELinux. Я знаю, что это старый пост, но я надеюсь, что это поможет другим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .