У меня шесть машин, один сервер NFS и пять клиентов. Три клиента (с Ubuntu 14.04) работают нормально. Два других, с 12.04, сталкиваются с ошибками прав доступа.
На сопоставленной клиентской машине ls -l /home/
возвращает:
drwxr-xr-x 22 testuser testuser 12288 Oct 9 18:03 testuser
Это ожидаемая настройка разрешений. testuser
— это пользователь, которому необходимо разрешение на доступ к этой папке.
Но когда я вхожу в систему testuser
, я touch /home/testuser/test.txt
получаю эту ошибку:
touch: cannot touch `/home/testuser/test.txt': Permission denied
Теперь числовые идентификаторы НЕ соответствуют строкам идентификаторов, ноМне сказали, что так быть не должно.
Настройки клиента:
cat /sys/module/nfs/parameters/nfs4_disable_idmapping
N
Приведенная выше настройка позволяет NFS сопоставлять разрешения пользователей с использованием строк, а не числовых UID и GID.
cat /etc/idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
Настройки сервера:
cat /etc/exports
/raid/nfs/home server1(rw,sync,no_root_squash,no_subtree_check)
/raid/nfs/home server2(rw,sync,no_root_squash,no_subtree_check)
Есть ли ошибка или дополнительные действия, которые мне нужно предпринять, чтобы машины 12.04 работали правильно? Или мне просто стиснуть зубы и обновиться, или просто изменить все UID, чтобы они соответствовали серверу?
решение1
проблема в том, что idmapd задействован только тогда, когда вы делаете GETATTR/SETATTR (stat, chown, setacl) или используется kerberos (для сопоставления принципала с идентификатором). Но когда клиент nfs отправляет запрос CREATE с auth=sys, то uid и gid берутся из сообщения RPC. Поэтому вам нужно, чтобы uid и gid совпадали на сервере и клиенте, чтобы решить проблему с разрешениями.