ฉันจะเข้าถึงการอ่าน / เขียนการแชร์ NFS ของ Synology NAS ได้อย่างไร


11

ฉันมีสิทธิ์อ่านเพื่อเข้าถึงการแชร์ NFS ที่ติดตั้งเท่านั้น

ด้วยการตั้งค่า 'ไม่มีการแมปสควอช' ใน NAS ผู้ใช้ปกติของ Ubuntu จะได้รับPermission deniedเมื่อพยายามcdเข้าร่วมและสามารถเข้าถึงการอ่านโดยใช้sudoเท่านั้น
การใช้การตั้งค่าสควอช 'แมปผู้ใช้ทุกคนให้เป็นผู้ดูแลระบบ' ผู้ใช้ปกติของลูกค้าสามารถcdเข้าไปและมีสิทธิ์เข้าถึงเพื่ออ่านแบบแชร์เท่านั้น การใช้sudoไม่อนุญาตให้เขียน


Synology NAS:
DS214> id username
uid=1026(username) gid=100(users) groups=100(users),101(administration)

ไม่มีสควอช (ไม่มีการแมป)
DS214> cat /etc/exports
/volume1/Files 10.1.1.2(rw,async,no_wdelay,no_root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)

สควอชทั้งหมด (ทำแผนที่ผู้ใช้ทั้งหมดให้เป็นผู้ดูแล)
DS214> cat /etc/exports
/volume1/Files 10.1.1.2(rw,async,no_wdelay,all_squash,insecure_locks,sec=sys,anonuid=1024,anongid=100)

ลูกค้า Ubuntu:
$ cat /etc/fstab
10.1.1.214:/volume1/Files /mnt/nfs/Files nfs rw,user,auto 0 0

$ id username
uid=1000 gid=1000(username) groups=1000(username), <etc>

$ ls -n /mnt/nfs
drwxrwxrwx 9 0 0 4096 Sep 25 01:28 Files

$ ls -n /mnt/nfs/Files
drwxr-xr-x 11 1026 100 4096 Sep 24 22:05 Data


(ฉันเดิมโพสต์ในข้อผิดพลาดที่ใช้sudoสิทธิ์ในการเขียนเปิดใช้งาน) ฉันสามารถเปิดไฟล์ในการติดตั้งร่วมกัน NFS ด้วยแต่ไม่สามารถเขียนการเปลี่ยนแปลงไปยังแฟ้มแม้จะมีsudo vi /mnt/nfs/Files/Data/test.file sudoข้อความแสดงข้อผิดพลาด vi ตาม:w!คำสั่งคือ:
"test.file" E212: Can't open file for writing


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

คุณสามารถcdติดตั้งในฐานะผู้ใช้ทั่วไปได้หรือไม่? ถ้าใช่ฉันขอแนะนำดังต่อไปนี้ เพื่อยืนยันหรือโต้แย้งสงสัยฉันจะทำต่อไปนี้: เมื่อวันที่ลูกค้าเข้ามาติดตั้งและทำcd ls -nที่จะแสดงรายการเจ้าของไฟล์และกลุ่มที่มี ID ที่เกี่ยวข้อง คุณจะต้องทำอย่างนั้นกับsudoฉันเดา ต่อท้ายบรรทัดหนึ่งหรือสองผลลัพธ์ไปยังคำถามของคุณพร้อมกับเอาท์พุทของid (ไม่sudo!) หากคุณไม่สามารถแม้แต่cdจะเมานท์เป็นผู้ใช้ปกติคุณจะต้องตรวจสอบสิทธิ์ของ dir ที่คุณส่งออก เซิฟเวอร์.
Nephente

ฉันไม่สามารถcdติดตั้งในฐานะผู้ใช้ทั่วไปได้ การใช้สควอชบนเซิร์ฟเวอร์เพื่อบังคับให้สิทธิ์ทำงานเป็นวิธีแก้ไขชั่วคราวเพื่อให้สิทธิ์ id usernameตรวจสอบสิทธิ์และเซิร์ฟเวอร์
marsilea

ขอบคุณฉันคิดว่ามันจะดีกว่าที่จะใช้ nfs วิธีที่ถูกต้องมากกว่าเพียงแค่กำลังดุร้ายกับ Squash: 'แมปผู้ใช้ทุกคนให้เป็นผู้ดูแลระบบ' บนเซิร์ฟเวอร์ ..
marsilea

