NFS คืออะไร? ระบบไฟล์เครือข่าย โปรโตคอลการเข้าถึงเครือข่ายสำหรับระบบไฟล์ การติดตั้งเซิร์ฟเวอร์ NFS

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

นอกเหนือจากการจัดเตรียมพื้นที่จัดเก็บข้อมูลแบบรวมศูนย์แล้ว NFS ยังได้รับการพิสูจน์แล้วว่ามีประโยชน์อย่างมากสำหรับแอปพลิเคชันอื่นๆ รวมถึงไคลเอ็นต์แบบไร้ดิสก์และแบบธิน การทำคลัสเตอร์เครือข่าย และการทำงานร่วมกันแบบมิดเดิลแวร์

ความเข้าใจที่ดีขึ้นทั้งในตัวโปรโตคอลและรายละเอียดการใช้งานจะช่วยให้รับมือกับปัญหาในทางปฏิบัติได้ง่ายขึ้น บทความนี้จัดทำขึ้นโดยเฉพาะสำหรับ NFS และประกอบด้วยสองส่วนเชิงตรรกะ: ส่วนแรกจะอธิบายตัวโปรโตคอลเองและเป้าหมายที่ตั้งไว้ระหว่างการพัฒนา และจากนั้นจึงนำ NFS ไปใช้งานใน Solaris และ UNIX

มันเริ่มต้นที่ไหน...

โปรโตคอล NFS ได้รับการพัฒนาโดย Sun Microsystems และปรากฏบนอินเทอร์เน็ตในปี 1989 ในชื่อ RFC 1094 ภายใต้ชื่อต่อไปนี้: Network File System Protocol Specification (NFS) เป็นที่น่าสนใจที่จะทราบว่ากลยุทธ์ของ Novell ในขณะนั้นมุ่งเป้าไปที่การปรับปรุงบริการไฟล์เพิ่มเติม จนกระทั่งเมื่อไม่นานมานี้ ก่อนที่การเคลื่อนไหวแบบโอเพ่นซอร์สจะเริ่มต้นขึ้น Sun ลังเลที่จะเปิดเผยความลับของโซลูชันระบบเครือข่ายของตน แต่ถึงอย่างนั้นบริษัทก็เข้าใจถึงความสำคัญของการทำงานร่วมกันกับระบบอื่นๆ

RFC 1094 มีข้อกำหนดดั้งเดิมสองประการ เมื่อถึงเวลาเผยแพร่ Sun กำลังพัฒนาข้อกำหนดเวอร์ชันถัดไปซึ่งเป็นเวอร์ชันที่สามซึ่งกำหนดไว้ใน RFC 1813 “ข้อกำหนดโปรโตคอล NFS เวอร์ชัน 3” เวอร์ชัน 4 ของโปรโตคอลนี้ถูกกำหนดไว้ใน RFC 3010, NFS เวอร์ชัน 4 Protocol

NFS ถูกนำมาใช้กันอย่างแพร่หลายในโฮสต์ UNIX ทุกประเภท บนเครือข่าย Microsoft และ Novell และบนโซลูชันของ IBM เช่น AS400 และ OS/390 แม้ว่าจะไม่รู้จักนอกอาณาจักรเครือข่าย แต่ NFS ก็อาจเป็นระบบไฟล์เครือข่ายที่ไม่ขึ้นกับแพลตฟอร์มที่แพร่หลายที่สุด

UNIX เป็นแหล่งกำเนิด

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

อฟส

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

ไม่เหมือนกับระบบไคลเอ็นต์-เซิร์ฟเวอร์อื่นๆ NFS ใช้ Remote Procedure Calls (RPC) เพื่อแลกเปลี่ยนข้อมูล โดยทั่วไปแล้ว ไคลเอนต์จะสร้างการเชื่อมต่อกับพอร์ตที่รู้จัก จากนั้นจะส่งคำขอเพื่อดำเนินการเฉพาะตามโปรโตคอล ในกรณีของการเรียกขั้นตอนระยะไกล ไคลเอนต์สร้างการเรียกกระบวนการ และจากนั้น ส่งไปยังเซิร์ฟเวอร์เพื่อดำเนินการ คำอธิบายโดยละเอียดของ NFS จะถูกนำเสนอด้านล่าง

ตามตัวอย่าง สมมติว่าไคลเอ็นต์ติดตั้งไดเร็กทอรี usr2 บนระบบไฟล์รูทโลคัล:

/root/usr2/ -> ระยะไกล:/root/usr/

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

ซีดี /root/usr2/

จะวางไดเร็กทอรีการทำงานบนระบบไฟล์ระยะไกล "โดยที่ไม่รู้ตัว" (ผู้ใช้ก็ไม่จำเป็นต้องใช้สิ่งนี้) ว่าระบบไฟล์นั้นเป็นระบบระยะไกล

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

มาทำความรู้จักกันดีกว่า

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

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

(เนื้อหาที่นำเสนอมุ่งเน้นไปที่เวอร์ชันที่สามของ NFS เนื่องจากเป็นเวอร์ชันที่แพร่หลายที่สุดในขณะนี้ เวอร์ชันที่สี่ยังไม่รองรับการใช้งานส่วนใหญ่)

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

ความหมายของคำสั่งส่วนใหญ่นั้นใช้งานง่ายและไม่ทำให้ผู้ดูแลระบบลำบาก รายการต่อไปนี้ ซึ่งได้รับโดยใช้ tcdump แสดงให้เห็นคำสั่ง read ที่สร้างโดยคำสั่ง UNIX cat เพื่ออ่านไฟล์ชื่อ test-file:

10:30:16.012010 eth0 > 192.168.1.254

3476097947 > 192.168.1.252.2049: 144 การค้นหา fh 32.0/ 224145 "ไฟล์ทดสอบ" 10:30:16.012010 eth0 > 192.168.1.254

3476097947 > 192.168.1.252.2049: 144 การค้นหา fh 32.0/ 224145 "ไฟล์ทดสอบ" 10:30:16.012729 eth0 192.168.1.254.3476097947: ตอบกลับตกลง 128 การค้นหา fh 32.0/224 307 (DF) 10:30: 16.012729 eth0 192.168 .1.254.3476097947: ตอบ ตกลง 128 ค้นหา fh 32.0/224307 (DF) 10:30:16.013124 eth0 > 192.168.1.254 3492875163 > 192.168.1.252.2049: 140 อ่าน fh 32.0/ 224307 4096 ไบต์ @ 0 10:30:16.013124 eth0 > 192.168.1.254 3492875163 > 192.168.1.252.2049: 140 อ่าน fh 32.0/ 224307 4096 ไบต์ @ 0 10:30:16.013650 eth0 192.168.1.254.3492875163: ตอบกลับตกลง 108 อ่าน (DF 10:3) 0:16.013650 eth0 192.168.1.254.3492875163 : ตอบตกลง 108 อ่าน (DF)

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

การเข้าถึง NFS

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

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

การเข้าถึงแบบรวมเพียงแต่รวมประเภทข้างต้น (เช่น การเข้าถึงระดับที่ใช้ร่วมกันกับการเข้าถึงที่มอบให้กับผู้ใช้ที่ระบุ) หรืออนุญาตให้ผู้ใช้เข้าถึง NFS จากโหนดที่ระบุเท่านั้น

NFS ในสไตล์เพนกวิน

เนื้อหาที่เกี่ยวข้องกับ Linux นั้นใช้ Red Hat 6.2 พร้อมเคอร์เนลเวอร์ชัน 2.4.9 ซึ่งมาพร้อมกับ nfs-utils เวอร์ชัน 0.1.6 นอกจากนี้ยังมีเวอร์ชันที่ใหม่กว่า: ในขณะที่เขียนการอัปเดตล่าสุดของแพ็คเกจ nfs-utils คือ 0.3.1 สามารถดาวน์โหลดได้จาก: .

แพ็คเกจ nfs-utils ประกอบด้วยไฟล์ปฏิบัติการต่อไปนี้: Exportfs, lockd, mountd, nfsd, nfsstat, nhfsstone, rquotad, showmount และ statd

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

การสนับสนุน NFS ควรเริ่มต้นระหว่างการคอมไพล์เคอร์เนล หากจำเป็น ควรเพิ่มความสามารถในการทำงานกับ NFS เวอร์ชัน 3 ให้กับเคอร์เนล

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

