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

วิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ FTP ใน Ubuntu


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

คำเตือน: หากคุณวางแผนที่จะใช้ FTP ให้พิจารณากำหนดค่าการเชื่อมต่อ FTP ด้วย SSL/TLS (จะครอบคลุมถึง บทความถัดไป) มิฉะนั้น ควรใช้ FTP ที่ปลอดภัย เช่น SFTP จะดีกว่าเสมอ

การอ่านที่แนะนำ: วิธีติดตั้งและรักษาความปลอดภัยเซิร์ฟเวอร์ FTP ใน CentOS 7

ในบทช่วยสอนนี้ เราจะแสดงวิธีการติดตั้ง กำหนดค่า และรักษาความปลอดภัยเซิร์ฟเวอร์ FTP (VSFTPD ในรูปแบบ “Very Secure FTP Daemon“) แบบเต็ม Ubuntu มีการรักษาความปลอดภัยที่มีประสิทธิภาพต่อช่องโหว่ FTP

ขั้นตอนที่ 1: การติดตั้งเซิร์ฟเวอร์ VsFTP ใน Ubuntu

1. ขั้นแรก เราต้องอัปเดตรายการแหล่งที่มาของแพ็คเกจระบบ จากนั้นจึงติดตั้งแพ็คเกจไบนารี VSFTPD ดังนี้:

sudo apt-get update
sudo apt-get install vsftpd

2. เมื่อการติดตั้งเสร็จสมบูรณ์ บริการจะถูกปิดใช้งานในตอนแรก ดังนั้น เราจำเป็นต้องเริ่มต้นด้วยตนเองในช่วงเวลาระหว่างนี้ และเปิดใช้งานให้เริ่มโดยอัตโนมัติจากการบูตระบบครั้งถัดไป:

------------- On SystemD ------------- 
systemctl start vsftpd
systemctl enable vsftpd

------------- On SysVInit ------------- 
service vsftpd start
chkconfig --level 35 vsftpd on

3. ถัดไป หากคุณเปิดใช้งานไฟร์วอลล์ UFW (ไม่ได้เปิดใช้งานตามค่าเริ่มต้น) บนเซิร์ฟเวอร์ คุณต้องเปิดพอร์ต 21 และ 20 โดยที่ FTP daemons กำลังฟัง เพื่ออนุญาตการเข้าถึงบริการ FTP จากเครื่องระยะไกล ให้เพิ่มกฎไฟร์วอลล์ใหม่ดังนี้:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw status

ขั้นตอนที่ 2: การกำหนดค่าและการรักษาความปลอดภัยเซิร์ฟเวอร์ VsFTP ใน Ubuntu

4. ตอนนี้เรามากำหนดค่าบางอย่างเพื่อตั้งค่าและรักษาความปลอดภัยเซิร์ฟเวอร์ FTP ของเรา ขั้นแรกเราจะสร้างการสำรองข้อมูลของไฟล์กำหนดค่าดั้งเดิม /etc/vsftpd/vsftpd.conf เช่น ดังนั้น:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

ต่อไป มาเปิดไฟล์กำหนดค่า vsftpd

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

เพิ่ม/แก้ไขตัวเลือกต่อไปนี้ด้วยค่าเหล่านี้:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. ตอนนี้ กำหนดค่า VSFTPD เพื่ออนุญาต/ปฏิเสธการเข้าถึง FTP ให้กับผู้ใช้ตามไฟล์รายชื่อผู้ใช้ /etc/vsftpd.userlist

โปรดทราบว่าตามค่าเริ่มต้น ผู้ใช้ที่อยู่ในรายการ userlist_file=/etc/vsftpd.userlist จะถูกปฏิเสธการเข้าสู่ระบบด้วยตัวเลือก userlist_deny=YES หาก userlist_enable=YES .

แต่ตัวเลือก userlist_deny=NO บิดเบือนความหมายของการตั้งค่าเริ่มต้น ดังนั้นเฉพาะผู้ใช้ที่มีชื่อผู้ใช้แสดงไว้อย่างชัดเจนใน userlist_file=/etc/vsftpd.userlist เท่านั้นที่จะได้รับอนุญาตให้ เข้าสู่เซิร์ฟเวอร์ FTP

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

ข้อสำคัญ: เมื่อผู้ใช้เข้าสู่ระบบเซิร์ฟเวอร์ FTP พวกเขาจะถูกวางไว้ในคุก chrooted นี่คือไดเร็กทอรีรากในเครื่องซึ่งจะทำหน้าที่เป็นไดเร็กทอรีหลักสำหรับเซสชัน FTP เท่านั้น.

ต่อไป เราจะดูสถานการณ์ที่เป็นไปได้สองสถานการณ์ในการตั้งค่าไดเร็กทอรีคุก chrooted (รูทในเครื่อง) ดังที่อธิบายไว้ด้านล่าง

6. ณ จุดนี้ เราจะเพิ่ม/แก้ไข/ไม่ใส่เครื่องหมายข้อคิดเห็นสองตัวเลือกต่อไปนี้เพื่อจำกัดผู้ใช้ FTP ไว้ที่โฮมไดเร็กตอรี่ของตน

chroot_local_user=YES
allow_writeable_chroot=YES

