Назад | Перейти на главную страницу

Разрешения файла тома NFS

У меня есть система 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 для выполнения вашего скрипта с этим пользователем.