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

การติดตั้ง 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-NfsMappingStore
UNMServer               :

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

บทความที่เกี่ยวข้อง