Це питання, здається, вже задавали вже багато разів, але інші відповіді мені якось не стосувалися.
В основному я просто створив новий сервер NFSv4, і я стикаюся з класичною проблемою, коли UID та GID не відповідають серверу та клієнту. Однак синхронізація / etc / passwd та / etc / group в моєму сценарії неможлива. Зауважте, що у мене однакові користувачі на обох машинах (на відміну від цього питання ).
Тому я шукав idmap: за деякими джерелами, здається, NFSv4 посилає імена користувачів (на відміну від поведінки NFSv3 для надсилання UID / GID), а роль idmap полягала б у перекладі цих імен користувачів на UID / GID сервера.
Однак у моєму випадку це, мабуть, не спрацьовує (деталі налаштування нижче), що я вважаю дуже стандартним (майже лише встановлений NFS з репо).
Я щось пропускаю? Чи є спосіб зробити цю роботу без встановлення LDAP або Kerberos?
Налаштування сервера
На сервері Ubuntu 16.04
встановлено два користувачі.
user1@server:~$ id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),27(sudo)
user1@server:~$ id user2
uid=1001(user2) gid=1001(user2) groups=1001(user2)
NFS був встановлений з репо і налаштований на експорт тестової папки.
user1@server:~$ sudo apt-get install nfs-kernel-server
user1@server:~$ sudo cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
user1@server:~$ ls -ld /srv/nfs/test/
drwxrwxrwx 2 nobody nogroup 4096 nov 2 17:34 /srv/nfs/test/
user1@server:~$ cat /etc/exports
"/srv/nfs/test" 192.168.x.x(rw,sync,no_subtree_check)
Оскільки сервер і клієнт мають різні імена хостів, я змінив значення "Домен" у конфігураційному файлі idmapd. В іншому випадку файл ідентичний файлу, встановленому менеджером пакунків. Зауважте, що вміст цього файлу на сервері та клієнті однаковий.
user1@server:~$ 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 = mydomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
Налаштування клієнта
У клієнта також є Ubuntu 16.04
і два користувачі, які, однак, мають однакові імена користувачів, але різні UID / GID .
user1@client:~$ id user1
uid=1001(user1) gid=1002(user1) groups=1002(user1),27(sudo)
user1@client:~$ id user2
uid=1000(user2) gid=1000(user2) groups=1000(user2),27(sudo)
NFS був встановлений з репо, і тестова частка була змонтована.
user1@client:~$ sudo apt-get install nfs-common
user1@client:~$ mkdir ./test
user1@client:~$ sudo mount -t nfs4 192.168.x.x:/srv/nfs/test ./test
Тестування
Спочатку я створюю файл на клієнті, і це здається прекрасним:
user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov 2 17:24 testfile
Але коли я переглядаю файл із сервера, я помічаю, що власник не той, а група не існує.
user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov 2 17:24 testfile
Експерименти
Відповідно до подібної відповіді на подібне запитання, ідентифікацію карт слід активувати наступним чином на сервері (помітити помилки):
user1@server:~$ sudo tee /sys/module/nfsd/parameters/nfs4_disable_idmapping <<< "N"
user1@server:~$ sudo nfsidmap -c
nfsidmap: 'id_resolver' keyring was not found.
user1@server:~$ sudo service rpcidmapd restart
Failed to restart rpcidmapd.service: Unit rpcidmapd.service not found.
user1@server:~$ sudo service nfs-kernel-server restart
Перебуваючи на клієнті (зауважте відсутність помилок):
user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c
Але результати дивні:
user1@client:~$ touch test/testfile
user1@client:~$ ls -l test
total 0
-rw-rw-r-- 1 user2 4294967294 0 nov 2 19:16 testfile
user1@server:~$ ls -l /srv/nfs/project/
total 0
-rw-rw-r-- 1 user2 1002 0 nov 2 19:16 prova
Інша відповідь пропонує змінити конфігурацію idmapd наступним чином (вміст однаковий на обох машинах):
user1@server:~$ 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 = mydomain
[Translation]
Method=static
[Static]
user1@mydomain = user1
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
Але це, мабуть, не має ніякого значення.