यह प्रश्न कई बार पहले ही पूछा जा चुका है, लेकिन अन्य उत्तर किसी भी तरह मेरे लिए लागू नहीं हुए हैं।
मूल रूप से मैं सिर्फ एक नया NFSv4 सर्वर स्थापित करता हूं और मैं उस क्लासिक समस्या का सामना कर रहा हूं जहां यूआईडी और जीआईडी सर्वर और क्लाइंट के बीच मेल नहीं खाते हैं। हालाँकि, मेरे परिदृश्य में सिंक्रोनाइजिंग / etc / passwd और / etc / group संभव नहीं है। ध्यान दें कि मेरे पास दोनों मशीनों पर समान उपयोगकर्ता हैं ( इस प्रश्न के विपरीत )।
इसलिए मैं idmap में देख रहा था: कुछ स्रोतों के अनुसार, ऐसा लगता है कि NFSv4 उपयोगकर्ता नाम भेजता है (UFS / GID भेजने के लिए NFSv3 के व्यवहार के विपरीत) और idmap की भूमिका इन उपयोगकर्ता नाम को सर्वर UID / GID में अनुवाद करना होगा।
हालांकि, यह मेरे मामले में काम नहीं करता है (नीचे दिए गए विवरण), जिसे मैं बहुत मानक (बहुत ही केवल रेपो से एनएफएस स्थापित) मानता हूं।
क्या मैं कुछ भूल रहा हूँ? क्या 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)
एनएफएस को रेपो से स्थापित किया गया था और एक परीक्षण फ़ोल्डर को निर्यात करने के लिए कॉन्फ़िगर किया गया था।
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
दो उपयोगकर्ता भी हैं, जिनके पास हालांकि एक ही उपयोगकर्ता नाम लेकिन अलग-अलग यूआईडी / जीआईडी हैं ।
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)
एनएफएस को रेपो से स्थापित किया गया था और परीक्षण साझा किया गया था।
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 config को संशोधित करना (सामग्री दोनों मशीनों पर समान है):
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
लेकिन इससे कोई फर्क नहीं पड़ता है।