NFSv4 उपयोगकर्ता मानचित्रण


12

यह प्रश्न कई बार पहले ही पूछा जा चुका है, लेकिन अन्य उत्तर किसी भी तरह मेरे लिए लागू नहीं हुए हैं।

मूल रूप से मैं सिर्फ एक नया 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

लेकिन इससे कोई फर्क नहीं पड़ता है।

जवाबों:


6

NFSv4 UIDs और GIDs का अनुवाद नहीं करेगा जैसा कि आप सोचते हैं कि जब Kerberos और सुरक्षा स्वाद का उपयोग नहीं किया जाता है। लेकिन यह ठीक वैसा ही काम करता है जैसा आपने बताया। कारण यह है कि NFSv4 AUTH_SYSसुरक्षा का उपयोग करेगा । अधिक विस्तृत विवरण यहां पाया जा सकता है


2
आपके उत्तर और लिंक के लिए धन्यवाद, बहुत जानकारीपूर्ण। लेकिन अभी भी इसे संदर्भ में फिट नहीं किया जा सकता है ... तो क्या उद्देश्य है? अगर इसे rpc के साथ काम नहीं किया जाता है, तो इसे "rpcidmapd" क्यों कहा जाता है? और इन आदेशों का क्या प्रभाव है ?
मैट

FWIW, AUTH_SYSइस प्रश्न का उपयोग करते समय भी NFSv4 आईडी मैपिंग को सक्षम करना संभव लगता है : unix.stackexchange.com/q/438939/111905
sxc731

@ sxc731: मेरे अनुभव से, और मैं आज एक परीक्षण किया था, का उपयोग कर idmapके साथ AUTH_SYSसही ढंग से UIDs और GIDs का अनुवाद करता है। लेकिन प्रभावी अधिकारों का अनुवाद नहीं किया जाता है और यहां तक ​​कि अगर lsआप स्वयं की निर्देशिका या फाइलें नहीं दिखाते हैं, तो आप परिवर्तन नहीं कर पाएंगे क्योंकि संख्यात्मक आईडी मेल नहीं खाती हैं और AUTH_SYSसंख्यात्मक आईडी के साथ एक्सेस अधिकारों के लिए उपयोग की जाती हैं।
थॉमस

1
@ तोमास सही। जब आईडी मैपिंग को चालू किया जाता है sec=sys, तो आईडी मैप के अनुसार फाइलें दिखाई देती हैं, लेकिन लेखन कार्य करता है जैसे कि आईडी मैपिंग नहीं हो रही है। एक अन्य संदर्भ : "हालांकि उपरोक्त स्ट्रिंग्स में वैकल्पिक रूप से छोड़कर NFSv4 प्रोटोकॉल में uid / gid नंबर का उपयोग नहीं किया जाता है, फिर भी AUTH_SYS (sec = sys) का उपयोग करते समय वे RPC प्रमाणीकरण क्षेत्रों में रहेंगे, जो कि डिफ़ॉल्ट है। इस स्थिति में उपयोगकर्ता / समूह का नाम और संख्या स्थान दोनों क्लाइंट और सर्वर के बीच सुसंगत होना चाहिए। "
इरफान लतीफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.