การติดตั้ง Unix Shares กับไคลเอนต์ Windows NFS
Network File System (NFS) เป็นมาตรฐานเปิดสำหรับการกระจายระบบไฟล์ผ่านเครือข่ายสำหรับการเข้าถึงแบบหลายไคลเอนต์ NFS ได้รับการออกแบบในปี 1984 โดยเติบโตขึ้นจนครอบคลุมวิธีการรับรองความถูกต้องหลายวิธีทั้งในระดับการแชร์ (ส่งออก) และระบบไฟล์ รวมถึง IP/ชื่อโฮสต์ไคลเอ็นต์, auth_sys (Unix auth), Kerberos และ NFSv4.x ACL
โพสต์ในบล็อกนี้จะอธิบายวิธีการเมานต์การแบ่งปัน NFS บนไคลเอนต์ Windows
NSF ทำงานอย่างไรกับระบบปฏิบัติการ Windows
แม้ว่าคุณจะคุ้นเคยกับการเข้าถึงการแชร์ไฟล์บนเครือข่ายผ่าน Server Message Block (SMB) หรือการใช้ SMB (CIFS) ของ Windows แต่ NFS ยังคงแพร่หลายในสภาพแวดล้อมการใช้งานจริงที่มีเซิร์ฟเวอร์ Unix
น่าเสียดายที่ NFS เดิมเล่นได้ไม่ดีกับสภาพแวดล้อมที่ผสม Windows กับ Unix: เพื่อให้ไคลเอนต์ Windows เข้าถึงการส่งออก NFS การส่งออก NFS แต่ละรายการจำเป็นต้องมีการแชร์ Samba ที่เทียบเท่ากัน (การใช้งาน SMB สำหรับ Unix)
อย่างไรก็ตาม สิ่งนี้เปลี่ยนไปเมื่อ Microsoft ใช้เครื่องมือไคลเอนต์และเซิร์ฟเวอร์ NFS เอกสาร NFS ของ Microsoft แสดงรายการการสนับสนุนระบบปฏิบัติการต่อไปนี้:
| Operating Systems | NFS Server Versions | NFS Client Versions |
| Windows 7, Windows 8.1 Windows 10 | N/A | NFSv2, NFSv3 |
| Windows Server 2008, Windows Server 2008 R2 | NFSv2, NFSv3 | NFSv2, NFSv3 |
| Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 |
NFSv2, NFSv3, NFSv4.1 | NFSv2, NFSv3 |
วิธีกำหนดค่า Windows เป็นไคลเอ็นต์ NFS
วิชาบังคับก่อน: เปิดใช้งานคุณลักษณะ Windows ที่จำเป็น
ก่อนที่เราจะเมานต์การแบ่งปัน NFS บนไคลเอนต์ Windows เราจำเป็นต้องเปิดใช้งานคุณสมบัติบางอย่างภายใน Windows เพื่อดำเนินการกับไคลเอนต์ NFS คำสั่ง PowerShell ที่จะใช้ขึ้นอยู่กับสภาพแวดล้อมไคลเอนต์ของคุณ:
สำหรับวินโดวส์ 10:
Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestartสำหรับเซิร์ฟเวอร์ Windows:
Install-WindowsFeature NFS-Clientเมานต์การแบ่งปัน NFS (ส่งออก)
ตอนนี้เราจำเป็นต้องเมานต์การส่งออก NFS จากเซิร์ฟเวอร์ Unix อย่างไรก็ตาม Unix และ Windows ใช้กลไกที่แตกต่างกันในการระบุผู้ใช้และกลุ่ม: ในระบบปฏิบัติการที่คล้ายกับ Unix เช่น Linux ผู้ใช้และกลุ่มจะถูกระบุโดยตัวระบุผู้ใช้ (UID) และตัวระบุกลุ่ม (GID) ตามลำดับ ใน Windows ผู้ใช้และกลุ่มจะถูกระบุโดยใช้ตัวระบุความปลอดภัย (SID)
ดังนั้น เพื่อรับรองความถูกต้องของเซิร์ฟเวอร์ Unix ที่ให้บริการส่งออก NFS เราจำเป็นต้องแมปผู้ใช้ Windows กับ Unix UID และ GID ด้วยการแมป UID/GID นี้ เซิร์ฟเวอร์ Unix จะสามารถระบุได้ว่าผู้ใช้รายใดที่สร้างคำขอสำหรับการส่งออก NFS
ต่อไปนี้เป็นสามวิธีที่คุณสามารถใช้เพื่อดำเนินการแมปข้อมูลประจำตัวและเชื่อมต่อการส่งออก NFS
วิธีที่ 1 (แนะนำ) ดำเนินการแมปข้อมูลประจำตัวใน Active Directory (AD)
หากทั้งเซิร์ฟเวอร์ Unix NFS และไคลเอนต์ Windows NFS เข้าร่วมกับโดเมน Active Directory เดียวกัน เราก็สามารถจัดการการจับคู่ข้อมูลประจำตัวใน Active Directory ได้ นี่เป็นวิธีการที่แนะนำเพื่อความปลอดภัยเมื่อเป็นไปได้
หมายเหตุ: วิธีนี้ใช้ไม่ได้หากมีการใช้วิธีที่ 2 (ด้านล่าง) เนื่องจากการมีอยู่ของไฟล์ etcpasswd ในเครื่องจะมีความสำคัญเหนือกว่าสำหรับการแมปข้อมูลประจำตัว
ตามค่าเริ่มต้น ไคลเอนต์ NFS ของเราจะไม่ค้นหาการแมปข้อมูลประจำตัวใน Active Directory อย่างไรก็ตาม เราสามารถเปลี่ยนสิ่งนั้นได้โดยการรันคำสั่งต่อไปนี้ในเซสชัน PowerShell ที่ยกระดับบนไคลเอนต์ NFS:
» Set-NfsMappingStore -EnableADLookup $True -ADDomainName "<your_domain>"ตอนนี้เราสามารถเรียกใช้คำสั่ง Get-NfsMappingStore เพื่อตรวจสอบการแมป UID/GID ของผู้ใช้ Windows ปัจจุบันได้ อย่างที่คุณเห็น ADLookupEnabled ถูกตั้งค่าเป็น True และมีการระบุโดเมนสำหรับ ADDomain
» Get-NfsMappingStoreUNMServer :
UNMLookupEnabled : False
ADDomain : <your_domain>
ADLookupEnabled : True
LdapServer :
LdapNamingContext :
LdapLookupEnabled : False
PasswdFileLookupEnabled : False
ต่อไป เราต้องกำหนดค่าการแมปข้อมูลประจำตัวของเราในผู้ใช้ Active Directory และคอมพิวเตอร์ หากต้องการดูแอตทริบิวต์ uidNumber และ gidNumber สำหรับผู้ใช้แต่ละราย ตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งานคุณลักษณะขั้นสูงไว้ภายใต้เมนูดรอปดาวน์มุมมอง:
จากนั้น คุณจะสามารถดูและแก้ไขฟิลด์เหล่านั้นได้ในเมนูคุณสมบัติของผู้ใช้หรือกลุ่มบนแท็บตัวแก้ไขแอตทริบิวต์:
การแมป UID และ GID ด้วยตนเองสำหรับผู้ใช้ Active Directory จำนวนมากอาจเป็นเรื่องยุ่งยาก เพื่อให้กระบวนการเป็นแบบอัตโนมัติ คุณสามารถใช้คำสั่ง PowerShell ต่อไปนี้เพื่อตั้งค่าแอตทริบิวต์ที่เหมาะสมสำหรับผู้ใช้แต่ละรายที่ต้องการ โดยใช้ไฟล์ CSV พร้อมข้อมูล UID/GID:
Set-ADUser -identity <UserPrincipalName> -add @{uidNumber="<user_unix_uid>";
gidNumber="<user_unix_gid>"}หมายเหตุ: ในคำสั่ง Set-ADUser ควรเปลี่ยน "เพิ่ม" เป็น "แทนที่" หากผู้ใช้มีค่าสำหรับ uidNumber หรือ gidNumber อยู่แล้ว
เมื่อใช้วิธีการนี้ ตอนนี้เราสามารถแมปการแชร์ NFS ใน Windows กับอักษรระบุไดรฟ์ที่มีอยู่ผ่านทางพรอมต์คำสั่ง และ UID/GID จะถูกแมปตามค่าแอตทริบิวต์ uidNumber และ gidNumber ของผู้ใช้ Active Directory ปัจจุบัน
» mount \<nfs_server_ip_address>pathtonfsexport Z:เส้นทางที่อยู่หลัง IP ของเซิร์ฟเวอร์ NFS คือเส้นทางภายในเครื่องไปยังการส่งออก NFS บนเซิร์ฟเวอร์ NFS และอักษรระบุไดรฟ์คืออักษรระบุไดรฟ์ที่มีอยู่บนไคลเอ็นต์ Windows NFS
แน่นอนว่า สิทธิ์ Unix ที่มอบให้กับผู้ใช้ที่เรากำหนดไว้ เพื่อตัดสินใจว่าในที่สุดเราจะเข้าถึงการส่งออกประเภทใด เช่น อ่าน/เขียน หรืออ่านอย่างเดียว
วิธีที่ 2. ทำการแมปข้อมูลประจำตัวโดยใช้ไฟล์ Local etcpasswd
เนื่องจากการใช้ Active Directory เป็นวิธีการที่นิยมใช้ในการแมปข้อมูลประจำตัว เราจึงไม่ลงรายละเอียดสำหรับอีกสองตัวเลือกที่เหลือ อย่างไรก็ตาม ควรระบุโดยย่อว่า Windows สามารถทำการแมปข้อมูลเฉพาะตัวในเครื่องได้โดยใช้ไฟล์ passwd และกลุ่มแบบ Unix ซึ่งอยู่ใน %SYSTEMROOT%system32driversetc
หากมีไฟล์ passwd อยู่และมีข้อมูลการแมปข้อมูลประจำตัวสำหรับผู้ใช้ Windows ปัจจุบัน การแมปที่ระบุในไฟล์ passwd และกลุ่มจะถูกใช้สำหรับคำขอการเมานต์ NFS ของไคลเอ็นต์ แทนที่จะเป็นการแมป UID/GID ใน Active Directory หรือ AnonymousUid/AnonymousGid การตั้งค่ารีจิสทรีของ Windows ตามที่ระบุไว้ด้านล่าง
เมื่อรันคำสั่ง Get-NfsMappingStore PowerShell คุณจะสังเกตเห็นว่า PasswdFileLookupEnabled เป็น True ทุกครั้งที่เวิร์กโฟลว์นี้มีผลกับผู้ใช้ Windows ปัจจุบัน
วิธีการนี้ใช้ไวยากรณ์การเมานต์เดียวกันกับวิธีการแมปข้อมูลประจำตัวของ Active Directory ด้านบน:
» mount \<nfs_server_ip_address>pathtonfsexport Z:วิธีที่ 3 ดำเนินการแมปข้อมูลประจำตัวโดยใช้การตั้งค่ารีจิสทรี Windows AnonymousUid/AnonymousGid
วิธีสุดท้ายถือเป็นแนวทางที่ไม่ปลอดภัยและไม่แนะนำ อาจอนุญาตให้ผู้ใช้ภายในเครื่องเมานต์การส่งออก NFS เป้าหมายด้วยการเข้าถึงแบบอ่าน/เขียน ซึ่งต่างจากการรักษาสิทธิ์ในการเขียนให้กับผู้ใช้ Windows ในเครื่องที่ระบุผ่านวิธีการข้างต้น
หากต้องการแมปไคลเอนต์ Windows ในเครื่องกับ UID และ GID ของผู้ใช้ Unix ที่เป็นเจ้าของการส่งออกที่ต้องการ ให้รันสิ่งต่อไปนี้ใน PowerShell ที่ยกระดับ:
» New-ItemProperty HKLM:SOFTWAREMicrosoftClientForNFSCurrentVersionDefault -Name AnonymousUID -Value <unix_export_owner_uid> -PropertyType "DWord"» New-ItemProperty HKLM:SOFTWAREMicrosoftClientForNFSCurrentVersionDefault -Name AnonymousGID -Value <unix_export_owner_gid> -PropertyType "DWord"หลังจากเพิ่มคีย์เหล่านี้ในรีจิสทรีของ Windows แล้ว คุณจะต้องรีบูตเพื่อให้คีย์เหล่านี้มีผล
จากนั้นใช้คำสั่งต่อไปนี้เพื่อเมานต์การส่งออก NFS ด้วยการเข้าถึงแบบอ่าน/เขียน (สมมติว่า IP ของไคลเอ็นต์มีสิทธิ์เมานต์การส่งออกและการแมป UID/GID ถูกต้องสำหรับการส่งออกแต่ละรายการที่ต้องการ):
» mount -o anon \<nfs_server_ip_address>pathtonfsexport Z:คำถามที่พบบ่อย
Windows 11 รองรับไคลเอนต์ NFS หรือไม่
ใช่.
ฉันจะใช้ NFS ใน Windows ได้อย่างไร
- ให้การเข้าถึงการแชร์ไฟล์เดียวกันโดยใช้ทั้งโปรโตคอล SMB และ NFS โดยใช้เซิร์ฟเวอร์ไฟล์ Windows NFS
- ปรับใช้ระบบปฏิบัติการที่ไม่ใช่ Windows เพื่อให้การแชร์ไฟล์ NFS เข้าถึงได้โดยไคลเอนต์ที่ไม่ใช่ Windows โดยใช้โปรโตคอล NFS
- หากต้องการเปิดใช้งานการย้ายแอปพลิเคชันจากระบบปฏิบัติการหนึ่งไปยังอีกระบบปฏิบัติการหนึ่ง ให้จัดเก็บข้อมูลในการแชร์ไฟล์ที่เข้าถึงได้โดยใช้ทั้งโปรโตคอล SMB และ NFS
การปรับปรุงอะไรบ้างที่รวมอยู่ใน NFS เวอร์ชัน 4.1
- โครงสร้างพื้นฐานการขนส่ง Remote Procedure Call (RPC)/External Data Representation (XDR) ให้การสนับสนุนที่ดีกว่าและให้ความสามารถในการปรับขนาดที่ดีขึ้น
- คุณสมบัติมัลติเพล็กเซอร์พอร์ต RPC
- แคชและพูลเธรดที่ปรับแต่งอัตโนมัติ
- ตัวเลือกการใช้งานความเป็นส่วนตัวและการตรวจสอบสิทธิ์ Kerberos ใหม่
สำหรับรายละเอียดทั้งหมด โปรดไปที่หน้า Microsoft ที่อธิบาย NFS เวอร์ชันทั้งหมด
ฉันจะเพิ่มเซิร์ฟเวอร์สำหรับบริการบทบาทของ NFS ได้อย่างไร
ใน Server Manager หรือ Windows Admin Center ให้ใช้ "Add Roles" และ "Features Wizard"
เซิร์ฟเวอร์สำหรับ NFS มีเครื่องมือการดูแลบรรทัดคำสั่ง Windows ใดบ้าง
- เมานต์ มอบการเมานต์ NFS บนไคลเอนต์ Windows ที่แมปกับไดรฟ์ในเครื่อง
- Nfsadmin จัดการการตั้งค่าการกำหนดค่าของเซิร์ฟเวอร์สำหรับ NFS และไคลเอนต์สำหรับส่วนประกอบ NFS
- Nfsshare ตั้งค่าการตั้งค่าการแชร์ NFS สำหรับโฟลเดอร์ที่แชร์ผ่านเซิร์ฟเวอร์สำหรับ NFS
- Nfsstat แสดงหรือรีเซ็ตสถิติการโทรที่ได้รับจากเซิร์ฟเวอร์สำหรับ NFS
- Showmount แสดงรายการระบบไฟล์ที่เซิร์ฟเวอร์ส่งออกสำหรับ NFS
ไดรฟ์ที่ติดตั้ง NFS จะถูกยกเลิกการต่อเชื่อมโดยใช้ Umount

