Linux NFS สร้างมาสก์และบังคับให้เทียบเท่ากับผู้ใช้


11

ฉันมีเซิร์ฟเวอร์ Linux สองตัว:

fileserver
Debian 5.0.3 (2.6.26-2-686)
Samba เวอร์ชั่น 3.4.2

apache
Ubuntu 10.04 LTS (2.6.32-23-generic)
Apache 2.2.14

ฉันมี Samba จำนวนหนึ่งที่แชร์บนfileserverเพื่อให้ฉันสามารถเข้าถึงไฟล์จากพีซี Windows ฉันกำลังส่งออก/data/www-dataไปยังเซิร์ฟเวอร์apacheด้วยซึ่งฉันติดตั้ง/var/wwwไว้ที่

การตั้งค่าไม่เป็นไรยกเว้นเมื่อฉันมาสร้างไฟล์บนเมาท์ NFS ฉันจบลงด้วยไฟล์ที่ไม่สามารถอ่านได้โดย Apache หรือผู้ใช้รายอื่นในระบบของฉันไม่สามารถแก้ไขได้

กับแซมบ้า, ฉันสามารถระบุforce user, force group, create maskและdirectory maskและสร้างความมั่นใจว่าไฟล์ทั้งหมดจะถูกสร้างขึ้นด้วยสิทธิ์ที่เหมาะสมสำหรับ Apache เว็บเซิร์ฟเวอร์ของฉัน ฉันหาวิธีทำกับ NFS ไม่ได้ มีวิธีบังคับใช้สิทธิ์และความเป็นเจ้าของด้วย NFS หรือไม่ฉันขาดสิ่งที่ชัดเจนหรือไม่

แม้ว่าฉันจะใช้เวลากับ Linux ค่อนข้างน้อยและฉันกำลังหย่านมตัวเองจาก Windows แต่ฉันก็ยังไม่ได้รับการอนุญาตจาก Linux ... หากนี่ไม่ใช่วิธีที่ถูกต้องในการทำสิ่งต่าง ๆ ฉันเปิดให้ ข้อเสนอแนะทางเลือก

คำตอบ:


12

เมื่อคุณมาจาก Windows คุณจะพบว่า NFS นั้นแตกต่างกัน

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

ในอดีต (ที่ห่างไกล) สิ่งนี้ได้รับการร่วมกับ NIS และ NIS + แม้ว่าจะมีแผนการอื่น ๆ ที่ได้รับการวางกรอบไว้ในกรอบนี้ (Winbind ของแซมบ้าเป็นหนึ่งในนั้น) อย่างไรก็ตามต้องใช้เซิร์ฟเวอร์ ID กลางตามด้วยสิทธิ์ในการแก้ไขด้วยมือจำนวนมาก

มีวิธีที่แตกต่างกันในการแก้ไขปัญหานี้ แต่วิธีที่ถูกที่สุด / เร็วที่สุดคือการสร้างกลุ่มที่มีหมายเลข ID กลุ่มเดียวกันบนทั้งสองเครื่อง - พูด, กลุ่ม ID 50000 - และตั้งค่าบิตกลุ่มบนเซิร์ฟเวอร์ไฟล์ในขณะที่เพิ่มผู้ใช้ที่เหมาะสม กลุ่มลูกค้า จากนั้นใช้สิทธิ์กลุ่มในไฟล์เพื่อควบคุมการเข้าถึง ไม่ใช่วิธีที่ยอดเยี่ยม แต่มันจะใช้งานได้ โปรดทราบว่าคุณอาจมีปัญหากับบริการที่เปลี่ยนกลุ่มของพวกเขาในขณะใช้งานจริง (aka privledge drop) และคุณอาจต้องเปลี่ยนการตั้งค่าที่ควบคุมกลุ่มที่สันนิษฐานว่ารันไทม์เพื่อให้แน่ใจว่าเป็นกลุ่มที่คุณสร้างขึ้น

สำหรับไฟล์ที่เข้ามาผ่านการแชร์ Windows (หรือ Samba) เพียงบังคับให้กลุ่มเป็นไฟล์เดียวกับที่คุณสร้าง ด้วยวิธีนี้ไฟล์ทั้งหมดจะได้รับ "สิทธิ์" GID โดยอัตโนมัติ


ขอบคุณสำหรับการตอบสนองที่พิจารณา ฉันจะดูวิธีกลุ่มบิตและแจ้งให้คุณทราบว่าฉันได้รับ
Mike

ฉันสร้างwww-dataกลุ่มบนเซิร์ฟเวอร์ไฟล์กำหนดผู้ใช้ที่จำเป็นจากนั้นตั้งค่าwww-dataID กลุ่มเดียวกันบนเซิร์ฟเวอร์ทั้งสอง ฉันยังตั้งค่าบิตกลุ่มในโฟลเดอร์ที่มี/data/www-data chmod -R g+s /var/www-dataมันทำงานได้อย่างสมบูรณ์แบบแล้ว ขอบคุณสำหรับความช่วยเหลือของคุณ.
Mike

ดีใจที่ได้ยิน!
Avery Payne

มันจะดีถ้า NFS สามารถทำได้สำหรับลูกค้า Mac
d -_- b

9

นอกจากนี้คุณยังสามารถใช้all_squashตัวเลือกที่ทำให้ไม่ระบุชื่อ (ผู้ใช้ & กลุ่ม) ไฟล์และโฟลเดอร์ที่ส่งออกทั้งหมดและแนบไปกับ GID & UID ที่ระบุ

/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)

ปัญหาคือผู้ใช้ทั้งหมดบนapacheเซิร์ฟเวอร์จะเห็นจุดเมานท์ของคุณnobody nobodyในฐานะผู้ใช้ & กลุ่มและสามารถเขียนในเมานต์ (แต่อย่างไรก็ตามบนเซิร์ฟเวอร์ Samba ไฟล์จะถูกสร้างเป็น<your UID>/ <your GID>)


นั่นช่วยแก้ปัญหาของฉัน!
Luciano Andress Martini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.