มันขึ้นอยู่กับ. คุณเชื่อถือลูกค้าและผู้ใช้หรือไม่ หากคุณไม่ทำเช่นนั้น NFSv3 ไม่เหมาะเนื่องจากทุกคนที่มีการเข้าถึงรูทไปยังไคลเอนต์สามารถปลอมแปลง UID ได้ หากคุณต้องการการรับรองความถูกต้องที่เหมาะสมคุณควรใช้ SMB การพิสูจน์ตัวตนด้วย NFSv4 ต้องใช้ Kerberos ซึ่งค่อนข้างซับซ้อน แต่อย่างไรก็ตามแผ่นกั้นออกของคุณฉัน ... /mnt/nfs/Filesผมถือว่าติดประเด็นก็คือ แม้ว่าจะFilesเป็นของrootอนุญาตอนุญาตให้ทุกคนทำอะไร ไม่มีเหตุผลสำหรับฉันเลยว่าทำไมคุณถึงมีปัญหาในการป้อน dir นั้นในฐานะผู้ใช้ใด ๆ อาจโพสต์บรรทัดที่เกี่ยวข้องจาก/etc/exports?
Nephente

คำตอบ:


11

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

โปรดทราบว่า NFSv4 เสนอการตรวจสอบสิทธิ์ลูกค้าและผู้ใช้ผ่าน Kerberos5 หากจำเป็นต้องมีการรับรองความถูกต้องด้วยชื่อผู้ใช้และรหัสผ่านมันเป็นเรื่องง่ายที่จะใช้ Samba (SMB / CIFS) แทนการตั้งค่า Kerberos แม้ในสภาพแวดล้อม Linux บริสุทธิ์

อย่างน้อยป้องกันการเพิ่มของสิทธิ์ root NFS ที่จะถูกส่งออกโดยเริ่มต้นด้วยตัวเลือกroot_squashซึ่งจะ map คำขอของลูกค้าทั้งหมดมาจากroot (uid=0, gid=0)ไปและanonuid anongidพฤติกรรมนี้สามารถถูกแทนที่ด้วยการno_root_squashให้สิทธิ์การเข้าถึงเพื่อการส่งออก

ที่นี่เราเห็นข้อเสียเปรียบอื่น ในการทำงานอย่างถูกต้องโดยทั่วไปแล้ว NFS จะต้องให้คุณมี UID / GID เดียวกันในทุกเครื่อง ไฟล์ที่คุณต้องการในการเข้าถึงเป็นของ1026และมีสิทธิ์ 755. uid=1000คุณใช้อยู่ในลูกค้าได้ GID ไม่ตรงกันดังนั้นคุณจะได้รับการอนุญาตระดับโลกเท่านั้น ดังนั้นไม่มีการเข้าถึงเพื่อเขียน

ในการแก้ไขปัญหานี้คุณสามารถทำสิ่งหนึ่งในหลาย ๆ อย่าง:

  • บน NAS, 1000เปลี่ยนเจ้าของไฟล์เพื่อ คุณอาจต้องสร้างบัญชีนั้น สิ่งนี้จะส่งผลกระทบต่อบริการอื่น ๆ ฉันไม่สามารถบอกได้

  • เปลี่ยน UID 1026ของผู้ใช้ท้องถิ่นของคุณไป

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

    เพิ่ม optionss เพื่อการส่งออกในall_squash,anonuid=1026,anongid=100/etc/exports

โปรดระวังเนื่องจากสิ่งนี้จะทำให้ทุกคนติดตั้งการเอ็กซ์ปอร์ตเจ้าของไฟล์เหล่านั้นได้อย่างมีประสิทธิภาพ!

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


ฉันเลือก NFS เพราะฉันคิดว่ามันอาจมีข้อได้เปรียบสำหรับ Linux กับ Linux เนื่องจากฉันต้องการสำรอง NAS ด้วย rsync ไปยังไดรฟ์ USB ภายนอกบนไคลเอนต์ Ubuntu (ระบบ DSM ของ Synology ไม่ได้ให้การซิงค์กับไดรฟ์ USB) ขณะที่ยังคงความเป็นเจ้าของไฟล์และข้อมูลการอนุญาต คำตอบอย่างละเอียดและขอบคุณสำหรับคำแนะนำ
marsilea

0

ทำshowmount -e 10.1.1.214เพื่อดูตัวเลือกการส่งออก Permission deniedข้อผิดพลาดมาจากเซิร์ฟเวอร์ NFS เอง พยายามที่จะเปลี่ยนแปลงตัวเลือกจากไปrw,user,autodefaults

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