ค้นหาเว็บไซต์

การตั้งค่าระบบไฟล์ Linux มาตรฐานและการกำหนดค่าเซิร์ฟเวอร์ NFSv4 - ส่วนที่ 2


วิศวกรที่ผ่านการรับรอง Linux Foundation (LFCE) ได้รับการฝึกอบรมเพื่อตั้งค่า กำหนดค่า จัดการ และแก้ไขปัญหาบริการเครือข่ายในระบบ Linux และมีหน้าที่รับผิดชอบในการออกแบบและการนำสถาปัตยกรรมระบบไปใช้ และการแก้ปัญหาในชีวิตประจำวันที่เกี่ยวข้อง ปัญหา.

ขอแนะนำโปรแกรมการรับรอง Linux Foundation (LFCE)

ในส่วนที่ 1 ของซีรีส์นี้ เราได้อธิบายวิธีการติดตั้งเซิร์ฟเวอร์ NFS (Network File System) และตั้งค่าบริการให้เริ่มโดยอัตโนมัติเมื่อบูต หากคุณยังไม่ได้ดำเนินการ โปรดดูบทความนั้นและทำตามขั้นตอนที่ระบุไว้ก่อนดำเนินการต่อ

  1. การติดตั้งบริการเครือข่ายและการกำหนดค่าการเริ่มต้นอัตโนมัติเมื่อบู๊ต - ตอนที่ 1

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

การกำหนดค่าเซิร์ฟเวอร์ NFSv4

เมื่อเซิร์ฟเวอร์ NFS เริ่มทำงาน เราจะมุ่งความสนใจไปที่:

  1. การระบุและกำหนดค่าไดเร็กทอรีในเครื่องที่เราต้องการแชร์ผ่านเครือข่ายและ
  2. ติดตั้งส่วนแบ่งเครือข่ายเหล่านั้นในไคลเอนต์โดยอัตโนมัติ ไม่ว่าจะผ่านไฟล์ /etc/fstab หรือติดตั้งยูทิลิตี้ที่ใช้เคอร์เนลอัตโนมัติ (autofs)

เราจะอธิบายในภายหลังเมื่อต้องเลือกวิธีใดวิธีหนึ่ง

ก่อนที่เราจะดำเนินการ เราต้องตรวจสอบให้แน่ใจว่า idmapd daemon กำลังทำงานและกำหนดค่าอยู่ บริการนี้ทำการแมปชื่อ NFSv4 (user@mydomain) กับรหัสผู้ใช้และกลุ่ม และจำเป็นสำหรับการใช้งานเซิร์ฟเวอร์ NFSv4

แก้ไข /etc/default/nfs-common เพื่อเปิดใช้งาน idmapd

NEED_IDMAPD=YES

และแก้ไข /etc/idmapd.conf ด้วยชื่อโดเมนท้องถิ่นของคุณ (ค่าเริ่มต้นคือ FQDN ของโฮสต์)

Domain = yourdomain.com

จากนั้นเริ่ม idmapd

service nfs-common start 	[sysvinit / upstart based systems]
systemctl start nfs-common 	[systemd based systems]

การส่งออกการแชร์เครือข่าย

ไฟล์ /etc/exports มีคำสั่งการกำหนดค่าหลักสำหรับเซิร์ฟเวอร์ NFS ของเรา กำหนดระบบไฟล์ที่จะส่งออกไปยังโฮสต์ระยะไกล และระบุตัวเลือกที่มี ในไฟล์นี้ แต่ละการแชร์เครือข่ายจะถูกระบุโดยใช้บรรทัดแยกกัน ซึ่งมีโครงสร้างตามค่าเริ่มต้นดังนี้:

/filesystem/to/export client1([options]) clientN([options])

โดยที่ /filesystem/to/export เป็นเส้นทางที่แน่นอนไปยังระบบไฟล์ที่ส่งออก ในขณะที่ ไคลเอนต์ 1 (ขึ้นอยู่กับไคลเอนต์ N) แสดงถึงไคลเอนต์เฉพาะ (ชื่อโฮสต์หรือที่อยู่ IP) หรือเครือข่าย (อนุญาตให้ใช้ไวด์การ์ด) ที่กำลังส่งออกส่วนแบ่งไป สุดท้าย ตัวเลือกคือรายการค่าที่คั่นด้วยเครื่องหมายจุลภาค (ตัวเลือก) ซึ่งจะถูกนำมาพิจารณาขณะส่งออกส่วนแบ่งตามลำดับ โปรดทราบว่าไม่มีการเว้นวรรคระหว่างชื่อโฮสต์แต่ละชื่อและวงเล็บที่อยู่ข้างหน้า

