Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

โปรโตคอล FTP เป็นหนึ่งในโปรโตคอลที่เก่าแก่ที่สุด (มากกว่า 40 ปี) แต่ยังคงใช้กันอย่างกว้างขวางในสถานการณ์ที่ต้องการโปรโตคอลโอนไฟล์ที่เรียบง่าย สามารถติดตั้งเซิร์ฟเวอร์ FTP บนเวอร์ชันใดก็ได้ของระบบปฏิบัติการ Microsoft การปรับปรุงครั้งล่าสุดของบริการ FTP เกิดขึ้นใน Windows 7 / Server 2008 R2 (โดยโค้ดบริการถูกเขียนใหม่เกือบทั้งหมด) ความปลอดภัยของบริการได้รับการปรับปรุงอย่างมีนัยสำคัญ และมีคุณสมบัติใหม่หลายอย่างเพิ่มเข้ามา โดยเฉพาะเซิร์ฟเวอร์ FTP บน Windows อนุญาตให้กำหนดค่า การแยกผู้ใช้ FTP (FTP User Isolation) ซึ่งช่วยจำกัดการเข้าถึงของผู้ใช้จำนวนมากให้เข้าถึงได้เฉพาะโฟลเดอร์ของตนเองบนเซิร์ฟเวอร์ FTP เดียวกัน

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

เช่นเดียวกับเวอร์ชัน Windows ก่อนหน้า บริการ FTP ใน Windows Server 2016 / 2012 R2 (อย่าสับสนกับ sFTP และ TFTP) ยังคงพัฒนาและผสานรวมอย่างลึกซึ้งกับบริการ IIS และมีอินเทอร์เฟซการจัดการการบริหารจัดการร่วมกัน

ในบทความนี้เราจะแสดง วิธีติดตั้งเซิร์ฟเวอร์ FTP ที่พัฒนาบน IIS บน Windows Server 2016/2012 R2 และกำหนดค่าการแยกผู้ใช้ FTP (คู่มือนี้ใช้ได้กับ Windows 10 และ 8.1 ด้วย)

วิธีติดตั้งบทบาทเซิร์ฟเวอร์ FTP บน Windows Server 2016/2012 R2

คุณสามารถติดตั้งบริการ FTP โดยใช้คอนโซล Server Manager โดยติ๊กเลือกตัวเลือก FTP Service และ FTP Extensibility ในส่วน Web Server (IIS) -> FTP Server

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

นอกจากนี้ยังสามารถติดตั้งบทบาทเซิร์ฟเวอร์ FTP ด้วยคำสั่ง PowerShell เพียงคำสั่งเดียว:
Install-WindowsFeature Web-FTP-Server
การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

เพื่อติดตั้งคอนโซลการจัดการเซิร์ฟเวอร์ FTP ให้รันคำสั่งต่อไปนี้:

Install-WindowsFeature -Name "Web-Mgmt-Console"

การสร้างไซต์ FTP และการจัดการสิทธิ์ผู้ใช้ FTP

เปิด Server Manager และเปิดคอนโซลการจัดการ IIS (Internet Information Service Manager)

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

สร้างไซต์ FTP ใหม่ (Sites -> Add FTP Site)

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

ชื่อไซต์ FTP: MyTestSite

ไดเรกทอรีรากของไซต์ FTP: C:\inetpub\ftproot

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

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

คุณสามารถจัดการไซต์ FTP โดยใช้โมดูล PowerShell WebAdministration ตัวอย่างเช่น เพื่อสร้างไซต์ FTP ใหม่ ให้รันคำสั่งต่อไปนี้:

Import-Module WebAdministration
# กำหนดชื่อไซต์ FTP
$FTPSiteName = 'CORP_FTP'
#โฟลเดอร์ FTP
$FTPRoot = 'D:\www\FTPRoot'
#พอร์ต FTP
$FTPPort = 21
New-WebFtpSite -Name $FTPSiteName -PhysicalPath $FTPRoot -Port $FTPPort

เลือกไซต์ FTP ใหม่และปิดใช้งาน Anonymous Authentication ในส่วน FTP Authentication Basic Authentication ต้องเปิดใช้งาน

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

บริการ FTP บน Windows Server 2016/2012 R2 สามารถใช้บัญชี 2 ประเภท ได้แก่ โดเมนหรือบัญชีท้องถิ่น ขึ้นอยู่กับประเภทบัญชี จะมีความแตกต่างบางอย่างในโครงสร้างไดเรกทอรี FTP และการตั้งค่าการแยกผู้ใช้ เพื่อความเข้าใจง่าย เราจะใช้บัญชี Windows ท้องถิ่น

สร้างผู้ใช้ FTP บางส่วน สมมติว่าเป็น ftp_user1, ftp_user2 และ ftp_user3 นอกจากนี้สร้างกลุ่ม ftp_users ซึ่งรวมผู้ใช้เหล่านี้ไว้ด้วย สามารถสร้างผู้ใช้ท้องถิ่นในส่วน Local Users and Groups ของคอนโซล Computer Management

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