ตัวเลือก chroot_local_user=YES สำคัญหมายความว่าผู้ใช้ในเครื่องจะถูกวางไว้ในคุก chroot ซึ่งเป็นโฮมไดเร็กตอรี่ตามค่าเริ่มต้นหลังจากเข้าสู่ระบบ

และเราต้องเข้าใจด้วยว่า VSFTPD ไม่อนุญาตให้เขียนไดเร็กทอรีคุก chroot โดยค่าเริ่มต้นด้วยเหตุผลด้านความปลอดภัย อย่างไรก็ตาม เราสามารถใช้ตัวเลือก allow_writeable_chroot=YES เพื่อปิดใช้งานการตั้งค่านี้

บันทึกไฟล์และปิด จากนั้นเราจะต้องรีสตาร์ทบริการ VSFTPD เพื่อให้การเปลี่ยนแปลงข้างต้นมีผล:

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

ขั้นตอนที่ 3: ทดสอบเซิร์ฟเวอร์ VsFTP ใน Ubuntu

7. ตอนนี้เราจะทดสอบเซิร์ฟเวอร์ FTP โดยการสร้างผู้ใช้ FTP ด้วยคำสั่ง useradd ดังต่อไปนี้:

sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
sudo passwd aaronkilik

จากนั้น เราต้องแสดงรายการผู้ใช้ aaronkilik ในไฟล์ /etc/vsftpd.userlist อย่างชัดเจนด้วยคำสั่ง echo และ คำสั่ง tee ดังต่อไปนี้:

echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

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

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. ต่อไป มาทดสอบกันว่าผู้ใช้ที่ไม่อยู่ในรายการในไฟล์ /etc/vsftpd.userlist จะได้รับสิทธิ์ในการเข้าสู่ระบบ ซึ่งไม่เป็นความจริงจากผลลัพธ์ที่ตามมา : :

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. ตอนนี้เราจะทำการทดสอบขั้นสุดท้ายเพื่อพิจารณาว่าผู้ใช้ที่อยู่ในรายการไฟล์ /etc/vsftpd.userlist นั้นถูกวางไว้ในโฮมไดเร็กตอรี่ของเขา/เธอจริง ๆ หลังจาก เข้าสู่ระบบ. และนี่คือความจริงจากผลลัพธ์ด้านล่าง:

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

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

เราควรทราบว่าผลกระทบด้านความปลอดภัยเหล่านี้ไม่ได้เฉพาะเจาะจงกับ VSFTPD เท่านั้น แต่ยังส่งผลต่อ FTP daemons อื่นๆ ทั้งหมดที่เสนอให้นำผู้ใช้ภายในเครื่องเข้าคุก chroot

ด้วยเหตุนี้ ในส่วนด้านล่าง เราจะอธิบายวิธีที่ปลอดภัยยิ่งขึ้นในการตั้งค่าไดเร็กทอรีรากในเครื่องอื่นที่ไม่สามารถเขียนได้สำหรับผู้ใช้

ขั้นตอนที่ 4: กำหนดค่าโฮมไดเร็กทอรีของผู้ใช้ FTP ใน Ubuntu

11. ตอนนี้ ให้เปิดไฟล์การกำหนดค่า VSFTPD อีกครั้ง

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

และแสดงความคิดเห็นตัวเลือกที่ไม่ปลอดภัยโดยใช้อักขระ # ดังที่แสดงด้านล่าง:

#allow_writeable_chroot=YES

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

sudo mkdir /home/aaronkilik/ftp
sudo chown nobody:nogroup /home/aaronkilik/ftp
sudo chmod a-w /home/aaronkilik/ftp

12. จากนั้น สร้างไดเร็กทอรีภายใต้รูทในเครื่องโดยมีสิทธิ์ที่เหมาะสมซึ่งผู้ใช้จะจัดเก็บไฟล์ของเขา:

sudo mkdir /home/aaronkilik/ftp/files
sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
sudo chmod -R 0770 /home/aaronkilik/ftp/files/

หลังจากนั้น ให้เพิ่ม/แก้ไขตัวเลือกด้านล่างในไฟล์กำหนดค่า VSFTPD ด้วยค่าที่เกี่ยวข้อง:

user_sub_token=$USER          # inserts the username in the local root directory 
local_root=/home/$USER/ftp    # defines any users local root directory

บันทึกไฟล์และปิด และรีสตาร์ทบริการ VSFTPD ด้วยการตั้งค่าล่าสุด:

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

13. ตอนนี้ เรามาทำการตรวจสอบขั้นสุดท้ายและตรวจสอบให้แน่ใจว่าไดเร็กทอรีรากในเครื่องของผู้ใช้คือไดเร็กทอรี FTP ที่เราสร้างในโฮมไดเร็กทอรีของเขา

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

แค่นั้นแหละ! อย่าลืมแบ่งปันความคิดเห็นของคุณเกี่ยวกับคู่มือนี้ผ่านแบบฟอร์มความคิดเห็นด้านล่าง หรืออาจให้ข้อมูลสำคัญเกี่ยวกับหัวข้อนี้แก่เรา

สุดท้ายนี้ อย่าพลาดบทความถัดไปของเรา ซึ่งเราจะอธิบายวิธีการรักษาความปลอดภัยเซิร์ฟเวอร์ FTP โดยใช้การเชื่อมต่อ SSL/TLS ใน Ubuntu 16.04/16.10 จนกว่าจะถึงตอนนั้น โปรดคอยติดตาม TecMint อยู่เสมอ