นี่คือรายการตัวเลือกที่พบบ่อยที่สุดและคำอธิบายตามลำดับ:

  1. ro (ย่อมาจาก อ่านอย่างเดียว): ไคลเอนต์ระยะไกลสามารถติดตั้งระบบไฟล์ที่ส่งออกโดยมีสิทธิ์การอ่านเท่านั้น
  2. rw (ย่อมาจาก อ่าน-เขียน): อนุญาตให้โฮสต์ระยะไกลทำการเปลี่ยนแปลงการเขียนในระบบไฟล์ที่ส่งออก
  3. wdelay (คำย่อสำหรับความล่าช้าในการเขียน): เซิร์ฟเวอร์ NFS จะหน่วงเวลาในการดำเนินการเปลี่ยนแปลงไปยังดิสก์ หากสงสัยว่าคำขอเขียนที่เกี่ยวข้องอื่นกำลังใกล้เข้ามา อย่างไรก็ตาม หากเซิร์ฟเวอร์ NFS ได้รับคำขอเล็กๆ น้อยๆ ที่ไม่เกี่ยวข้องกันหลายคำขอ ตัวเลือกนี้จะลดประสิทธิภาพลง ดังนั้นจึงสามารถใช้ตัวเลือก no_wdelay เพื่อปิดได้
  4. ซิงค์: เซิร์ฟเวอร์ NFS จะตอบกลับคำขอหลังจากการเปลี่ยนแปลงได้ถูกส่งไปยังที่เก็บข้อมูลถาวรแล้วเท่านั้น (เช่น ฮาร์ดดิสก์) ตรงกันข้ามกับตัวเลือก async อาจเพิ่มประสิทธิภาพ แต่ส่งผลให้ข้อมูลสูญหายหรือเสียหายหลังจากรีสตาร์ทเซิร์ฟเวอร์ที่ไม่สะอาด
  5. root_squash: ป้องกันไม่ให้ผู้ใช้รูทระยะไกลมีสิทธิ์ superuser ในเซิร์ฟเวอร์ และกำหนด ID ผู้ใช้ให้กับผู้ใช้ไม่มีใคร หากคุณต้องการ “สควอช ” ผู้ใช้ทั้งหมด (ไม่ใช่แค่รูท) คุณสามารถใช้ตัวเลือก all_squash ได้
  6. anonuid/anongid: ตั้งค่า UID และ GID ของบัญชีที่ไม่ระบุตัวตนอย่างชัดเจน (ไม่มีใคร)
  7. subtree_check: หากมีการส่งออกเฉพาะไดเรกทอรีย่อยของระบบไฟล์ ตัวเลือกนี้จะตรวจสอบว่าไฟล์ที่ร้องขอนั้นอยู่ในไดเรกทอรีย่อยที่ส่งออกนั้น ในทางกลับกัน หากมีการส่งออกระบบไฟล์ทั้งหมด การปิดใช้งานตัวเลือกนี้ด้วย no_subtree_check จะทำให้การถ่ายโอนเร็วขึ้น ตัวเลือกเริ่มต้นในปัจจุบันคือ no_subtree_check เนื่องจากการตรวจสอบแผนผังย่อยมีแนวโน้มที่จะทำให้เกิดปัญหามากกว่าที่ควรจะเป็น ตามการส่งออกของ man 5
  8. fsid=0 | root (ศูนย์หรือ root): ระบุว่าระบบไฟล์ที่ระบุเป็นรากของไดเร็กทอรีที่ส่งออกหลายรายการ (ใช้เฉพาะใน NFSv4)

ในบทความนี้ เราจะใช้ไดเรกทอรี /NFS-SHARE และ /NFS-SHARE/mydir บน 192.168.0.10 (เซิร์ฟเวอร์ NFS) เป็นของเรา ทดสอบระบบไฟล์

เราสามารถแสดงรายการแชร์เครือข่ายที่มีอยู่ในเซิร์ฟเวอร์ NFS ได้เสมอโดยใช้คำสั่งต่อไปนี้:

showmount -e [IP or hostname]

ในผลลัพธ์ด้านบน เราจะเห็นว่าการแชร์ /NFS-SHARE และ /NFS-SHARE/mydir ใน 192.168.0.10 ได้ถูกส่งออกแล้ว ไปยังไคลเอนต์ด้วยที่อยู่ IP 192.168.0.17

การกำหนดค่าเริ่มต้นของเรา (อ้างอิงถึงไดเร็กทอรี /etc/exports บนเซิร์ฟเวอร์ NFS ของคุณ) สำหรับไดเร็กทอรีที่ส่งออกจะเป็นดังนี้:

/NFS-SHARE  	192.168.0.17(fsid=0,no_subtree_check,rw,root_squash,sync,anonuid=1000,anongid=1000)
/NFS-SHARE/mydir    	192.168.0.17(ro,sync,no_subtree_check)

หลังจากแก้ไขไฟล์กำหนดค่าแล้ว เราต้องเริ่มบริการ NFS ใหม่:

