У меня есть система Redhat 6.0 (с включенным SELinux) с томом NFS, смонтированным в / myvolume.
Команда ls -la /myvolume
говорит, что у него есть владелец «никто» и группа «никто».
В этой системе у меня Apache работает как пользователь «apache» и группа «apache».
Apache запускает скрипт Python через mod_wsgi. Этот сценарий создает временный каталог (используя tempfile.mkdtemp), создает в нем несколько файлов, а затем перемещает весь каталог в / myvolume.
После того, как скрипт выполнил свою работу, созданные им файлы имеют владельца «nodody» и группу «none», а маска прав доступа - «rwx ------» для всех из них.
Я подтвердил, что мой собственный пользователь не может получить доступ к этим файлам, если я не использую "sudo", в то время как пользователь apache может получить к ним доступ.
Почему так происходит? Что-то связано с SELinux, разрешениями Unix, томами NFS или nodoby пользователем? Почему попытка "перерезать" любой файл в / myvolume дает ошибку "недопустимый аргумент"?
Это связано с nfs.
http://tldp.org/HOWTO/NFS-HOWTO/server.html заявляет следующее:
"no_root_squash: по умолчанию любой запрос файла, сделанный пользователем root на клиентском компьютере, обрабатывается так, как если бы он был сделан пользователем none на сервере. (В частности, какой UID сопоставлен с запросом, зависит от UID пользователя" none "на сервер, а не клиент.) Если выбран no_root_squash, то root на клиентской машине будет иметь тот же уровень доступа к файлам в системе, что и root на сервере. Это может иметь серьезные последствия для безопасности, хотя может быть необходимо если вы хотите выполнить какую-либо административную работу на клиентском компьютере, которая включает экспортированные каталоги. Вы не должны указывать эту опцию без уважительной причины ».
Активация no_root_squash на сервере nfs не рекомендуется. Я привел этот вариант только для документации.
Одно из решений - создать пользователя и группу как на клиенте nfs, так и на сервере nfs с одинаковыми uid и gid. Затем настройте apache для выполнения вашего скрипта с этим пользователем.