คุณยังสามารถสร้างผู้ใช้และกลุ่มท้องถิ่นจากพรอมต์คำสั่ง (หรือใช้ PowerShell) สร้างกลุ่มท้องถิ่น:
net localgroup ftp_users /add
การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

สร้างผู้ใช้ท้องถิ่นใหม่:
net user ftp_user1 /add *
การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

เพิ่มผู้ใช้เข้ากลุ่ม:
net localgroup ftp_users ftp_user1 /add
การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

สร้างผู้ใช้อีก 2 คนด้วยวิธีเดียวกัน

กำหนดสิทธิ์ Read&Write บนไดเรกทอรี C:\inetpub\ftproot ให้กับกลุ่ม ftp_users

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

สร้างไดเรกทอรีชื่อ LocalUser (ชื่อต้องเหมือนกัน สิ่งนี้สำคัญมาก!!!) ในโฟลเดอร์ C:\inetpub\ftproot จากนั้นสร้างไดเรกทอรี 3 โฟลเดอร์ภายใต้ชื่อ ftp_user1, ftp_user2, ftp_user3 ในโฟลเดอร์ C:\inetpub\ftproot\LocalUser

หมายเหตุ. ขึ้นอยู่กับประเภทบัญชี คุณต้องสร้างโครงสร้างไดเรกทอรีดังต่อไปนี้ (ภายใต้ %FtpRoot%\ หมายถึงรากของไซต์ FTP; ในกรณีนี้คือ C:\inetpub\ftproot\):

ประเภทบัญชี ไวยากรณ์การตั้งชื่อไดเรกทอรี Home
ผู้ใช้นิรนาม %FtpRoot%\LocalUser\Public
บัญชี Windows ท้องถิ่น %FtpRoot%\LocalUser\%UserName%
บัญชี Windows โดเมน %FtpRoot%\%UserDomain%\%UserName%
บัญชี IIS Manager หรือ ASP.NET พิเศษ %FtpRoot%\LocalUser\%UserName%

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

กลับไปที่คอนโซล IIS และสร้างกฎใหม่ (Add AllowRules) ในส่วน FTP Authorization Rules ของไซต์ ระบุว่ากลุ่ม ftp_users ต้องมีสิทธิ์อ่านและเขียน

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

วิธีกำหนดค่าการแยกผู้ใช้ FTP บน Windows Server 2016/2012 R2

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

เปิด FTP User Isolation ในการตั้งค่าไซต์ FTP

ส่วนนี้มีหลายการตั้งค่า 2 ตัวแรกไม่ได้แนะนำการแยกผู้ใช้:

  1. FTP root directory (เซสชัน FTP ของผู้ใช้เริ่มต้นที่ไดเรกทอรีรากของไซต์ FTP);
  2. User name directory (ผู้ใช้เริ่มต้นกับไดเรกทอรีฟิสิกัล/เวิร์ชวลที่มีชื่อผู้ใช้ หากไม่มีไดเรกทอรี เซสชันจะเริ่มที่ไดเรกทอรีราก FTP ของไซต์)

อีก 3 ตัวเลือกต่อไปนี้คือโหมดการแยกผู้ใช้ที่แตกต่างกัน:

  • User name directory (disable global virtual directories) ระบุว่าเซสชัน FTP ของผู้ใช้จะถูกแยกในไดเรกทอรีฟิสิกัล/เวิร์ชวลที่มีชื่อเดียวกับผู้ใช้ FTP ผู้ใช้เห็นเฉพาะไดเรกทอรีของตนเอง (เป็นราก FTP ของพวกเขา) และไม่สามารถออกไปข้างนอกได้ (ไปยังไดเรกทอรีบนของต้นไม้ FTP) ไดเรกทอรีเวิร์ชวลระดับโลกจะถูกละเลย;
  • User name physical directory (enable global virtual directories) ระบุว่าเซสชัน FTP ของผู้ใช้จะถูกแยกในไดเรกทอรีฟิสิกัลที่มีชื่อเดียวกับชื่อบัญชีผู้ใช้ FTP ผู้ใช้ไม่สามารถขึ้นไปเหนือไดเรกทอรีของตนได้ อย่างไรก็ตาม ไดเรกทอรีเวิร์ชวลระดับโลกที่สร้างขึ้นทั้งหมดจะพร้อมใช้งานสำหรับผู้ใช้;
  • FTP home directory configured in Active Directory – ผู้ใช้ FTP จะถูกแยกภายในไดเรกทอรีบ้านที่ระบุในการตั้งค่าบัญชี Active Directory ของเขา (คุณสมบัติ FTPRoot และ FTPDir)

สำคัญ. หากไดเรกทอรีเวิร์ชวลระดับโลกทำงานอยู่ ผู้ใช้ทุกคนสามารถเข้าถึงไดเรกทอรีเวิร์ชวลระดับโลกทั้งหมดที่ตั้งค่าไว้ในรากของไซต์ FTP ได้ (หากมีสิทธิ์ NTFS ที่เหมาะสม)

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

เลือกโหมดการแยกที่ต้องการ (ผมใช้ตัวเลือกที่ 2 เพื่อแยกผู้ใช้ FTP)

ควรรีสตาร์ทบริการ Microsoft FTP (FTPSVC) เมื่อมีการเปลี่ยนแปลงการตั้งค่าไซต์ FTP

การกำหนดค่ากฎไฟร์วอลล์ Windows เพื่อเข้าถึงเซิร์ฟเวอร์ FTP

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

สำหรับการทำงานของ FTP ในโหมด Passive อย่างถูกต้อง ผู้ใช้ต้องเชื่อมต่อกับช่วงพอร์ต RPC (1025-65535) เพื่อไม่ให้ต้องเปิดพอร์ตทั้งหมดบนไฟร์วอลล์ภายนอก คุณสามารถจำกัดช่วงพอร์ต TCP แบบไดนามิกที่ใช้สำหรับการส่งข้อมูล FTP ได้

  1. เปิดส่วน FTP Firewall Support ในการตั้งค่าไซต์ FTP และในฟิลด์ Data Channel Port Range ระบุช่วงพอร์ตที่คุณต้องการใช้สำหรับการเชื่อมต่อ FTP ตัวอย่างเช่น 50000-50100;การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2
  2. บันทึกการเปลี่ยนแปลงและรีสตาร์ท IIS (iisreset);
  3. เปิด Control Panel ของ Windows และไปที่ Control Panel\System and Security\Windows Firewall\Allowed apps;
  4. ตรวจสอบว่ารายการแอปพลิเคชันที่ได้รับอนุญาตให้เข้าผ่านไฟร์วอลล์มีสิทธิ์สำหรับบทบาท FTP Serverการตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

จากนั้นตรวจสอบว่ากฎต่อไปนี้เปิดใช้งานในการตั้งค่า Windows Firewall with Advanced Security:

  • FTP Server (FTP Traffic-In) – โปรโตคอล TCP, พอร์ต 21;
  • FTP Server Passive (FTP Passive Traffic-In) – พอร์ตท้องถิ่น 1024-65535 (50000-50100 ในกรณีของเรา);
  • FTP Server Secure (FTP SSL Traffic-In) – พอร์ต 990 (เมื่อใช้ FTP พร้อม SSL);
  • FTP Server (FTP Traffic-Out) – พอร์ต 20;
  • FTP Server Secure (FTP SSL Traffic-Out) – พอร์ต 989 (เมื่อใช้ FTP พร้อม SSL).

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

ตามนั้น พอร์ตเหล่านี้ต้องเปิดบนเราเตอร์ (เกตเวย์, ไฟร์วอลล์) เพื่อให้ผู้ใช้ FTP ภายนอกสามารถเชื่อมต่อกับไซต์ของคุณได้

การทดสอบการเชื่อมต่อเซิร์ฟเวอร์ FTP จาก Windows

คุณสามารถตรวจสอบความพร้อมใช้งานพอร์ตบนเซิร์ฟเวอร์ FTP โดยใช้ cmdlet Test-NetConnection:

Test-NetConnection -ComputerName yourftpservername -Port 21

หรือใช้คำสั่ง ftp:

ftp yourftpservername

ลองเชื่อมต่อกับไซต์ FTP ของคุณด้วยไคลเอนต์ FTP ใดๆ หรือโดยตรงจาก File Explorer (ระบุ ftp://yourservername/ ในแถบที่อยู่)

ป้อนชื่อผู้ใช้และรหัสผ่าน

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

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

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

เคล็ดลับ. หากคุณต้องการใช้การเข้าถึงแบบไม่ระบุตัวตน (All anonymous Users) ผู้ใช้ทุกคนจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ FTP ของคุณได้โดยใช้ข้อมูลประจำตัว: anonymous หรือ guest เป็นชื่อผู้ใช้และที่อยู่อีเมลเป็นรหัสผ่าน หากคุณเชื่อมต่อกับไซต์ FTP แบบไม่ระบุตัวตน เซสชันจะถูกจำกัดให้อยู่ในไดเรกทอรี LocalUser\Public (ไดเรกทอรี Public ต้องสร้างไว้ล่วงหน้า)

คุณสามารถใช้บันทึก FTP เพื่อดูข้อมูลเกี่ยวกับการเข้าถึงเซิร์ฟเวอร์ FTP ของผู้ใช้ ไฟล์บันทึกถูกเก็บโดยค่าเริ่มต้นในโฟลเดอร์ c:\inetpub\logs\logfiles ในไฟล์ u_exYYMMDD.log

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

การตั้งค่าเซิร์ฟเวอร์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2

ดังนั้น เราได้ดูวิธีการกำหนดค่าไซต์ FTP พร้อมการแยกผู้ใช้บน Windows Server 2016 / 2012 R2 ในโหมดการแยก ผู้ใช้จะได้รับการตรวจสอบสิทธิ์บน FTP โดยใช้ข้อมูลประจำตัวท้องถิ่นหรือโดเมนเพื่อเข้าถึงไดเรกทอรีรากที่สอดคล้องกับชื่อผู้ใช้