service nfs-kernel-server restart 		[sysvinit / upstart based system]
systemctl restart nfs-server			[systemd based systems]
การติดตั้งการแชร์เครือข่ายที่ส่งออกโดยใช้ autofs

คุณอาจต้องการอ้างอิงถึงส่วนที่ 5 ของซีรีส์ LFCS (“วิธีการเมานท์/ถอนเมานท์ระบบไฟล์ภายในและเครือข่าย (Samba และ NFS) ใน Linux ”) สำหรับรายละเอียดเกี่ยวกับการเมานท์การแบ่งปัน NFS ระยะไกลตามความต้องการโดยใช้ คำสั่ง mount หรือถาวรผ่านไฟล์ /etc/fstab

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

Autofs อ่าน /etc/auto.master ซึ่งมีรูปแบบดังต่อไปนี้:

[mount point]	[map file]

โดยที่ [ไฟล์แผนที่] ใช้เพื่อระบุจุดเมานท์หลายจุดภายใน [จุดเมานท์]

ไฟล์แมปหลักนี้ (/etc/auto.master) จะถูกนำมาใช้เพื่อกำหนดจุดเมานท์ใดที่กำหนดไว้ จากนั้นจึงเริ่มกระบวนการเมาต์อัตโนมัติด้วยพารามิเตอร์ที่ระบุสำหรับจุดเมานท์แต่ละจุด

การติดตั้งการแชร์ NFS ที่ส่งออกโดยใช้ autofs

แก้ไข /etc/auto.master ของคุณดังนี้:

/media/nfs	/etc/auto.nfs-share	--timeout=60

และสร้างไฟล์แผนที่ชื่อ /etc/auto.nfs-share โดยมีเนื้อหาดังต่อไปนี้:

writeable_share  -fstype=nfs4 192.168.0.10:/
non_writeable_share  -fstype=nfs4 192.168.0.10:/mydir

โปรดทราบว่าฟิลด์แรกใน /etc/auto.nfs-share คือชื่อของไดเรกทอรีย่อยภายใน /media/nfs แต่ละไดเร็กทอรีย่อยจะถูกสร้างขึ้นแบบไดนามิกโดย autofs

ตอนนี้ให้เริ่มบริการ autofs ใหม่:

service autofs restart 			[sysvinit / upstart based systems]
systemctl restart autofs 			[systemd based systems]

และสุดท้าย หากต้องการเปิดใช้งาน autofs ให้เริ่มทำงานขณะบู๊ต ให้รันคำสั่งต่อไปนี้:

chkconfig --level 345 autofs on
systemctl enable autofs 			[systemd based systems]
ตรวจสอบระบบไฟล์ที่เมาท์หลังจากสตาร์ท autofs daemon

เมื่อเรารีสตาร์ท autofs คำสั่ง mount จะแสดงให้เราเห็นว่าไฟล์แผนที่ (/etc/auto.nfs-share) ถูกเมานต์บนไฟล์ที่ระบุ ไดเรกทอรีใน /etc/auto.master:

โปรดทราบว่ายังไม่มีการติดตั้งไดเร็กทอรีจริง แต่จะติดตั้งโดยอัตโนมัติเมื่อเราพยายามเข้าถึงการแชร์ที่ระบุใน /etc/auto.nfs-share:

ดังที่เราเห็นแล้วว่าบริการ autofs “เมานต์ ” ไฟล์แผนที่ แต่จะรอจนกว่าจะมีการร้องขอไปยังระบบไฟล์เพื่อเมานต์พวกมันจริงๆ

ดำเนินการทดสอบการเขียนในระบบไฟล์ที่ส่งออก

ตัวเลือก anonuid และ anongid พร้อมด้วย root_squash ตามที่กำหนดไว้ในการแบ่งปันครั้งแรก ช่วยให้เราสามารถแมปคำขอที่ดำเนินการโดยผู้ใช้รูทใน ลูกค้าไปยังบัญชีท้องถิ่นในเซิร์ฟเวอร์

กล่าวอีกนัยหนึ่ง เมื่อรูทในไคลเอนต์สร้างไฟล์ในไดเร็กทอรีที่ส่งออกนั้น ความเป็นเจ้าของจะถูกแมปกับบัญชีผู้ใช้โดยอัตโนมัติด้วย UID และ GID=1000 โดยมีเงื่อนไขว่าบัญชีดังกล่าวมีอยู่บนเซิร์ฟเวอร์:

บทสรุป

ฉันหวังว่าคุณจะสามารถตั้งค่าและกำหนดค่าเซิร์ฟเวอร์ NFS ให้เหมาะสมกับสภาพแวดล้อมของคุณได้สำเร็จโดยใช้บทความนี้เป็นแนวทาง คุณอาจต้องการอ้างอิงถึง man page ที่เกี่ยวข้องเพื่อขอความช่วยเหลือเพิ่มเติม (เช่น man Exports และ man idmapd.conf เป็นต้น)

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