วิธีการตั้งค่าการอนุญาตสำหรับโฟลเดอร์ NFS อย่างถูกต้อง? การอนุญาตถูกปฏิเสธเมื่อสิ้นสุดการติดตั้ง


46

ฉันกำลังพยายามเชื่อมต่อกับโฟลเดอร์ NFS บนเซิร์ฟเวอร์ dev ของฉัน เจ้าของโฟลเดอร์บนเซิร์ฟเวอร์ dev คือ darren และกลุ่ม darren

เมื่อฉันส่งออกและติดตั้งกับ Mac ของฉันโดยใช้ Disk Utility มันติด แต่เมื่อฉันพยายามที่จะเปิดโฟลเดอร์จะบอกว่าฉันไม่ได้รับอนุญาต ฉันได้ตั้งค่า rw, sync และ no_subtree_check แล้ว ผู้ใช้งานบน Mac นั้นมีกลุ่มเป็นกลุ่ม

ฉันต้องมีกลุ่มและผู้ใช้ชุดเดียวกันเพื่อเข้าถึงโฟลเดอร์หรือไม่?


2
ขอบคุณสำหรับคำถามของคุณกระทู้นี้แก้ไขปัญหาให้ฉันได้! แต่โปรดตอบด้วยคำตอบมากที่สุด
mamiu

คำตอบ:


60

NFS ถูกสร้างขึ้นบนการรับรองความถูกต้อง RPC ด้วย NFS เวอร์ชัน 3 กลไกการพิสูจน์ตัวตนที่พบบ่อยที่สุดคือ AUTH_UNIX ID ผู้ใช้และรหัสกลุ่มของระบบไคลเอนต์จะถูกส่งในการเรียก RPC แต่ละครั้งและการตรวจสอบสิทธิ์ที่ ID เหล่านี้มีในไฟล์ที่เข้าถึงนั้นถูกตรวจสอบบนเซิร์ฟเวอร์ เพื่อให้ทำงานได้ UID และ GID จะต้องเหมือนกันบนเซิร์ฟเวอร์และไคลเอนต์ อย่างไรก็ตามคุณสามารถบังคับให้การเข้าถึงทั้งหมดเกิดขึ้นในฐานะผู้ใช้และกลุ่มเดียวโดยรวมตัวเลือกการส่งออก all_squash, anonuid และ anongid all_squashจะจับคู่ UID และ GID ทั้งหมดกับผู้ใช้ที่ไม่ระบุชื่อและanonuidและanongid จะกำหนด UID และ GID ของผู้ใช้ที่ไม่ระบุชื่อ ตัวอย่างเช่นถ้า UID และ GID ของคุณบนเซิร์ฟเวอร์ dev มีทั้ง 1001 คุณสามารถส่งออกโฮมไดเร็กตอรี่ของคุณด้วยบรรทัดเช่น

/home/darren 192.168.1.1/24(rw,all_squash,anonuid=1001,anongid=1001)

ฉันไม่ค่อยคุ้นเคยกับ NFS เวอร์ชัน 4 แต่ฉันคิดว่าคุณสามารถตั้งค่า rpc.idmapd บนไคลเอนต์เพื่อแก้ไข uid และ gid ที่พวกเขาส่งไปยังเซิร์ฟเวอร์


7
ฉันพบคำตอบนี้พยายามแก้ไขปัญหา Apple OS X Yosemite nfs คำตอบนี้มีความเกี่ยวข้องและแม่นยำมากกว่าคำตอบที่ยอมรับ ไม่แนะนำให้เลือกและไม่สามารถจับคู่ UID / GID ข้ามระบบได้ ผู้ใช้รูทบนระบบ A อาจไม่ใช่ผู้ใช้รูทบนระบบบี
อัลลัน

28

เมื่อคุณเมานต์ NFS การอนุญาตของคุณที่คุณเชื่อมต่อจะต้องตรงกับสิ่งที่คุณมีบนเซิร์ฟเวอร์ ตัวอย่างเช่นหากผู้ใช้ของคุณมีการเข้าถึงแบบอ่านอย่างเดียวการติดตั้งด้วยการอ่าน - เขียนจะทำให้คุณเห็นข้อผิดพลาดเดียวกับที่คุณพูดถึงในโพสต์เมื่อคุณพยายามโหลดเมานท์จริง น่าเสียดายที่นี่จะปรากฏขึ้นเมื่อเข้าถึงโฟลเดอร์เท่านั้นไม่ใช่เมื่อคุณเมานท์โฟลเดอร์จริงๆ