ไฟล์ /etc/exports เช่นเดียวกับในเวอร์ชันก่อนหน้าของ BSD กำหนดระบบไฟล์ที่ไคลเอ็นต์ NFS ได้รับอนุญาตให้เข้าถึง นอกจากนี้ยังมีคุณลักษณะเพิ่มเติมจำนวนหนึ่งที่เกี่ยวข้องกับปัญหาด้านการจัดการและความปลอดภัย ซึ่งช่วยให้ผู้ดูแลระบบมีวิธีการปรับแต่งอย่างละเอียด นี่คือไฟล์ข้อความที่ประกอบด้วยรายการ บรรทัดว่างหรือบรรทัดแสดงความคิดเห็น (ความคิดเห็นขึ้นต้นด้วยสัญลักษณ์ #)

สมมติว่าเราต้องการให้ไคลเอนต์เข้าถึงไดเร็กทอรี /home บนโหนด Lefty แบบอ่านอย่างเดียว ซึ่งจะสอดคล้องกับรายการต่อไปนี้ใน /etc/exports:

/บ้าน (ro)

ที่นี่เราต้องบอกระบบว่าไดเร็กทอรีใดที่เราจะทำให้สามารถเข้าถึงได้โดยใช้ rpc.mountd mount daemon:

# Exportfs -r Exportfs: ไม่ได้ระบุชื่อโฮสต์ใน /home (ro) ให้ป้อน *(ro) เพื่อหลีกเลี่ยงคำเตือน #

เมื่อรัน คำสั่ง Exportfs จะส่งคำเตือนว่า /etc/exports ไม่ได้จำกัดการเข้าถึงโหนดใดโหนดหนึ่ง และสร้างรายการที่สอดคล้องกันใน /var/lib/nfs/etab จาก /etc/exports เพื่อบอกว่าทรัพยากรใดที่สามารถดูได้โดยใช้ cat : :

# cat /var/lib/nfs/etab /home (ro,async,wdelay,ซ่อน,ปลอดภัย,root_squash, no_all_squash,subtree_check, Secure_locks, mapping=identity,anonuid= -2,anongid=-2)

ตัวเลือกอื่น ๆ ที่ระบุไว้ใน etab รวมถึงค่าเริ่มต้นที่ใช้โดย NFS รายละเอียดจะอธิบายไว้ด้านล่าง เพื่อให้สามารถเข้าถึงไดเร็กทอรี /home คุณต้องเริ่มต้นเซอร์วิส NFS ที่เหมาะสม:

# พอร์ตแมป # rpc.mountd # rpc.nfsd # rpc.statd # rpc.rquotad

เมื่อใดก็ได้หลังจากสตาร์ท mount daemon (rpc.mountd) คุณสามารถดูแต่ละไฟล์ที่พร้อมใช้งานสำหรับเอาต์พุตโดยการดูเนื้อหาของไฟล์ /proc/fs/nfs/exports:

# cat /proc/fs/nfs/exports # เวอร์ชัน 1.0 # เส้นทางไคลเอ็นต์ (แฟล็ก) # IPs /home 192.168.1.252(ro,root_squash,async, wdelay) # 192.168.1.252 #

สามารถดูได้เหมือนกันโดยใช้คำสั่ง showmount พร้อมด้วยพารามิเตอร์ -e:

# showmount -e รายการส่งออกสำหรับคนถนัดมือซ้าย: /home (ทุกคน) #

ก้าวไปข้างหน้าอีกเล็กน้อย คำสั่ง showmount ยังสามารถใช้เพื่อกำหนดระบบไฟล์ที่เมาท์ทั้งหมด หรืออีกนัยหนึ่ง เพื่อค้นหาว่าโหนดใดเป็นไคลเอ็นต์ NFS สำหรับระบบที่รันคำสั่ง showmount คำสั่ง showmount -a จะแสดงรายการจุดเชื่อมต่อไคลเอ็นต์ทั้งหมด:

# showmount -a จุดเมานต์ทั้งหมดทางซ้าย: 192.168.1.252:/home #

ตามที่ระบุไว้ข้างต้น การใช้งาน NFS ส่วนใหญ่สนับสนุนเวอร์ชันต่างๆ ของโปรโตคอลนี้ การใช้งาน Linux ช่วยให้คุณสามารถจำกัดรายการเวอร์ชัน NFS ที่สามารถเปิดใช้งานได้โดยการระบุสวิตช์ -N สำหรับ mount daemon ตัวอย่างเช่น หากต้องการรัน NFS เวอร์ชัน 3 และเฉพาะเวอร์ชัน 3 ให้ป้อนคำสั่งต่อไปนี้:

# rpc.mountd -N 1 -N 2

ผู้ใช้บ่อยครั้งอาจพบว่าไม่สะดวกที่ NFS daemon (rpc.nfsd) ของ Linux จะรอแพ็คเกจเวอร์ชัน 1 และเวอร์ชัน 2 แม้ว่านี่จะมีผลตามที่ต้องการคือไม่รองรับโปรโตคอลที่เกี่ยวข้องก็ตาม หวังว่านักพัฒนาเวอร์ชันในอนาคตจะทำการแก้ไขที่จำเป็นและจะสามารถบรรลุความสอดคล้องกันมากขึ้นระหว่างส่วนประกอบของแพ็คเกจที่เกี่ยวข้องกับเวอร์ชันต่างๆ ของโปรโตคอล

"ว่ายน้ำกับนกเพนกวิน"

การเข้าถึง Lefty ที่กำหนดค่าไว้ข้างต้น ซึ่งเป็นระบบไฟล์ NFS ที่ใช้ Linux ซึ่งสามารถส่งออกได้ ขึ้นอยู่กับระบบปฏิบัติการไคลเอ็นต์ รูปแบบการติดตั้งสำหรับระบบปฏิบัติการตระกูล UNIX ส่วนใหญ่จะเหมือนกับรูปแบบการติดตั้ง Sun OS และ BSD ดั้งเดิม หรือ Solaris รุ่นใหม่ เนื่องจากบทความนี้เกี่ยวกับทั้ง Linux และ Solaris เรามาดูการกำหนดค่าไคลเอนต์ Solaris 2.6 จากมุมมองของการสร้างการเชื่อมต่อกับ NFS เวอร์ชัน Linux ที่เราอธิบายไว้ข้างต้น

ด้วยคุณสมบัติที่สืบทอดมาจาก Solaris 2.6 ทำให้สามารถกำหนดค่าให้ทำหน้าที่เป็นไคลเอนต์ NFS ได้อย่างง่ายดาย สิ่งนี้ต้องการเพียงคำสั่งเดียวเท่านั้น:

# เมานต์ -F nfs 192.168.1.254:/home /tmp/tmp2

สมมติว่าคำสั่ง mount ก่อนหน้านี้สำเร็จ คำสั่ง mount ที่ไม่มีพารามิเตอร์จะส่งออกผลลัพธ์ต่อไปนี้:

# mount / on /dev/dsk/c0t0d0s0 อ่าน/เขียน/setuid/ largefiles ในวันจันทร์ที่ 3 กันยายน 10:17:56 2544 ... ... /tmp/tmp2 บน 192.168.1.254:/home read/ write/remote on จันทร์ที่ 3 ก.ย. 23:19:25 2544

มาวิเคราะห์เอาต์พุต tcpdump ที่ได้รับบนโหนด Lefty หลังจากที่ผู้ใช้ออกคำสั่ง ls /tmp/tmp2 บนโหนด Sunny:

# tcpdump โฮสต์ถนัดมือและโฮสต์ sunny -s512 06:07:43.490583 sunny.2191983953 > lefty.mcwrite.n.nfs: 128 getattr fh Unknown/1 (DF) 06:07:43.490678 lefty.mcwrite.n.nfs > sunny 2191983953: ตอบตกลง 112 getattr DIR 40755 ids 0/0 sz 0x000001000 (DF) 06:07:43.491397 sunny.2191983954 > lefty.mcwrite.n.nfs: 132 เข้าถึง fh Unknown/10001 (DF) 06:07: 43 .491463 ถนัดมือซ้าย mcwrite.n.nfs > sunny.2191983954: ตอบตกลง 120 เข้าถึง c0001 (DF) 06:07:43.492296 sunny.2191983955 > lefty.mcwrite.n.nfs: 152 readdirplus fh 0.1/16777984 1048 ไบต์ @ 0x0000 00000 ( ฟฟ) 06 :07:43.492417 lefty.mcwrite.n.nfs > sunny.2191983955: ตอบตกลง 1,000 readdirplus (DF)

เราเห็นว่าโหนด Sunny ร้องขอตัวจัดการไฟล์ (fh) สำหรับ ls ซึ่งโหนด Lefty ตอบกลับด้วย OK และส่งกลับโครงสร้างไดเร็กทอรี จากนั้นซันนี่จะตรวจสอบสิทธิ์ในการเข้าถึงเนื้อหาของไดเร็กทอรี (132 access fh) และรับการตอบกลับการอนุญาตจาก Lefty จากนั้นโหนด Sunny จะอ่านเนื้อหาทั้งหมดของไดเร็กทอรีโดยใช้รูทีน readdirplus การเรียกขั้นตอนระยะไกลอธิบายไว้ใน RFC 1813 และแสดงไว้ที่ตอนต้นของบทความนี้

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

วิธีที่ง่ายที่สุดในการแก้ไขปัญหาบนเซิร์ฟเวอร์คือจากโหนดที่เซิร์ฟเวอร์กำลังทำงานอยู่ อย่างไรก็ตาม เมื่อมีบุคคลอื่นเป็นผู้ดูแลเซิร์ฟเวอร์ให้กับคุณ สิ่งนี้อาจไม่สามารถทำได้เสมอไป วิธีที่รวดเร็วเพื่อให้แน่ใจว่าเซอร์วิสเซิร์ฟเวอร์ที่เหมาะสมได้รับการกำหนดค่าอย่างถูกต้องคือการใช้คำสั่ง rpcinfo พร้อมกับอ็อพชัน -p จากโฮสต์ Solaris Sunny คุณสามารถกำหนดได้ว่ากระบวนการ RPC ใดที่ลงทะเบียนบนโฮสต์ Linux:

# rpcinfo -p 192.168.1.254 โปรแกรมเทียบกับบริการพอร์ตโปรโต 100000 2 tcp 111 rpcbind 100000 2 udp 111 rpcbind 100024 1 udp 692 สถานะ 100024 1 tcp 694 สถานะ 100005 3 udp 1024 เมานต์ d /100005 3 tcp 1024 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 1026 nlockmgr 100021 3 udp 1026 nlockmgr 100021 4 udp 1026 nlockmgr #

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

# rpcinfo -p 192.168.1.254 โปรแกรมเทียบกับบริการพอร์ตโปรโต 100000 2 tcp 111 rpcbind ... ... 100021 4 udp 1026 nlockmgr #

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

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

ในที่สุด อีกเครื่องมือที่มีประโยชน์มากในการระบุสาเหตุของความล้มเหลวของระบบคือ tcpdump:

# โฮสต์ tcpdump ถนัดมือและโฮสต์ sunny -s512 tcpdump: กำลังฟัง eth0 06:29:51.773646 sunny.2191984020 > lefty.mcwrite.n.nfs: 140 การค้นหา fh Unknown/1"test.c" (DF) 06:29:51.773819 lefty.mcwrite.n.nfs > sunny.2191984020: ตอบตกลง 116 ค้นหาข้อผิดพลาด: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว (DF) 06:29:51.774593 sunny.2191984021 > lefty.mcwrite.n.nfs: 128 getattr fh Unknown/1 ( DF) 06:29:51.774670 lefty.mcwrite.n.nfs > sunny.2191984021: ตอบกลับ ตกลง 112 getattr DIR 40755 ids 0/0 sz 0x000001000 (DF) 06:29:51.775289 sunny.2191984022 > lefty .nfs : 140 การค้นหา fh Unknown/1"test.c" (DF) 06:29:51.775357 lefty.mcwrite.n.nfs > sunny.2191984022: ตอบตกลง 116 การค้นหาข้อผิดพลาด: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว (DF) 06:29: 51.776029 sunny.2191984023 > lefty.mcwrite.n.nfs: 184 สร้าง fh Unknown/1 "test.c" (DF) 06:29:51.776169 lefty.mcwrite.n.nfs > sunny.2191984023: ตอบตกลง 120 สร้างข้อผิดพลาด: การอนุญาตถูกปฏิเสธ (DF)

รายการข้างต้น สร้างขึ้นโดยการรันคำสั่ง touch test.c จะแสดงลำดับการดำเนินการต่อไปนี้ ขั้นแรกคำสั่ง touch จะพยายามเข้าถึงไฟล์ชื่อ test.c จากนั้นจะค้นหาไดเร็กทอรีที่มีชื่อเดียวกัน และหลังจากพยายามไม่สำเร็จ มันพยายามสร้างไฟล์ test.c ซึ่งไม่ได้นำไปสู่ความสำเร็จเช่นกัน

หากติดตั้งระบบไฟล์ ข้อผิดพลาดทั่วไปส่วนใหญ่จะเกี่ยวข้องกับสิทธิ์ UNIX ปกติ การใช้ uid หรือ NIS+ บน Sun จะช่วยหลีกเลี่ยงการตั้งค่าสิทธิ์แบบโกลบอลในทุกระบบไฟล์ ผู้ดูแลระบบบางคนใช้ไดเร็กทอรีแบบ "เปิด" โดยให้สิทธิ์การเข้าถึงแบบอ่านแก่ "ทั่วโลก" อย่างไรก็ตามควรหลีกเลี่ยงสิ่งนี้ด้วยเหตุผลด้านความปลอดภัย นอกเหนือจากข้อกังวลด้านความปลอดภัยแล้ว วิธีการนี้ยังคงเป็นแนวทางปฏิบัติที่ไม่ดี เนื่องจากผู้ใช้ไม่ค่อยสร้างข้อมูลโดยมีจุดประสงค์เพื่อให้ทุกคนสามารถอ่านได้

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

เซิร์ฟเวอร์ NFS เวอร์ชันโซลาริส

การกำหนดค่า Solaris เพื่อทำหน้าที่เป็นเซิร์ฟเวอร์ NFS นั้นง่ายดายเหมือนกับที่ใช้กับ Linux อย่างไรก็ตาม คำสั่งและตำแหน่งไฟล์จะแตกต่างกันเล็กน้อย เมื่อ Solaris บู๊ต เมื่อถึงรันระดับ 3 บริการ NFS จะเริ่มทำงานโดยอัตโนมัติและระบบไฟล์ทั้งหมดจะถูกส่งออก หากต้องการเริ่มกระบวนการเหล่านี้ด้วยตนเอง ให้ป้อนคำสั่ง:

#/usr/lib/nfs/mountd

หากต้องการสตาร์ท mount daemon และเซิร์ฟเวอร์ NFS ให้ป้อน:

#/usr/lib/nfs/nfsd

ตั้งแต่เวอร์ชัน 2.6 เป็นต้นไป Solaris จะไม่ใช้ไฟล์ส่งออกเพื่อระบุระบบไฟล์ที่จะส่งออกอีกต่อไป ตอนนี้ไฟล์จะถูกส่งออกโดยใช้คำสั่ง share สมมติว่าเราต้องการอนุญาตให้โฮสต์ระยะไกลเมานต์ /ส่งออก/โฮม เมื่อต้องการทำเช่นนี้ ให้ป้อนคำสั่งต่อไปนี้:

แบ่งปัน -F nfs /export/home.php

มาตรการรักษาความปลอดภัย

ความปลอดภัยในลินุกซ์

บริการระบบ NFS บน Linux บางอย่างมีกลไกจำกัดการเข้าถึงเพิ่มเติมผ่านรายการควบคุมหรือตาราง ในระดับภายใน กลไกนี้ถูกนำไปใช้โดยใช้ไลบรารี tcp_wrapper ซึ่งใช้สองไฟล์เพื่อสร้างรายการควบคุมการเข้าถึง: /etc/hosts.allow และ /etc/hosts/deny ภาพรวมโดยละเอียดของกฎสำหรับการทำงานกับ tcp_wrapper นั้นอยู่นอกเหนือขอบเขตของบทความนี้ แต่หลักการพื้นฐานมีดังต่อไปนี้: การเปรียบเทียบจะดำเนินการครั้งแรกด้วย etc/hosts.allow แล้วตามด้วย /etc/hosts ปฏิเสธ. หากไม่พบกฎ จะไม่มีการแสดงบริการของระบบที่ร้องขอ หากต้องการหลีกเลี่ยงข้อกำหนดสุดท้ายนี้และให้ระดับการรักษาความปลอดภัยที่สูงมาก คุณสามารถเพิ่มรายการต่อไปนี้ที่ส่วนท้ายของ /etc/hosts.deny:

ทั้งหมด: ทั้งหมด

หลังจากนี้ คุณสามารถใช้ /etc/hosts.allow เพื่อตั้งค่าโหมดการทำงานอย่างใดอย่างหนึ่ง ตัวอย่างเช่น ไฟล์ /etc/hosts. อนุญาต ซึ่งฉันใช้เมื่อเขียนบทความนี้ มีบรรทัดต่อไปนี้:

ล็อค:192.168.1.0/255.255.255.0 mountd:192.168.1.0/255.255.255.0 พอร์ตแมป:192.168.1.0/255.255.255.0 rquotad:192.168.1.0/255.255.255.0 statd:192.1 68.1.0/255.255.255.0

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

ส่งออกไดเร็กทอรี (ช่องว่าง) โฮสต์ | เครือข่าย (ตัวเลือก)

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

ตัวอย่างต่อไปนี้ให้โดเมน mcwrite.net ทั้งหมดเข้าถึง /home/mcwrite.net แบบอ่านอย่างเดียว:

/home/mcwrite.net *.mcwrite.net(ro)

ดูตัวอย่างเพิ่มเติมได้ในหน้าผู้ส่งออก

การรักษาความปลอดภัย NFS ในโซลาริส

ใน Solaris ความสามารถในการให้การเข้าถึง NFS นั้นคล้ายคลึงกับ Linux แต่ในกรณีนี้ ข้อจำกัดจะถูกตั้งค่าโดยใช้พารามิเตอร์บางตัวในคำสั่ง share ด้วยสวิตช์ -o ตัวอย่างต่อไปนี้แสดงวิธีการเปิดใช้งานการติดตั้ง /export/mcwrite.net แบบอ่านอย่างเดียวบนโฮสต์ใดๆ ในโดเมน mcwrite.net:

#share -F nfs -o ro=.mcwrite.net/ ส่งออก/ mcwrite.net

man page สำหรับรายละเอียด share_nfs ที่ให้สิทธิ์การเข้าถึงโดยใช้รายการควบคุมบน Solaris

แหล่งข้อมูลอินเทอร์เน็ต

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

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

สำหรับการกระจายไฟล์ภายในเครือข่ายท้องถิ่น สามารถแยกแยะเทคโนโลยีต่อไปนี้ได้ (พิจารณาระบบที่ใช้ Linux):

  • Network File System (NFS) - โปรโตคอลการเข้าถึงเครือข่ายสำหรับระบบไฟล์
  • ไฟล์ที่ถ่ายโอนผ่านโปรโตคอลเชลล์ (FISH) เป็นโปรโตคอลเครือข่ายที่ใช้หรือ อาร์เอสเอชเพื่อถ่ายโอนไฟล์ระหว่างคอมพิวเตอร์
  • Secure SHell FileSystem (SSHFS) - ไคลเอนต์ระบบไฟล์สำหรับติดตั้งอุปกรณ์ดิสก์บนระบบระยะไกล ใช้เพื่อโต้ตอบกับระบบระยะไกล เอสเอฟทีพี;
  • Samba เป็นชุดซอฟต์แวร์ที่ช่วยให้คุณเข้าถึงไดรฟ์เครือข่ายและเครื่องพิมพ์บนระบบปฏิบัติการต่างๆ ผ่านทางโปรโตคอล SMB/CIFS

ในบันทึกนี้เราจะพูดถึง อฟส.

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

เพื่อประโยชน์ อฟสสามารถนำมาประกอบได้:

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

    รูปแบบการดำเนินงาน อฟสโปรโตคอล.

    การติดตั้งและกำหนดค่าเซิร์ฟเวอร์ NFS ภายใต้ Linux

    ตรวจสอบว่าระบบรองรับ NFS หรือไม่

    Cat /proc/ระบบไฟล์ | grep nfs

    ภายใต้ อาร์ค ลินุกซ์เซิร์ฟเวอร์และไคลเอนต์อยู่ในแพ็คเกจเดียวกัน

    Yaourt -S nfs-utils

    ในการติดตั้งเซิร์ฟเวอร์ ( nfs-เคอร์เนลเซิร์ฟเวอร์) และลูกค้า ( nfs-ทั่วไป) ภายใต้ อูบุนตูแพ็คเกจที่จำเป็น

    Sudo apt-get ติดตั้ง nfs-kernel-server nfs-common portmap

    นอกจากนี้ในหมายเหตุนี้ IP จะถูกใช้สำหรับเซิร์ฟเวอร์ 192.168.1.100 - เพื่อให้ IP เดียวกันถูกกำหนดให้กับเซิร์ฟเวอร์เสมอ จำเป็นต้องระบุในเซิร์ฟเวอร์ DHCP (โดยปกติคือเราเตอร์) การกระจาย IP เฉพาะไปยังที่อยู่ MAC เฉพาะ หรือเพิ่มเซิร์ฟเวอร์ DNS ในเครื่องของคุณ ตัวอย่างเช่นหรือ.

    ที่อยู่ MAC สามารถพบได้โดยใช้ ifconfig (field อีเทอร์วี อาร์ค ลินุกซ์).

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

    Mount.nfs: การเข้าถึงถูกปฏิเสธโดยเซิร์ฟเวอร์ขณะติดตั้ง 192.168.1.100:/home/proft/torrents

    หากคุณยังต้องการใช้วิธีการบนเซิร์ฟเวอร์โดยไม่มีไดเร็กทอรีรูท อฟสจากนั้นเมื่อติดตั้งโดยไคลเอนต์ คุณต้องระบุเวอร์ชันอย่างชัดเจน 3

    # สำหรับคำสั่ง mount mount -o "vers=3" 192.168.1.100:/home/proft/torrents /home/proft/nfs/torrents # สำหรับ fstab 192.168.1.100:/home/proft/torrents /home/proft/nfs / torrents nfs soft,nfsvers=3 0 0

    ฉันจะใช้ NFSv4ด้วยไดเรกทอรีรากใน /srv/nfs/และการติดตั้งไดเรกทอรีย่อยโดยใช้ mount --bind

    สมมุติว่าเราต้องการ

    • แจกจ่ายไดเร็กทอรี ~/ทอร์เรนต์กับ ร.รเข้าถึงเพื่อ ทุกคนภายในเครือข่ายท้องถิ่น
    • แจกจ่ายไดเร็กทอรี ~/รูปภาพกับ โรการเข้าถึงโฮสต์ด้วย IP 192.168.1.101 ;

    ขั้นแรก เรามาสร้างไดเร็กทอรีรากและไดเร็กทอรีย่อยที่จำเป็นกันก่อน

    Sudo mkdir -p /srv/nfs/(ทอร์เรนต์, ภาพถ่าย)

    เมานต์ไดเร็กทอรีที่มีอยู่ ทอร์เรนต์, ภาพถ่ายวี /srv/nfs.

    # sudo vim /etc/fstab /home/proft/torrents /srv/nfs/torrents ไม่มีการเชื่อมโยง 0 0 /home/proft/photos /srv/nfs/photos ไม่มีการเชื่อมโยง 0 0

    มาแก้ไขกัน /etc/exportsซึ่งอธิบายไดเร็กทอรีที่แชร์ทั้งหมด

    # sudo vim /etc/exports # รูปแบบไฟล์: ไดเรกทอรีที่อนุญาตโฮสต์ (ตัวเลือก) /srv/nfs/torrents 192.168.1.1/24(rw,async) /srv/nfs/photos 192.168.1.101(ro,async)

    โปรดทราบว่าไม่มีช่องว่างระหว่าง อนุญาตโฮสต์และ (ตัวเลือก)- การมีอยู่ของพื้นที่ทำให้เกิดการตีความกฎเกณฑ์ที่แตกต่างกัน

    ตัวเลือกที่มี:

    • ro (rw) - อนุญาตการเข้าถึงแบบอ่านอย่างเดียว (อ่าน/เขียน)
    • subtree_check (no_subtree_check) - ในบางกรณีจำเป็นต้องส่งออกไม่ใช่ทั้งหมดส่วน แต่เพียงบางส่วนเท่านั้น ในกรณีนี้คือเซิร์ฟเวอร์ อฟสต้องทำการตรวจสอบเพิ่มเติมตามคำขอของลูกค้าเพื่อให้แน่ใจว่าพวกเขากำลังพยายามเข้าถึงไฟล์ที่อยู่ในไดเรกทอรีย่อยที่เหมาะสมเท่านั้น การควบคุมทรีย่อยนี้ ( การตรวจสอบแผนผังย่อย) ค่อนข้างชะลอการโต้ตอบกับไคลเอนต์ แต่ถ้าคุณปฏิเสธก็อาจทำให้เกิดปัญหากับความปลอดภัยของระบบ คุณสามารถยกเลิกการควบคุมทรีย่อยได้โดยใช้ตัวเลือก no_subtree_check- ตัวเลือก subtree_checkซึ่งรวมถึงการควบคุมดังกล่าว จะถือเป็นค่าเริ่มต้น การตรวจสอบทรีย่อยสามารถละเว้นได้หากไดเร็กทอรีที่เอ็กซ์พอร์ตเหมือนกับพาร์ติชันดิสก์
    • ซิงค์ (async) - ระบุว่าเซิร์ฟเวอร์ควรตอบสนองต่อคำขอหลังจากที่การเปลี่ยนแปลงที่ทำโดยคำขอเหล่านั้นถูกเขียนลงดิสก์เท่านั้น ตัวเลือก อะซิงโครนัสบอกให้เซิร์ฟเวอร์ไม่ต้องรอให้เขียนข้อมูลลงดิสก์ซึ่งช่วยปรับปรุงประสิทธิภาพ แต่ลดความน่าเชื่อถือลงเพราะ ในกรณีที่การเชื่อมต่อล้มเหลวหรืออุปกรณ์ขัดข้อง ข้อมูลอาจสูญหายได้
    • noaccess - ปฏิเสธการเข้าถึงไดเร็กทอรีที่ระบุ อาจมีประโยชน์หากก่อนหน้านี้คุณตั้งค่าการเข้าถึงสำหรับผู้ใช้เครือข่ายทั้งหมดไปยังไดเร็กทอรีบางรายการ และตอนนี้คุณต้องการจำกัดการเข้าถึงไดเร็กทอรีย่อยเฉพาะผู้ใช้บางรายเท่านั้น
    • no_root_squash – ผู้ใช้เริ่มต้น รากบนเครื่องไคลเอนต์จะไม่มีสิทธิ์เหมือนกันในไดเร็กทอรีบนเซิร์ฟเวอร์ ตัวเลือกนี้จะลบข้อจำกัดนี้
    • ไม่มีหนัง- อฟสไม่แสดงทรัพยากรที่ไม่ใช่ท้องถิ่นโดยอัตโนมัติ (เช่น ติดตั้งโดยใช้ mount --bind) ตัวเลือกนี้ช่วยให้สามารถแสดงทรัพยากรดังกล่าวได้
    • ไม่ปลอดภัย - การใช้พอร์ตที่ไม่มีสิทธิพิเศษ (> 1024)

    การเริ่มต้นเซิร์ฟเวอร์ NFS

    # ภายใต้ archlinux sudo systemctl start rpc-idmapd.service rpc-mountd.service # ภายใต้ ubuntu sudo /etc/init.d/nfs-kernel-server start

    ในอนาคตเมื่อเปลี่ยนไฟล์กำหนดค่าให้อ่านอีกครั้งด้วยคำสั่ง:

    Sudo ส่งออกfs -rav

    คำสั่ง rpcinfo -p | grep nfs ช่วยให้คุณตรวจสอบว่าเซิร์ฟเวอร์เริ่มทำงานได้สำเร็จหรือไม่

    ไคลเอนต์ลินุกซ์

    การติดตั้ง

    # ภายใต้ archlinux yaourt -S nfs-utils # ภายใต้ ubuntu sudo apt-get ติดตั้ง portmap nfs-common

    มาสร้างไดเร็กทอรีสำหรับติดตั้งทรัพยากรเครือข่ายกัน ทอร์เรนต์และ ภาพถ่าย

    Mkdir -p ~/nfs/(ทอร์เรนต์, ภาพถ่าย)

    สำหรับการติดตั้งแบบแมนนวลเราจะทำ

    Sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/nfs/torrents /home/proft/nfs/torrents sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/nfs/photos /home /proft/nfs/photos

    ตัวเลือก อ่อนนุ่มระบุให้ยกเลิกความพยายามในการเชื่อมต่อการแชร์อย่างเงียบ ๆ หลังจากผ่านไประยะเวลาหนึ่ง (เวลาจะถูกระบุโดยตัวเลือก ทรานส์- รายละเอียดเพิ่มเติมใน ผู้ชาย nfs.

    วิธีนี้ไม่สะดวกนักเนื่องจากทุกครั้งหลังจากรีบูตเครื่องคุณจะต้องดำเนินการคำสั่งเหล่านี้ มาทำการติดตั้งอัตโนมัติกันเถอะ

    หากต้องการเมานต์อัตโนมัติ ให้แก้ไขไฟล์ /etc/fstab

    # sudo vim /etc/fstab 192.168.1.100:/srv/nfs/torrents /home/proft/net/torrents nfs rw,soft 0 0 192.168.1.100:/srv/nfs/photos /home/proft/net/photos nfs ro, ซอฟท์ 0 0

    แต่วิธีนี้ก็มีข้อเสียเช่นกัน เช่น หากเซิร์ฟเวอร์ไม่พร้อมใช้งาน การโหลดของไคลเอ็นต์อาจค้างเนื่องจากพยายามเชื่อมต่อกับเซิร์ฟเวอร์ NFS หากต้องการแก้ไขปัญหานี้ โปรดดูด้านล่างเกี่ยวกับ ออโต้เอฟเอส.

    AutoFS - การเชื่อมต่อทรัพยากรเครือข่ายอัตโนมัติ

    เป็นไปได้ที่จะเมานต์ทรัพยากรระยะไกลโดยใช้ ออโต้เอฟเอสเมื่อเข้าถึงครั้งแรกและยกเลิกการต่อเชื่อมโดยอัตโนมัติเมื่อไม่มีกิจกรรม

    ออโต้เอฟเอสใช้เทมเพลตที่อยู่ใน /etc/autofs- เทมเพลตหลักเรียกว่า อัตโนมัติ.มาสเตอร์ซึ่งสามารถชี้ไปที่รูปแบบอื่นอย่างน้อยหนึ่งรูปแบบสำหรับสื่อประเภทใดประเภทหนึ่งโดยเฉพาะ

    การติดตั้ง

    # ภายใต้ archlinux yaourt -S autofs # ภายใต้ ubuntu sudo apt-get ติดตั้ง autofs

    มีหลายวิธีในการระบุวิธีการติดตั้งอัตโนมัติ ฉันใช้อันนี้: ใน /home/proft/nfsไดเร็กทอรีจะถูกสร้างขึ้นโดยอัตโนมัติด้วยชื่อของเซิร์ฟเวอร์ NFS ซึ่งไดเร็กทอรีที่สามารถเข้าถึงได้บนเซิร์ฟเวอร์จะถูกสร้างขึ้นโดยอัตโนมัติ

    # sudo vim /etc/autofs/auto.master /home/proft/nfs /etc/autofs/auto.nfs --หมดเวลา = 60

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

    เราจะอธิบายใน /etc/autofs/auto.nfsเซิร์ฟเวอร์ NFS และไดเร็กทอรีราก

    # sudo vim /etc/autofs/auto.nfs nfsserver 192.168.1.100:/srv/nfs

    ตอนนี้ที่คำขอแรก /home/proft/nfs/torrentsทรัพยากร NFS จะถูกเมาต์โดยอัตโนมัติ

    มาเริ่มบริการ autofs ใหม่:

    # ภายใต้ archlinux sudo systemctl รีสตาร์ท autofs # ภายใต้ ubuntu sudo /etc/init.d/autofs รีสตาร์ท

    คุณยังสามารถระบุเวลารอเพื่อให้ทรัพยากร NFS พร้อมใช้งานได้ เมื่อต้องการทำเช่นนี้ คุณต้องเปลี่ยนค่า MOUNT_รอ.

    # ภายใต้ archlinux # sudo vim /etc/conf.d/autofs MOUNT_WAIT=5 # ภายใต้ ubuntu sudo /etc/default/autofs MOUNT_WAIT=5

    การบังคับใช้ NFS v3

    ในบางกรณี NFSv4อาจทำงานช้า เพื่อแก้ไขปัญหานี้ คุณสามารถบังคับให้ใช้เวอร์ชันที่สามได้

    "และคุณมีความคิดเกี่ยวกับ "ระบบไฟล์เครือข่าย" ความสามารถและระดับความปลอดภัยแล้ว อย่างไรก็ตาม ในบทความนี้ ทุกอย่างเข้าใจได้จากมุมมองของลูกค้าเป็นหลัก... แต่จะทำอย่างไรถ้าคุณต้องการมีเซิร์ฟเวอร์ NFS ของคุณเอง? (หมายเหตุ: “fuck” ไม่ได้หมายถึง “พัง” แต่หมายถึง “ติดตั้งและกำหนดค่า”)

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

    การเปิดตัวเซิร์ฟเวอร์นั้นค่อนข้างง่าย หากคุณอ่านบทความก่อนหน้านี้ คุณสามารถจัดการได้ค่อนข้างดี ดังนั้นคุณจะต้องมี daemons ดังต่อไปนี้:

    • nfsd - การให้บริการโปรโตคอลโดยตรง
      เอ็นเอฟเอส;
    • mountd - การดำเนินการเมานต์การบริการ
    • rpc.portmap - ภูตพอร์ต RPC; จำเป็นเนื่องจากการร้องขอไปยังเซิร์ฟเวอร์ NFS จะถูกส่งในรูปแบบของแพ็กเก็ต
      อาร์พีซี;

    วิธีการทำเช่นนี้? ง่ายมาก - ไปที่ไฟล์ “/etc/rc.d/rc.inet2” และยกเลิกการใส่เครื่องหมายข้อคิดเห็นในบรรทัดที่เกี่ยวข้อง ทุกอย่างถือว่าการเปิดตัวครั้งแรกเสร็จสมบูรณ์แล้ว การตั้งค่าทั้งหมดจะยากขึ้นเล็กน้อย...
    สิ่งแรกที่ต้องตัดสินใจคือใครมีสิทธิ์อะไรเกี่ยวกับข้อมูลนี้หรือข้อมูลนั้น ซึ่งกำหนดค่าผ่านไฟล์ /etc/exports มีสิทธิ์ "อ่าน" และ "อ่าน-เขียน" วิธีการตั้งค่านี้มีอธิบายอยู่ใน "พื้นฐาน"
    เอ็นเอฟเอส".

    แน่นอนว่าประการที่สองคือภาระบนเซิร์ฟเวอร์เช่น จำนวนผู้ใช้งานและคำขอโดยประมาณของพวกเขา คำขอไปยังเซิร์ฟเวอร์ NFS มักจะแบ่งออกเป็นสองประเภท ประเภทแรกคือเมื่อไคลเอ็นต์ทำงานกับแอ็ตทริบิวต์ ประเภทที่สองคือเมื่อไคลเอ็นต์ร้องขอข้อมูลโดยตรง คำขอประเภทแรกกำลังค้นหาไฟล์ อ่านรายการสิทธิ์ ฯลฯ แน่นอนว่าคุณเข้าใจว่าคำขอเหล่านี้โหลดเครือข่ายเพียงเล็กน้อย คำขอประเภทที่สองคือการถ่ายโอนและรับเนื้อหาไฟล์โดยตรงจากไคลเอนต์ และนี่คือที่มาของคำถาม: “จะถ่ายทอดอะไรและบ่อยแค่ไหน?” สิ่งนี้มีความเกี่ยวข้องอย่างยิ่งหากคุณมีเครือข่าย 10 Mbit/s (พูดง่ายๆ ก็คือเครือข่ายรัสเซียมาตรฐาน) ถ้าคุณรู้ 10 Mbit/s นั้นมากกว่า 1 MB ต่อวินาทีเล็กน้อย โดยปกติแล้ว หากมีการถ่ายโอนไฟล์ขนาดสิบเมกะไบต์อย่างต่อเนื่อง เครือข่ายก็จะเสียหาย หากเป็นสถานการณ์ของคุณ คุณจะต้องติดตั้งการแคชข้อมูลบนเครื่องไคลเอนต์ (biod daemon) จากนั้น เมื่อร้องขอไฟล์และเข้าถึงอีกครั้ง ไคลเอนต์จะไม่ "ดาวน์โหลด" มันอีกครั้งจากเซิร์ฟเวอร์ แต่จะนำมันมาจากแคช พร้อมกันนี้จะมีการตรวจสอบเป็นประจำว่าไฟล์บนเซิร์ฟเวอร์มีการเปลี่ยนแปลงหรือไม่ และหากตรวจพบข้อเท็จจริงของการเปลี่ยนแปลง ไฟล์ในแคชจะถูกแทนที่ด้วย "เวอร์ชันใหม่"
    (ตามที่คุณเข้าใจ การตรวจสอบว่า "มีการเปลี่ยนแปลงไฟล์" คือการค้นหา "ตามแอตทริบิวต์" ซึ่งมักจะมีขนาดเล็กกว่าไฟล์หลายร้อยเท่า)

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

    แทนที่จะได้ข้อสรุป:

    หากคุณประสบปัญหาในการจัดการแลกเปลี่ยนข้อมูลบนเครือข่าย อย่าลังเลที่จะเลือก NFS - NFS สูงกว่าสามหัว
    FTP อยู่เหนือ "ลูกโป่ง" ของ Windows และติดตั้งได้ไม่ยาก...

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

    ลองใช้ Ubuntu 12.04 เป็นเซิร์ฟเวอร์
    เราจะใช้และทดสอบ Centos และ Winows 7 ในฐานะลูกค้า

    เซิร์ฟเวอร์หลัก: 192.168.2.213 (Ubuntu)

    ลูกค้า: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

    การตั้งค่าเซิร์ฟเวอร์

    ก่อนอื่นคุณต้องกำหนดค่าเซิร์ฟเวอร์ เนื่องจากเราจะใช้ Ubuntu เป็นเซิร์ฟเวอร์ เราจึงต้องติดตั้งแพ็คเกจที่เหมาะสม

    Root@ubuntu:~# apt-get ติดตั้ง nfs-kernel-server

    หลังจากติดตั้งแพ็คเกจที่จำเป็นแล้ว เราได้สร้างไฟล์คอนฟิกูเรชันขึ้นมาสองไฟล์ จากบันทึกการติดตั้ง:

    ... การสร้างไฟล์ปรับแต่ง /etc/idmapd.conf ด้วยเวอร์ชันใหม่ การสร้างไฟล์ปรับแต่ง /etc/default/nfs-common ด้วยเวอร์ชันใหม่ ...

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

    Root@ubuntu:~# cat /etc/idmapd.conf Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # ตั้งค่าโดเมนของคุณเองที่นี่ หาก id แตกต่างจาก FQDN ลบชื่อโฮสต์ # Domain = localdomainไม่มีใคร-ผู้ใช้ = ไม่มีใครไม่มีใครกลุ่ม = ไม่มีกลุ่ม

    ดังที่เราทราบใน Linux แต่ละไฟล์เป็นของผู้ใช้เฉพาะซึ่งมี UID, GID เป็นของตัวเอง แต่ในระบบ Windows รูปแบบจะแตกต่างกันเล็กน้อย และในเรื่องนี้ได้มีการคิดค้นกลไกการทำแผนที่ซึ่งแปลผู้ใช้ที่แตกต่างกันจากระบบปฏิบัติการที่แตกต่างกันไปเป็นรูปแบบที่เข้าใจได้สำหรับระบบไฟล์ Linux
    ไฟล์ที่สองจำเป็นสำหรับกำหนดค่าการตรวจสอบสิทธิ์ Kerberos และกำหนดค่าพอร์ตที่ไม่ได้มาตรฐานซึ่ง daemon จะรับฟัง เรายังไม่ต้องการเขา เราจะกล่าวถึงการตั้งค่า Kerberos ในบทความถัดไป

    Root@ubuntu:~# cat /etc/default/nfs-common # หากคุณไม่ได้ตั้งค่าสำหรับตัวเลือก NEED_ พวกเขาจะพยายาม # ตรวจจับอัตโนมัติ นี่ควรจะเพียงพอสำหรับคนส่วนใหญ่ ทางเลือกที่ถูกต้อง # สำหรับตัวเลือก NEED_ คือ "ใช่" และ "ไม่" # คุณต้องการเริ่มต้น statd daemon หรือไม่? ไม่จำเป็นสำหรับ NFSv4 NEED_STATD= # ตัวเลือกสำหรับ rpc.statd # rpc.statd ควรฟังบนพอร์ตเฉพาะหรือไม่ สิ่งนี้มีประโยชน์อย่างยิ่ง # เมื่อคุณมีไฟร์วอลล์แบบพอร์ต หากต้องการใช้พอร์ตคงที่ ให้ตั้งค่าตัวแปร # นี้ให้เป็นอาร์กิวเมนต์ statd เช่น: "--port 4000 --outgoing-port 4001" # สำหรับข้อมูลเพิ่มเติม โปรดดูที่ rpc.statd(8) หรือ http://wiki.debian.org/SecuringNFS STATDOPTS= # คุณต้องการเริ่ม gssd daemon หรือไม่ จำเป็นสำหรับการเมาท์ Kerberos NEED_GSSD=

    ตอนนี้เรามาดำเนินการตั้งค่าต่อ
    ไดเร็กทอรีทั้งหมดสำหรับการแชร์ต้องลงทะเบียนในไฟล์ /etc/exports ขั้นแรก เรามาสร้าง 2 โฟลเดอร์ในโฮมไดเร็กตอรี่แล้ววางไฟล์ลงไป แผนผังไดเร็กทอรีและไฟล์สำหรับการส่งออก:

    Root@ubuntu:~# tree /home/alex/ /home/alex/ ├── nfs_dir1 │ ├── file1_dir1 │ ├── file2_dir1 │ └── file3_dir1 ├── nfs_dir2 ├─ ─ file1_dir2 ├── file2_dir2 └─ ─ file3_dir2

    ตอนนี้คุณต้องกำหนดผู้ใช้และกลุ่มสำหรับไดเร็กทอรีเหล่านี้ (นำมาจากไฟล์ /etc/idmapd.conf)

    Root@ubuntu:~# chown –R none:nogroup nfs_dir1/ root@ubuntu:~# chown –R none:nogroup nfs_dir2/

    ขั้นแรก ให้ส่งออกไดเร็กทอรี nfs_dir1 สำหรับ IP ที่ระบุ แก้ไขไฟล์ /etc/exprots.

    Root@ubuntu:~# vim /etc/exports # สำหรับโฮสต์เฉพาะ (Windows) /home/alex/nfs_dir1 192.168.2.180(rw,sync,all_squash,no_subtree_check,insecure) # สำหรับโฮสต์ใด ๆ บนซับเน็ต /home/alex /nfs_dir2 192.168 .2.0/24(rw,no_root_squash,ซิงค์,no_subtree_check)

    ต่อไปนี้เป็นชุดตัวเลือกขั้นต่ำเพื่อให้พื้นที่เก็บข้อมูลทำงานอย่างถูกต้องกับ Windows OS

    • /home/อเล็กซ์/nfs_dir1– เส้นทางไปยังโฟลเดอร์ที่ได้รับสิทธิ์การเข้าถึง
    • 192.168.2.180 – IP address ที่ให้สิทธิ์เข้าถึงโฟลเดอร์ (ระบุทั้งเครือข่ายได้ โดยรายการจะมีลักษณะเป็น 192.168.2.0/24)
    • (rw, ซิงค์, all_squash, no_subtree_check)– ชุดตัวเลือก

    ตัวเลือกยอดนิยม:

    • ร.ร–อ่าน/เขียน (สามารถรับค่า ro - อ่านอย่างเดียว)
    • no_root_squash– โดยค่าเริ่มต้น ผู้ใช้รูทบนเครื่องไคลเอนต์จะไม่สามารถเข้าถึงไดเร็กทอรีที่ใช้ร่วมกันของเซิร์ฟเวอร์ ด้วยตัวเลือกนี้ เราจะลบข้อจำกัดนี้ ด้วยเหตุผลด้านความปลอดภัย ไม่ควรทำเช่นนี้
    • ซิงค์– โหมดการเข้าถึงแบบซิงโครนัส (สามารถรับค่าตรงกันข้ามได้ – อะซิงโครนัส);
    • ไม่มีการเข้าถึง– ปฏิเสธการเข้าถึงไดเร็กทอรีที่ระบุ อาจมีประโยชน์หากก่อนหน้านี้คุณตั้งค่าการเข้าถึงสำหรับผู้ใช้เครือข่ายทั้งหมดไปยังไดเร็กทอรีบางรายการ และตอนนี้คุณต้องการจำกัดการเข้าถึงไดเร็กทอรีย่อยเฉพาะผู้ใช้บางรายเท่านั้น
    • all_squash– บอกเป็นนัยว่าการเชื่อมต่อทั้งหมดจะทำจากผู้ใช้ที่ไม่ระบุชื่อ (จำเป็นสำหรับไคลเอนต์ Windows)
    • ไม่ระบุ= 1,000 – เชื่อมโยงผู้ใช้ที่ไม่ระบุชื่อกับผู้ใช้ “ท้องถิ่น”
    • อนงค์ิด= 1,000 – ผูกผู้ใช้ที่ไม่ระบุชื่อเข้ากับกลุ่มผู้ใช้ "ท้องถิ่น"
    • no_subtree_check (subtree_check)–หากมีการส่งออกไดเรกทอรีย่อยของระบบไฟล์ แต่ไม่ใช่ทั้งระบบไฟล์ เซิร์ฟเวอร์จะตรวจสอบว่าไฟล์ที่ร้องขอนั้นอยู่ในไดเรกทอรีย่อยที่ส่งออกหรือไม่ การปิดใช้งานการยืนยันจะลดความปลอดภัยแต่จะเพิ่มความเร็วการถ่ายโอนข้อมูล
    • โดยทั่วไปแล้ว Linux (และระบบปฏิบัติการที่คล้าย Unix อื่นๆ) จะสำรองพอร์ต TCP และ UDP ตั้งแต่ 1-1023 (เรียกว่าพอร์ตที่ปลอดภัย) เพื่อใช้งานโดยกระบวนการผู้ใช้รูท เพื่อให้แน่ใจว่ารูทเริ่มต้นการเชื่อมต่อระยะไกล NFS โดยทั่วไปเซิร์ฟเวอร์ NFS ต้องใช้ไคลเอ็นต์ระยะไกลเพื่อใช้พอร์ตที่ปลอดภัย อย่างไรก็ตาม ระบบปฏิบัติการบางระบบไม่ปฏิบัติตามแบบแผนนี้ (เช่น Windows) ในกรณีเช่นนี้ตัวเลือก ไม่ปลอดภัยอนุญาตให้ไคลเอ็นต์ NFS ใช้พอร์ต TCP/UDP ใดก็ได้ โดยปกติแล้วจะจำเป็นเมื่อให้บริการไคลเอนต์ Windows

    ตัวเลือกและไวยากรณ์ที่มีทั้งหมดสำหรับการเขียนโฮสต์ กลุ่มโฮสต์ ฯลฯ คุณสามารถอ่านได้ในคู่มือ

    รูท@ubuntu:~#exportfs –a

    ตอนนี้เรามาตรวจสอบสิ่งที่เราส่งออกไป

    Root@ubuntu:~# Exportfs -v /home/alex/nfs_dir1 192.168.2.180(rw,wdelay,all_squash,no_subtree_check,ไม่ปลอดภัย) /home/alex/nfs_dir2 192.168.2.0/24(rw,wdelay,no_root_squash,no_subtree_check)

    เซิร์ฟเวอร์ได้รับการกำหนดค่าแล้ว

    การตั้งค่าลูกค้า

    การตั้งค่าไคลเอนต์ Windows

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


    รูปที่ 1

    ต่อไปคุณจะต้องเมานต์ดิสก์ ในการดำเนินการนี้คุณสามารถใช้บรรทัดคำสั่งหรือเพียงคลิก คลิกขวาที่ My Computer และเลือก Map Network Drive- และ เข้าบรรทัด \\192.168.2.213\home\alex\nfs_dir1- นี่คือ IP ของเซิร์ฟเวอร์และเส้นทางไปยังโฟลเดอร์ (รูปที่ 2)


    รูปที่ 2

    หากทุกอย่างเรียบร้อยเราจะเห็นดิสก์ (รูปที่ 3)


    รูปที่ 3

    สามารถทำได้โดยใช้บรรทัดคำสั่ง (รูปที่ 4)


    รูปที่ 4

    ข้อผิดพลาดที่เป็นไปได้:

    คุณจะไม่สามารถเชื่อมต่อไดรฟ์เครือข่าย NFS กับ Windows OS (รูปที่ 5) ได้หาก
    1. ไม่ได้ติดตั้งไคลเอนต์ NFS
    2. เปิดใช้งานไฟร์วอลล์ (ไม่ได้กำหนดค่า)
    3. ไม่มีการเข้าถึงเครือข่ายไปยังเซิร์ฟเวอร์
    4. ป้อนพารามิเตอร์การเมานต์ไม่ถูกต้อง
    5. ไม่ได้กำหนดค่าการส่งออก (ไม่ได้ใช้การตั้งค่า) บนเซิร์ฟเวอร์
    6. เพิ่มตัวเลือกที่ไม่ปลอดภัยในการตั้งค่าการส่งออก


    รูปที่ 5 – เกิดข้อผิดพลาดในการเชื่อมต่อไดรฟ์เครือข่าย NFS

    คุณจะไม่สามารถเพิ่มไฟล์ลงในระบบไฟล์ที่เมาท์ได้ (รูปที่ 6) หาก:
    1. ไม่ได้ตั้งค่าการอนุญาตโฟลเดอร์บนเซิร์ฟเวอร์ (nobody:nogroup)
    2. ตัวเลือก all_squash ไม่ได้ถูกตั้งค่าไว้ในการตั้งค่าการส่งออก
    3. ตัวเลือก rw ไม่ได้ถูกตั้งค่าไว้ในการตั้งค่าการส่งออก


    รูปที่ 6 – ข้อผิดพลาดเมื่อเพิ่มไฟล์ลงในดิสก์ NFS

    การตั้งค่าไคลเอ็นต์ Centos

    การตั้งค่าระบบ Linux ค่อนข้างง่ายและไม่ยุ่งยาก คุณเพียงแค่ต้องติดตั้งแพ็คเกจที่จำเป็นและติดตั้งดิสก์ Centos ต้องการแพ็คเกจดังต่อไปนี้

    # yum ติดตั้ง nfs-utils nfs-utils-lib

    # mkdir -p /mnt/nfs # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/nfs # mount /dev/mapper/vg_slave-lv_root บน / พิมพ์ ext4 (rw) proc บน /proc ประเภท proc (rw) sysfs บน /sys ประเภท sysfs (rw) devpts บน /dev/pts ประเภท devpts (rw,gid=5,mode=620) tmpfs บน /dev/shm ประเภท tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0" ) /dev/sda1 บน /boot ประเภท ext4 (rw) ไม่มีบน /proc/sys/fs/binfmt_misc ประเภท binfmt_misc (rw) sunrpc บน /var/lib/nfs/rpc_pipefs ประเภท rpc_pipefs (rw) 192.168.2.213:/home/ alex/nfs_dir1 บน /mnt/nfs พิมพ์ nfs (rw,vers=4,addr=192.168.2.213,clientaddr=192.168.2.72)

    ในกรณีนี้ เราสามารถเพิ่มไฟล์และไดเร็กทอรีใดๆ ลงในโฟลเดอร์ nfs_dir1 ที่เมาท์ในนามของผู้ใช้ใดๆ บนระบบ ( all_squash- แต่ถ้าเราเมานต์โฟลเดอร์ที่สอง nfs_dir2 มีเพียงรูทเท่านั้นที่สามารถเขียนลงไปได้เนื่องจากมีตัวเลือกอยู่ที่นั่น no_root_squash- มาตรวจสอบกัน

    # mkdir /mnt/dir1 # mkdir /mnt/dir2 # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/dir1 # mount 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 หรือ # mount -t nfs4 -o rw,hard,intr,bg 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 # echo "Hello" > /mnt/dir1/file1 # echo "Hello" > /mnt/dir2/file1 # su alex $ echo "Hello" > /mnt/dir1/file1 $ echo "Hello" > /mnt/dir2/file1 bash: /mnt/dir2/file1: การอนุญาตถูกปฏิเสธ

    ธงติดที่เป็นไปได้

    ธง คำอธิบาย
    ร.ร ติดตั้งระบบไฟล์สำหรับการอ่าน/เขียน (เซิร์ฟเวอร์จะต้องส่งออกในโหมดอ่าน/เขียน)
    ไทย การติดตั้งระบบไฟล์แบบอ่านอย่างเดียว
    บีจี หากไม่สามารถเมานต์ระบบไฟล์ได้ (เซิร์ฟเวอร์ไม่ตอบสนอง) คุณควรย้ายการดำเนินการไปที่พื้นหลังและดำเนินการประมวลผลคำขอเมานต์อื่น ๆ ต่อไป
    แข็ง หากเซิร์ฟเวอร์ล่ม การดำเนินการที่พยายามเข้าถึงจะถูกบล็อกจนกว่าเซิร์ฟเวอร์จะกลับมาออนไลน์อีกครั้ง
    อ่อนนุ่ม หากเซิร์ฟเวอร์ล่ม การดำเนินการที่พยายามเข้าถึงจะล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาด แฟล็กนี้มีประโยชน์ในการตั้งค่าเพื่อป้องกันไม่ให้กระบวนการหยุดทำงานในกรณีที่การติดตั้งระบบไฟล์ที่ไม่สำคัญไม่สำเร็จ
    ภายใน ช่วยให้คุณสามารถขัดจังหวะการทำงานที่ถูกบล็อกจากแป้นพิมพ์ (ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น)
    นนทร ไม่อนุญาตให้คุณขัดจังหวะการทำงานที่ถูกบล็อกจากแป้นพิมพ์
    รีทรานส์=n ระบุจำนวนครั้งที่ต้องทำซ้ำคำร้องขอก่อนที่จะส่งคืนข้อความแสดงข้อผิดพลาด (สำหรับระบบไฟล์ที่เมาท์ด้วยแฟล็กซอฟต์)
    เวลา=n ตั้งค่าช่วงเวลาหมดเวลาสำหรับคำขอ (ในหน่วยสิบของวินาที)
    rsize=n ตั้งค่าขนาดบัฟเฟอร์การอ่านเป็น n ไบต์
    wsize=fl ตั้งค่าขนาดบัฟเฟอร์การเขียนเป็น n ไบต์
    วินาที=โหมด ตั้งค่าโหมดความปลอดภัย
    เวิร์ส=น ตั้งค่าเวอร์ชันโปรโตคอล NFS
    โปรโต = โปรโตคอล เลือกโปรโตคอลการขนส่ง ควรเป็นโปรโตคอล TCP สำหรับ NVS เวอร์ชัน 4

    คุณยังสามารถตรวจสอบจากคอนโซลได้ว่าเซิร์ฟเวอร์ส่งออกระบบไฟล์อย่างถูกต้องหรือไม่

    Root@centos ~# showmount -e 192.168.2.213 รายการส่งออกสำหรับ 192.168.2.213: /home/alex/nfs_dir2 192.168.2.0/24 /home/alex/nfs_dir1 192.168.2.180

    การเพิ่มการเมานต์เพื่อเริ่มต้น

    # cat /etc/fstab ... 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 nfs4 rw,bg,intr,hard,nodev,nosuid 0 0

    Root@centos ~# mount -a -t nfs4

    ข้อผิดพลาดที่เป็นไปได้

    Root@centos ~# mount -a -t nfs4 mount.nfs4: จุดเมานต์ /mnt/dir2 ไม่มีอยู่ root@centos ~# mount -a -t nfs4 mount.nfs4: การแชร์ระยะไกลไม่อยู่ในรูปแบบ "host:dir"

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

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

    บทความนี้จะครอบคลุมถึงการติดตั้ง nfs บน Ubuntu 16.04 เราจะดูการติดตั้งส่วนประกอบที่จำเป็นทั้งหมด การตั้งค่าโฟลเดอร์แชร์ และการเชื่อมต่อโฟลเดอร์เครือข่าย

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

    การติดตั้งคอมโพเนนต์ NFS

    ก่อนที่เราจะสามารถทำงานกับ NFS ได้ เราจะต้องติดตั้งหลายโปรแกรมก่อน บนเครื่องที่จะเป็นเซิร์ฟเวอร์ คุณต้องติดตั้งแพ็คเกจ nfs-kernel-server ซึ่งจะใช้ในการเปิดการแชร์ nfs ใน Ubuntu 16.04 เมื่อต้องการทำเช่นนี้ ให้รัน:

    sudo apt ติดตั้ง nfs-kernel-server

    ตอนนี้เรามาตรวจสอบว่าเซิร์ฟเวอร์ได้รับการติดตั้งอย่างถูกต้องหรือไม่ บริการ NFS จะรับฟังการเชื่อมต่อสำหรับทั้ง TCP และ UDP บนพอร์ต 2049 คุณสามารถดูว่าพอร์ตเหล่านี้ใช้งานอยู่จริงหรือไม่โดยใช้คำสั่ง:

    rpcinfo -p | grep nfs

    สิ่งสำคัญคือต้องตรวจสอบว่ารองรับ NFS ในระดับเคอร์เนลหรือไม่:

    cat /proc/ระบบไฟล์ | grep nfs

    เราเห็นว่ามันใช้งานได้ แต่ถ้าไม่ คุณต้องโหลดโมดูลเคอร์เนล nfs ด้วยตนเอง:

    มาเพิ่ม nfs ในการเริ่มต้นด้วย:

    sudo systemctl เปิดใช้งาน nfs

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

    sudo apt ติดตั้ง nfs-common

    การตั้งค่าเซิร์ฟเวอร์ NFS บน Ubuntu

    เราสามารถเปิดการเข้าถึง NFS ไปยังโฟลเดอร์ใดก็ได้ แต่มาสร้างโฟลเดอร์ใหม่เพื่อจุดประสงค์นี้:

    ลูกค้าโฟลเดอร์_ที่อยู่ (ตัวเลือก)

    ที่อยู่โฟลเดอร์คือโฟลเดอร์ที่ต้องทำให้สามารถเข้าถึงได้ผ่านเครือข่าย ไคลเอนต์ - ที่อยู่ IP หรือที่อยู่เครือข่ายที่สามารถเข้าถึงโฟลเดอร์นี้ แต่ด้วยตัวเลือกต่างๆ มันซับซ้อนกว่าเล็กน้อย ลองดูบางส่วนของพวกเขา:

    • ร.ร- อนุญาตให้อ่านและเขียนในโฟลเดอร์นี้
    • โร- อนุญาตให้อ่านอย่างเดียว
    • ซิงค์- ตอบสนองต่อคำขอถัดไปเฉพาะเมื่อข้อมูลถูกบันทึกลงดิสก์ (ค่าเริ่มต้น)
    • อะซิงโครนัส- อย่าบล็อกการเชื่อมต่อในขณะที่ข้อมูลกำลังเขียนลงดิสก์
    • ปลอดภัย- ใช้เฉพาะพอร์ตที่ต่ำกว่า 1024 ในการเชื่อมต่อ
    • ไม่ปลอดภัย- ใช้พอร์ตใดก็ได้
    • ไม่มีหนัง- อย่าซ่อนไดเรกทอรีย่อยเมื่อเปิดการเข้าถึงหลายไดเรกทอรี
    • root_squash- แทนที่คำขอจากรูทด้วยคำขอที่ไม่ระบุชื่อ
    • all_squash- เปลี่ยนคำขอทั้งหมดโดยไม่ระบุชื่อ
    • ไม่ระบุและ อนงค์ิด- ระบุ uid และ gid สำหรับผู้ใช้ที่ไม่ระบุชื่อ

    ตัวอย่างเช่น สำหรับโฟลเดอร์ของเรา บรรทัดนี้อาจมีลักษณะดังนี้:

    /var/nfs 127.0.0.1(rw,ซิงค์,no_subtree_check)

    เมื่อทุกอย่างได้รับการกำหนดค่าแล้ว สิ่งที่เหลืออยู่คือการอัปเดตตารางการส่งออก NFS:

    sudo ส่งออก fs -a

    เพียงเท่านี้ การเปิดการแชร์ nfs ใน Ubuntu 16.04 ก็เสร็จสมบูรณ์ ตอนนี้เรามาลองกำหนดค่าไคลเอนต์แล้วลองเมานต์

    การเชื่อมต่อ NFS

    เราจะไม่กล่าวถึงปัญหานี้โดยละเอียดในบทความของวันนี้ นี่เป็นหัวข้อที่ค่อนข้างใหญ่ซึ่งสมควรได้รับบทความของตัวเอง แต่ฉันจะยังคงพูดคำสองสามคำ

    หากต้องการเมานต์โฟลเดอร์เครือข่าย คุณไม่จำเป็นต้องมีไคลเอ็นต์ Ubuntu nfs เพียงใช้คำสั่ง mount:

    sudo เมานต์ 127.0.0.1:/var/nfs/ /mnt/

    ตอนนี้คุณสามารถลองสร้างไฟล์ในไดเร็กทอรีที่เชื่อมต่อ:

    เราจะดูระบบไฟล์ที่เมาท์โดยใช้ df:

    127.0.0.1:/var/nfs 30G 6.7G 22G 24% /เดือน

    หากต้องการปิดใช้งานระบบไฟล์นี้ เพียงใช้จำนวนมาตรฐาน:

    sudo umount /mnt/

    ข้อสรุป

    บทความนี้กล่าวถึงการตั้งค่า nfs ubuntu 16.04 อย่างที่คุณเห็นทุกอย่างทำได้ง่ายและโปร่งใส การเชื่อมต่อการแชร์ NFS ทำได้ด้วยการคลิกเพียงไม่กี่ครั้งโดยใช้คำสั่งมาตรฐาน และการเปิดการแชร์ nfs ใน Ubuntu 16.04 นั้นไม่ได้ซับซ้อนกว่าการเชื่อมต่อมากนัก หากคุณมีคำถามใด ๆ เขียนในความคิดเห็น!

    โพสต์ที่เกี่ยวข้อง: