โปรโตคอล FTP เป็นหนึ่งในโปรโตคอลที่เก่าแก่ที่สุด (มีอายุมากกว่า 40 ปี) แต่ยังคงใช้กันอย่างแพร่หลายเมื่อต้องใช้โปรโตคอลการถ่ายโอนไฟล์อย่างง่าย สามารถติดตั้งเซิร์ฟเวอร์ FTP บนระบบปฏิบัติการ Microsoft เวอร์ชันใดก็ได้ การปรับปรุงบริการ ftp ให้ทันสมัยครั้งสุดท้ายใน Windows 7 / Server 2008 R2 (อันที่จริงรหัสบริการเกือบจะเขียนตั้งแต่เริ่มต้น) ความปลอดภัยของบริการได้รับการปรับปรุงอย่างมีนัยสำคัญและมีคุณลักษณะใหม่ ๆ ปรากฏขึ้น โดยเฉพาะอย่างยิ่ง เซิร์ฟเวอร์ FTP บน Windows ช่วยให้คุณกำหนดค่าการแยกผู้ใช้ FTP . อนุญาตให้จำกัดการเข้าถึงของผู้ใช้จำนวนมากไปยังโฟลเดอร์ของตนเองบนเซิร์ฟเวอร์ 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 ได้โดยใช้คอนโซลตัวจัดการเซิร์ฟเวอร์โดยทำเครื่องหมายที่ตัวเลือก บริการ FTP และ ความสามารถในการขยายของ FTP ในส่วน เว็บเซิร์ฟเวอร์ (IIS) -> เซิร์ฟเวอร์ FTP .
นอกจากนี้ คุณยังสามารถติดตั้งบทบาทเซิร์ฟเวอร์ FTP ด้วยคำสั่ง PowerShell เดียว:Install-WindowsFeature Web-FTP-Server
ในการติดตั้งคอนโซลการจัดการเซิร์ฟเวอร์ FTP ให้รันคำสั่งต่อไปนี้:
Install-WindowsFeature -Name "Web-Mgmt-Console"
การสร้างไซต์ FTP การจัดการสิทธิ์ของผู้ใช้ FTP
เริ่มตัวจัดการเซิร์ฟเวอร์และเปิดคอนโซลการจัดการ IIS (Internet Information Service Manager)
สร้างไซต์ FTP ใหม่ (ไซต์ -> เพิ่มไซต์ FTP ).
ชื่อของไซต์ FTP:MyTestSite
ไดเรกทอรีรากของไซต์ FTP:C:\inetpub\ftproot
เพื่อป้องกันข้อมูล FTP ที่ส่งผ่านเครือข่าย เป็นไปได้ที่จะกำหนดค่า SSL สำหรับ FTP (ในกรณีนี้ ข้อมูลและรหัสผ่าน/บัญชีทั้งหมดที่ส่งโดยผู้ใช้ ftp ระหว่างเซสชันจะได้รับการเข้ารหัส) แต่ในการสาธิตของเรา สิ่งนี้ไม่จำเป็น การตั้งค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น
คุณสามารถจัดการไซต์ FTP ของคุณได้โดยใช้โมดูล PowerShell การดูแลเว็บ . ตัวอย่างเช่น หากต้องการสร้างไซต์ FTP ใหม่ เพียงเรียกใช้คำสั่ง:
Import-Module WebAdministration
# Set the FTP site name
$FTPSiteName = 'CORP_FTP'
#FTP folder
$FTPRoot = 'D:\www\FTPRoot'
#FTP port
$FTPPort = 21
New-WebFtpSite -Name $FTPSiteName -PhysicalPath $FTPRoot -Port $FTPPort
เลือกไซต์ FTP ใหม่และปิดใช้งาน การตรวจสอบสิทธิ์แบบไม่ระบุชื่อ ใน การตรวจสอบสิทธิ์ FTP ส่วน การตรวจสอบเบื้องต้น ต้องเปิดใช้งาน
บริการ FTP บน Windows Server 2016/2012 R2 สามารถใช้บัญชีได้สองประเภท:โดเมนหรือภายในเครื่อง โครงสร้างไดเรกทอรี FTP และการตั้งค่าการแยกผู้ใช้จะมีความแตกต่างกันขึ้นอยู่กับประเภทบัญชี เพื่อให้อธิบายได้ง่ายขึ้น เราจะใช้บัญชี Windows ในเครื่อง
สร้างผู้ใช้ FTP บางส่วน สมมติว่านี่คือ ftp_user1 , ftp_user2 และ ftp_user3 . สร้างกลุ่ม ftp_users . ด้วย ซึ่งรวมถึงผู้ใช้เหล่านี้ คุณสามารถสร้างผู้ใช้ในพื้นที่ได้ใน ผู้ใช้และกลุ่มภายใน ส่วนของการจัดการคอมพิวเตอร์ คอนโซล
คุณยังสามารถสร้างผู้ใช้และกลุ่มในเครื่องได้จากพรอมต์คำสั่ง (หรือใช้ PowerShell) สร้างกลุ่มโลคัล:net localgroup ftp_users /add
สร้างผู้ใช้ในเครื่องใหม่:net user ftp_user1 /add *
เพิ่มผู้ใช้ในกลุ่ม:net localgroup ftp_users ftp_user1 /add
สร้างผู้ใช้อีกสองคนด้วยวิธีเดียวกัน
กำหนดสิทธิ์ในการอ่านและเขียนบนไดเร็กทอรี C:\inetpub\ftproot สำหรับกลุ่ม ftp_users
สร้างไดเรกทอรีชื่อ LocalUser (ชื่อต้องเหมือนกัน สำคัญนะ!!! ) ในโฟลเดอร์ C:\inetpub\ftproot จากนั้นสร้างสามไดเร็กทอรีภายใต้ชื่อ ftp_user1, ftp_user2, ftp_user3 ในโฟลเดอร์ C:\inetpub\ftproot\LocalUser
หมายเหตุ . ขึ้นอยู่กับประเภทบัญชี คุณต้องสร้างโครงสร้างไดเร็กทอรีต่อไปนี้ (ภายใต้ %FtpRoot%\ เราหมายถึงรูทของไซต์ FTP ในกรณีของเราคือ C:\inetpub\ftproot\):ประเภทบัญชี | ไวยากรณ์ของการตั้งชื่อไดเรกทอรีหลัก |
ผู้ใช้ที่ไม่ระบุชื่อ | %FtpRoot%\LocalUser\Public |
บัญชี Windows ภายในเครื่อง | %FtpRoot%\LocalUser\%UserName% |
บัญชีโดเมน Windows | %FtpRoot%\%UserDomain%\%UserName% |
บัญชี IIS Manager หรือ ASP.NET พิเศษ | %FtpRoot%\LocalUser\%UserName% |
กลับไปที่คอนโซล IIS และสร้างกฎใหม่ (เพิ่ม AllowRules ) ใน กฎการให้สิทธิ์ FTP ส่วนของเว็บไซต์ ระบุว่ากลุ่ม ftp_users ต้องมีสิทธิ์ในการอ่านและเขียน
จะกำหนดค่าการแยกผู้ใช้ FTP บน Windows Server 2016/2012 R2 ได้อย่างไร
ไปที่การกำหนดค่าการแยกผู้ใช้ FTP การแยกผู้ใช้ FTP ได้รับการกำหนดค่าในระดับไซต์ FTP ไม่ใช่เซิร์ฟเวอร์ทั้งหมด การแยกผู้ใช้ FTP ช่วยให้คุณจัดระเบียบโฟลเดอร์ ftp-home สำหรับผู้ใช้แต่ละคนได้
เปิด การแยกผู้ใช้ FTP ในการตั้งค่าของไซต์ FTP
ส่วนนี้มีการตั้งค่าหลายอย่าง สองรายการแรกไม่แนะนำให้แยกผู้ใช้:
- ไดเรกทอรีรากของ FTP (เซสชัน FTP ของผู้ใช้เริ่มต้นในไดเรกทอรีรากของไซต์ FTP)
- ไดเรกทอรีชื่อผู้ใช้ (ผู้ใช้เริ่มต้นด้วยไดเร็กทอรีกายภาพ/เสมือนด้วยชื่อผู้ใช้ หากไม่มีไดเร็กทอรี เซสชันจะเริ่มต้นในไดเร็กทอรี root FTP ของไซต์)
สามตัวเลือกถัดไปคือโหมดการแยกผู้ใช้ที่แตกต่างกัน:
- ไดเรกทอรีชื่อผู้ใช้ (ปิดใช้งานไดเรกทอรีเสมือนส่วนกลาง) แนะนำให้แยกเซสชัน ftp ของผู้ใช้ในไดเร็กทอรีกายภาพ/เสมือนที่มีชื่อเดียวกับผู้ใช้ ftp ผู้ใช้เห็นเฉพาะไดเร็กทอรีของตนเอง (เป็นไดเร็กทอรี root ftp) และไม่สามารถข้ามไปได้ (ไปยังไดเร็กทอรีบนของแผนผัง FTP) ไดเร็กทอรีเสมือนทั่วโลกจะถูกละเว้น
- ชื่อผู้ใช้ฟิสิคัลไดเร็กทอรี (เปิดใช้งานไดเร็กทอรีเสมือนส่วนกลาง) แนะนำให้แยกเซสชัน ftp ของผู้ใช้ในไดเร็กทอรีกายภาพที่มีชื่อเดียวกับชื่อบัญชีผู้ใช้ ftp ผู้ใช้ไม่สามารถไปเหนือไดเร็กทอรีของตนได้ อย่างไรก็ตาม ไดเร็กทอรีเสมือนทั่วโลกที่สร้างขึ้นทั้งหมดมีให้สำหรับผู้ใช้
- โฮมไดเร็กทอรี FTP ที่กำหนดค่าใน Active Directory – ผู้ใช้ FTP จะถูกแยกออกจากโฮมไดเร็กทอรีที่ระบุในการตั้งค่าบัญชี Active Directory (คุณสมบัติ FTPDir และ FTPDir)
เลือกโหมดการแยกที่ต้องการ (ฉันใช้ตัวเลือกที่สองเพื่อแยกผู้ใช้ ftp)
ขอแนะนำให้เริ่มบริการ Microsoft FTP (FTPSVC) ใหม่โดยมีการเปลี่ยนแปลงการตั้งค่าไซต์ FTPการกำหนดค่ากฎไฟร์วอลล์ Windows เพื่อเข้าถึงเซิร์ฟเวอร์ FTP
เมื่อคุณติดตั้งบทบาทเซิร์ฟเวอร์ FTP กฎที่จำเป็นทั้งหมดที่จำเป็นสำหรับผู้ใช้ในการเข้าถึง FTP จะถูกเปิดใช้งานโดยอัตโนมัติในการตั้งค่าไฟร์วอลล์ Windows
เพื่อให้ FTP ทำงานได้อย่างถูกต้องในโหมดพาสซีฟ FTP ผู้ใช้จำเป็นต้องเชื่อมต่อกับช่วงพอร์ต RPC (1025-65535) เพื่อไม่ให้เปิดพอร์ตเหล่านี้ทั้งหมดบนไฟร์วอลล์ภายนอก คุณสามารถจำกัดช่วงของพอร์ต TCP แบบไดนามิกที่ใช้สำหรับการส่งข้อมูล FTP
- เปิด การสนับสนุนไฟร์วอลล์ FTP ในการตั้งค่าไซต์ FTP และใน ช่วงพอร์ตช่องข้อมูล ฟิลด์ระบุช่วงพอร์ตที่คุณต้องการใช้สำหรับการเชื่อมต่อ FTP ตัวอย่างเช่น – 50000-50100;
- บันทึกการเปลี่ยนแปลงและเริ่มต้น IIS ใหม่ (
iisreset
); - เปิด Windows Control Panel และไปที่ Control Panel\System and Security\Windows Firewall\Allowed apps;
- ตรวจสอบให้แน่ใจว่ารายการแอปพลิเคชันที่ได้รับอนุญาตให้เข้าถึงผ่านไฟร์วอลล์มีสิทธิ์สำหรับเซิร์ฟเวอร์ FTP บทบาท.
จากนั้นตรวจสอบว่ากฎต่อไปนี้เปิดใช้งานอยู่ในการตั้งค่าของ Windows Firewall with Advanced Security:
- เซิร์ฟเวอร์ FTP (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 (การรับส่งข้อมูล FTP) – พอร์ต 20;
- FTP Server Secure (FTP SSL Traffic-Out) –พอร์ต 989 (เมื่อใช้ FTP กับ SSL)
ดังนั้น พอร์ตเหล่านี้จะต้องเปิดบนเราเตอร์ของคุณ (เกตเวย์ ไฟร์วอลล์) เพื่อให้ผู้ใช้ FTP ภายนอกสามารถเชื่อมต่อกับเว็บไซต์ของคุณได้
การทดสอบการเชื่อมต่อเซิร์ฟเวอร์ FTP จาก Windows
คุณสามารถตรวจสอบความพร้อมใช้งานของพอร์ตบนเซิร์ฟเวอร์ FTP ได้โดยใช้ cmdlet ของ Test-NetConnection:
Test-NetConnection -ComputerName yourftpservername -Port 21
หรือใช้ ftp คำสั่ง:
ftp yourftpservername
ลองเชื่อมต่อกับไซต์ FTP ของคุณด้วยไคลเอนต์ FTP หรือโดยตรงจาก File Explorer (ระบุ ftp://yourservername/ ในแถบที่อยู่)
ใส่ชื่อผู้ใช้และรหัสผ่าน
และตอนนี้คุณสามารถเข้าถึงโฮมไดเร็กทอรีด้วยไฟล์ของผู้ใช้ (ซึ่งเป็นรูทของไซต์ FTP สำหรับผู้ใช้) ดังที่เราเห็น เซสชันผู้ใช้ถูกแยกออก และผู้ใช้เห็นเฉพาะไฟล์ของเขาบนเซิร์ฟเวอร์ ftp
เคล็ดลับ หากคุณต้องการใช้การเข้าถึงแบบไม่ระบุชื่อ (ผู้ใช้ที่ไม่ระบุชื่อทั้งหมด) ผู้ใช้ทุกคนจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ FTP ของคุณโดยใช้ข้อมูลประจำตัว:ไม่ระบุชื่อ หรือ แขก เป็นชื่อผู้ใช้และที่อยู่อีเมลเป็นรหัสผ่าน หากคุณเชื่อมต่อกับไซต์ FTP โดยไม่เปิดเผยตัวตน เซสชันจะถูกจำกัดไว้ที่ไดเรกทอรี LocalUser\Public (เป็นที่ชัดเจนว่าจะต้องสร้างไดเรกทอรีสาธารณะไว้ล่วงหน้า)
คุณสามารถใช้บันทึก FTP เพื่อดูข้อมูลเกี่ยวกับการเข้าถึงของผู้ใช้ไปยังเซิร์ฟเวอร์ FTP ไฟล์บันทึกจะถูกจัดเก็บโดยค่าเริ่มต้นใน c:\inetpub\logs\logfiles โฟลเดอร์ใน u_exYYMMDD.log ไฟล์.
ในการดูการเชื่อมต่อผู้ใช้ที่ใช้งานอยู่กับเซิร์ฟเวอร์ FTP ของคุณ คุณสามารถใช้ค่าของตัวนับประสิทธิภาพ IIS ผ่าน PowerShell หรือ “เซสชัน FTP ปัจจุบัน ” ในคอนโซล IIS ในคอนโซลนี้ คุณสามารถดูชื่อและที่อยู่ IP ของผู้ใช้ FTP และยกเลิกการเชื่อมต่อเซสชัน ftp หากจำเป็น
ดังนั้นเราจึงได้ดูวิธีกำหนดค่าไซต์ FTP ด้วยการแยกผู้ใช้ตาม Windows Server 2016 / 2012 R2 ในโหมดแยก ผู้ใช้จะได้รับการตรวจสอบสิทธิ์บน FTP โดยใช้ข้อมูลรับรองในเครื่องหรือโดเมนเพื่อเข้าถึงไดเรกทอรีรากที่สอดคล้องกับชื่อผู้ใช้