คุณต้องการตรวจสอบให้แน่ใจว่าผู้ใช้ NFS กำลังทำงานบนเซิร์ฟเวอร์และผู้ใช้บนไคลเอ็นต์กำลังใช้ UID และ GID เดียวกัน คุณสามารถตรวจสอบค่าเหล่านี้ได้ด้วยการรันid darrenทั้งเซิร์ฟเวอร์และไคลเอนต์ หากค่า UID และ GID ไม่ตรงกันคุณสามารถแก้ไข/etc/passwdเพื่อให้เป็นเช่นนั้น แต่ให้แน่ใจว่าคุณเข้าใจสิ่งที่คุณทำก่อนที่จะเปลี่ยนค่าโดยพลการ!

แหล่งข้อมูลที่ดี:

ฉันหวังว่านี่จะช่วยได้!


ใช่ฉันไม่ควรลองเปลี่ยน UID ที่ฉันต้องทำซ้ำเซิร์ฟเวอร์ตอนนี้ เราจะเลียนแบบ UID และ GID ได้อย่างไร มันซับซ้อนจริงๆเหรอ?
Darren

น่าเสียดายที่จากประสบการณ์ของฉันในการใช้สิ่งนี้ในที่ทำงาน NFS มีความเปราะบางอย่างยิ่งและใช่ - มันอาจซับซ้อน โดยปกติแล้วคุณจะต้องการผู้ใช้ NFS เฉพาะที่มี UID / GID ที่เจาะจงในแต่ละเซิร์ฟเวอร์ / ไคลเอนต์เพื่อที่คุณจะได้ไม่เกิดปัญหานี้ หากคุณมีทางเลือกในสภาพแวดล้อมการพัฒนาของคุณ (กล่าวคือไม่จำเป็นต้องใช้ NFS) การค้นหาโดยใช้ SSHFS จะทำให้อาการปวดหัวของคุณหายไป - แต่จะไม่ทำซ้ำฟังก์ชั่นเดียวกับเซิร์ฟเวอร์ที่ใช้งานจริง NFS
แอนดรูว์เอ็ม

คุณคิดว่าแซมบ้าเป็นอีกทางออกหนึ่งหรือไม่? ฉันใช้กับ Windows โดยไม่มีปัญหาและฉันคิดว่านี่เป็นวิธีที่ฉันจะต้องไปแม้ว่าฉันจะใช้ Mac เพื่อพัฒนาแอปพลิเคชันของฉัน
Darren

นั่นเป็นความเป็นไปได้อีกอย่างหนึ่งหากคุณเต็มใจที่จะตั้งค่า
แอนดรูว์เอ็ม

2
ฉันลังเลที่จะบอกว่า NFS นั้นบอบบาง มันเป็นโปรโตคอลบริการไฟล์ที่ได้รับการยอมรับมายาวนาน มีความต้องการเพียงสองข้อสำหรับ NFS เท่านั้น: ทำข้อมูลให้ตรงกัน UID / GID ระหว่างไคลเอนต์และเวลาที่ซิงโครไนซ์ระหว่างไคลเอนต์และเซิร์ฟเวอร์ ตามเนื้อผ้า NIS ถูกใช้เพื่อซิงโครไนซ์ข้อมูลผู้ใช้ แต่ LDAP เป็นตัวเลือกที่ปลอดภัยยิ่งขึ้นสำหรับการปรับใช้ใหม่ในทศวรรษที่ผ่านมา
Jeff Strunk

2

UID และ GID ของคุณตรงกันบนเซิร์ฟเวอร์ทั้งสองหรือไม่ นั่นคือสิ่งที่ใช้ในการควบคุมการเข้าถึงไม่ใช่ชื่อล็อกอินและกลุ่ม


-2

สำหรับฉันปัญหาได้รับการแก้ไขโดยให้_netdevตัวเลือกการติดตั้งบนไคลเอนต์

ฉันเพิ่มสิ่งนี้ใน/etc/fstab:

nfs-server:/   /mnt   nfs4    _netdev,auto  0  0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.