Картографування користувачів NFSv4


12

Це питання, здається, вже задавали вже багато разів, але інші відповіді мені якось не стосувалися.

В основному я просто створив новий сервер 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

Але це, мабуть, не має ніякого значення.

Відповіді:


6

NFSv4 не переведе UID та GID, як ви могли подумати, коли не використовуєте аромат Kerberos та безпеки. Але це діє саме так, як ви описали. Причина в тому, що NFSv4 використовуватиме AUTH_SYSзахист. Більш детальний опис можна знайти тут .


2
Дякую за вашу відповідь та посилання, дуже інформативно. Але все ще не може вписати це в контекст ... так що ж це за мета роботи? Чому його називають "rpcidmapd", якщо він не працює з rpc? І який ефект від цих команд?
дозрівати

FWIW, можливо, ввімкнути відображення ідентифікатора NFSv4 навіть при використанні AUTH_SYSцього питання: unix.stackexchange.com/q/438939/111905
sxc731

@ Sxc731: з мого досвіду, і я зробила тест сьогодні, використовуючи idmapз AUTH_SYSдійсно перевести UIDs і GIDs правильно. Але ефективні права не перекладаються, і навіть якщо lsви показуєте, що у вас є власні каталоги чи файли, ви не зможете внести зміни, оскільки числові ідентифікатори не збігаються, а AUTH_SYSчислові ідентифікатори використовуються для прав доступу.
Томас

1
@ Томас правильний. Якщо ввімкнено відображення ідентифікаторів sec=sys, файли відображаються відповідно до ідентифікатора mappig, але запис працює так, ніби відображення ідентифікатора не відбувається взагалі. Ще одне посилання : "Хоча uid / gid номери більше не використовуються в протоколі NFSv4, за винятком необов'язково у вищезазначених рядках, вони все одно будуть знаходитись у полях аутентифікації RPC при використанні AUTH_SYS (sec = sys), що є типовим. в цьому випадку і ім’я користувача, і група, і пробіли номера повинні відповідати клієнту та серверу. "
Ірфан Латиф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.