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

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


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

ในคู่มือนี้ เราจะอธิบายขั้นตอนในการติดตั้ง กำหนดค่า และรักษาความปลอดภัยเซิร์ฟเวอร์ FTP (VSFTPD ย่อมาจาก “Very Secure FTP Daemon“) ใน CentOS การกระจายที่แข็งแกร่ง>/RHEL 7 และ Fedora

โปรดทราบว่าคำสั่งทั้งหมดในคู่มือนี้จะทำงานเป็น รูท ในกรณีที่คุณไม่ได้ใช้งานเซิร์ฟเวอร์ด้วยบัญชี รูท ให้ใช้คำสั่ง sudo เพื่อรับสิทธิ์รูท

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

1. การติดตั้งเซิร์ฟเวอร์ vsftpd ทำได้โดยตรง เพียงเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล

yum install vsftpd

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

systemctl start vsftpd
systemctl enable vsftpd

3. ถัดไป เพื่ออนุญาตให้เข้าถึงบริการ FTP จากระบบภายนอก เราต้องเปิดพอร์ต 21 โดยที่ FTP daemons กำลังรับฟังดังต่อไปนี้:

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

ขั้นตอนที่ 2: การกำหนดค่าเซิร์ฟเวอร์ FTP

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

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

จากนั้น เปิดไฟล์กำหนดค่าด้านบนและตั้งค่าตัวเลือกต่อไปนี้ด้วยค่าที่เกี่ยวข้องเหล่านี้:

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

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

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

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 พวกเขาจะถูกวางไว้ในคุก chroot นี่คือไดเร็กทอรีรากในเครื่องซึ่งจะทำหน้าที่เป็นโฮมไดเร็กทอรีสำหรับเซสชัน FTP เท่านั้น

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

6. เพิ่มสองตัวเลือกต่อไปนี้เพื่อจำกัดผู้ใช้ FTP ไว้ที่โฮมไดเร็กทอรีของตน

chroot_local_user=YES
allow_writeable_chroot=YES

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

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

บันทึกไฟล์และปิด

การรักษาความปลอดภัยเซิร์ฟเวอร์ FTP ด้วย SELinux

7. ตอนนี้ มาตั้งค่า SELinux บูลีนด้านล่างเพื่ออนุญาตให้ FTP อ่านไฟล์ในโฮมไดเร็กตอรี่ของผู้ใช้ โปรดทราบว่าในตอนแรกทำได้โดยใช้คำสั่ง:

setsebool -P ftp_home_dir on

อย่างไรก็ตาม คำสั่ง ftp_home_dir ถูกปิดใช้งานตามค่าเริ่มต้นตามที่อธิบายไว้ในรายงานข้อผิดพลาดนี้: https://bugzilla.redhat.com/show_bug.cgi?id=1097775

ตอนนี้เราจะใช้คำสั่ง semanage เพื่อตั้งค่ากฎ SELinux เพื่ออนุญาตให้ FTP อ่าน/เขียนโฮมไดเร็กตอรี่ของผู้ใช้

semanage boolean -m ftpd_full_access --on

ณ จุดนี้ เราต้องรีสตาร์ท vsftpd เพื่อให้การเปลี่ยนแปลงทั้งหมดที่เราทำข้างต้นมีผล:

systemctl restart vsftpd

ขั้นตอนที่ 4: การทดสอบเซิร์ฟเวอร์ FTP

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

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

หลังจากนั้น เราต้องเพิ่มผู้ใช้ ravi ให้กับไฟล์ /etc/vsftpd.userlist โดยใช้คำสั่ง echo ดังต่อไปนี้:

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

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

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

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

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

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

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

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

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

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

12. เปิดไฟล์การกำหนดค่า vsftpd อีกครั้ง และเริ่มต้นด้วยการแสดงความคิดเห็นเกี่ยวกับตัวเลือกที่ไม่ปลอดภัยด้านล่าง:

#allow_writeable_chroot=YES

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

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. ถัดไป สร้างไดเร็กทอรีภายใต้รูทในเครื่องที่ผู้ใช้จะจัดเก็บไฟล์ของตน:

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/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

บันทึกไฟล์และปิด มาเริ่มบริการใหม่อีกครั้งด้วยการตั้งค่าใหม่:

systemctl restart vsftpd

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

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

แค่นั้นแหละ! ในบทความนี้ เราได้อธิบายวิธีการติดตั้ง กำหนดค่า ตลอดจนรักษาความปลอดภัยเซิร์ฟเวอร์ FTP ใน CentOS 7 ใช้ส่วนความคิดเห็นด้านล่างเพื่อตอบกลับถึงเราเกี่ยวกับคำแนะนำนี้/แบ่งปันข้อมูลที่เป็นประโยชน์เกี่ยวกับหัวข้อนี้

แนะนำให้อ่าน: ติดตั้งเซิร์ฟเวอร์ ProFTPD บน RHEL/CentOS 7

ในบทความถัดไป เราจะแสดงวิธีรักษาความปลอดภัยเซิร์ฟเวอร์ FTP โดยใช้การเชื่อมต่อ SSL/TLS ใน CentOS 7 จนกว่าจะถึงตอนนั้น ให้เชื่อมต่อกับ TecMint ต่อไป