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

NFS по умолчанию 777

У меня есть общий ресурс NFS. Эта доля используется несколькими различными приложениями. Наш веб-сервер работает под управлением PHP, и когда он создает каталоги, он неправильно устанавливает разрешения, поэтому он не может писать в каталог после создания. Как я могу смонтировать этот общий ресурс NFS туда, где PHP имеет полный доступ для чтения / записи? Ниже приведен каталог, который был создан вместе с параметрами экспорта медиасервера и параметрами монтирования на веб-сервере. В идеале я мог бы установить разрешения для / opt / mount и любой группы / пользователя в этом каталоге, когда я подключаюсь к этой точке, общий ресурс принимает эти разрешения.

dr----x--t. 2 nobody nobody 4096 Jun  5  2014 user_2

Смонтировать вывод:

media.dc1:/home/fs_share on /opt/mount type nfs (rw,vers=4,addr=10.10.20.127,clientaddr=10.10.20.42)

Экспортирует файл с медиа-сервера:

/home/fs_share     10.10.20.0/255.255.255.0(rw,sync,no_root_squash)

Вы используете NFSv4. Жаль, что вы не указали версию своей ОС, здесь это будет очень важно.

В более старых версиях NFS использовались строго номера UID / GID, поэтому сервер NFS мог не знать всех пользователей и группы на клиентах и ​​наоборот - пока номера UID / GID не конфликтовали, все было хорошо.

Но NFSv4 может использовать имена пользователей / групп вместо номеров UID / GID. Если используются имена, они передаются в форме user@domain, где domain обычно по умолчанию используется домен DNS каждой системы, но при необходимости его можно изменить на произвольную строку. Если настройки домена сервера NFSv4 и клиента (ов) NFSv4 не совпадают, или сопоставление имени пользователя / группы не удается по какой-либо другой причине, вы, вероятно, увидите, что права собственности сопоставлены nobody а права доступа к файлам сведены к минимуму - прямо как вы видите.

В Linux это сопоставление имени пользователя / группы выполняется rpc.idmapd служба. Если эта служба не запущена, это также может быть причиной сопоставления прав собственности на файлы с nobody. В RHEL / CentOS / OEL 6.5 и более ранних этот демон должен работать как на клиентах, так и на серверах NFS. (Да, на стороне клиента есть /usr/sbin/nfsidmap программа upcall, которая должна сделать rpc.idmapd не требуется на стороне клиента NFS, начиная с версии 6.3 ... но в нем была ошибка, исправленная только в RHEL / CentOS / OEL 6.6 и новее.)

В Linux для настройки домена NFS по умолчанию используется имя домена DNS хоста, но его можно изменить с помощью Domain = установка в /etc/idmapd.conf файл. А в RHEL 6.3 и старше была ошибка, из-за которой этот параметр игнорировался: если вы используете NFSv4, вам следует выполнить обновление до 6.4 или новее. После смены домена следует запустить nfsidmap -c в версии 6.3 и новее; в старых системах вам необходимо перезапустить rpc.idmapd daemon и перемонтируйте все монтирования NFS.


Если вы хотите отключить функцию отображения идентификаторов в NFSv4 и вместо этого вернуться к использованию в стиле NFSv3 только номеров UID / GID (что может быть полезно, если ваш NFS-сервер является, например, NAS-устройством, не имеющим информации об учетных записях пользователей в клиентских системах), вам нужно убедиться, что nfs опция модуля ядра nfsv4_disable_idmapping включен:

echo "options nfs nfs4_disable_idmapping=Y" >> /etc/modprobe.d/nfs.conf

Этот параметр модуля существует в RHEL 6.3 и новее и должен быть включен по умолчанию, но лучше убедиться в этом.

На стороне сервера возврат к поведению UID / GID в стиле NFSv3 на NFSv4 потребует двух вещей. Во-первых, подобная опция ядра должна быть проверена (или явно установлена) на nfsd модуль ядра:

echo "options nfsd nfs4_disable_idmapping=Y" >> /etc/modprobe.d/nfs.conf

Во-вторых, безопасность экспорта NFS должна быть sec=sys.

Опять же, оба этих параметра должны быть значениями по умолчанию в современных системах, но при работе в старых системах лучше их проверить.

На NetApp NAS настройка, позволяющая использовать числовые значения UID / GID в NFSv4:

options nfs.v4.id.allow_numerics on

или:

cluster::> set diag
cluster::*> nfs server modify -vserver vs0 -v4-numeric-ids enabled

в зависимости от версии NetApp.

Если код PHP может создавать файлы, он должен иметь возможность "изменить" их.

<?php
chmod("/mydir/myfile", 0660);
?>

Вот ссылка на PHP-функцию chmod.

Если вы хотите смонтировать общий ресурс с определенным uid / gid (другим tah nobody / nogroup), вы можете попробовать экспортировать с помощью all_squash

/export/myshare x.x.x.x(rw,all_squash,anonuid=<newUID>,anongid=<newGID>,sync)

Из https://linux.die.net/man/5/exports:

all_squash

Сопоставьте все uid и gid анонимному пользователю. Полезно для экспортируемых через NFS общедоступных каталогов FTP, каталогов новостей и т. Д. Противоположный параметр - no_all_squash, который является настройкой по умолчанию.

анонид и анонгид

Эти параметры явно устанавливают uid и gid анонимной учетной записи. Эта опция в первую очередь полезна для клиентов PC / NFS, где вы можете захотеть, чтобы все запросы поступали от одного пользователя. В качестве примера рассмотрим запись экспорта для / home / joe в приведенном ниже разделе примеров, которая отображает все запросы на uid 150 (который предположительно является идентификатором пользователя joe).

Это требует более сложной обработки разрешений, чем разрешения UNIX могут обрабатывать эффективно. ACL файловых систем - ваше решение здесь.

Используя ACL, вы можете наследовать разрешения от родительских каталогов, а также право собственности. Это гарантирует, что независимо от того, кто создал файлы или каталоги в конкретном поддереве, они получат свои разрешения из родительского каталога (а не из umask).

Тщательно изучите команды getfacl и setfacl. Используя списки управления доступом по умолчанию, вы можете управлять этим наследованием прав собственности и разрешений.

Эта глава руководства администратора хранилища RHEL представляет собой очень полное руководство по ACL, и это довольно исчерпывающий ресурс: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-acls.html

Параметр «umask» в /home/user/.profile управляет разрешениями, предоставленными файлу, созданному этим пользователем. Стандартное значение umask = 022, что означает 755 для файлов и 644 для каталогов. Если вы хотите, чтобы владелец и группа имели полные права доступа, тогда это должно быть «umask = 002».