Android

วิธีการตั้งค่าเซิร์ฟเวอร์ ftp ด้วย vsftpd บนเดเบียน 9

Садага болоюн, чырагым, лампочкам деген апа маегинде лампа заводунда иштегенин айтты

Садага болоюн, чырагым, лампочкам деген апа маегинде лампа заводунда иштегенин айтты

สารบัญ:

Anonim

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

มีเซิร์ฟเวอร์ FTP โอเพนซอร์สมากมายสำหรับ Linux ที่นิยมมากที่สุดและใช้กันอย่างแพร่หลายคือ PureFTPd, ProFTPD และ vsftpd

บทช่วยสอนนี้อธิบายวิธีการติดตั้งและกำหนดค่า vsftpd (Very Secure Ftp Daemon) บน Debian 9. vsftpd เซิร์ฟเวอร์ FTP ที่เสถียรมั่นคงและรวดเร็ว นอกจากนี้เราจะแสดงวิธีกำหนดค่า vsftpd เพื่อ จำกัด ผู้ใช้ในไดเรกทอรีหลักและเข้ารหัสการส่งทั้งหมดด้วย SSL / TLS

ข้อกำหนดเบื้องต้น

ผู้ใช้ที่คุณเข้าสู่ระบบต้องมีสิทธิ์ sudo เพื่อให้สามารถติดตั้งแพ็คเกจได้

การติดตั้ง vsftpd บน Debian 9

แพ็คเกจ vsftpd พร้อมใช้งานในที่เก็บ Debian การติดตั้งค่อนข้างตรงไปตรงมา:

sudo apt update sudo apt install vsftpd

บริการ vsftpd จะเริ่มต้นโดยอัตโนมัติหลังจากกระบวนการติดตั้งเสร็จสมบูรณ์ ตรวจสอบโดยพิมพ์สถานะบริการ:

sudo systemctl status vsftpd

ผลลัพธ์จะมีลักษณะดังนี้ด้านล่างแสดงว่าบริการ vsftpd เปิดใช้งานและทำงานอยู่:

● vsftpd.service - vsftpd FTP server Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-12-10 11:42:51 UTC; 53s ago Main PID: 1394 (vsftpd) CGroup: /system.slice/vsftpd.service └─1394 /usr/sbin/vsftpd /etc/vsftpd.conf

การกำหนดค่า vsftpd

เซิร์ฟเวอร์ vsftpd สามารถกำหนดค่าได้โดยแก้ไขไฟล์ vsftpd.conf พบในไดเร็กทอรี /etc

การตั้งค่าส่วนใหญ่มีการบันทึกไว้อย่างดีภายในไฟล์กำหนดค่า สำหรับตัวเลือกทั้งหมดที่มีให้เยี่ยมชมหน้า vsftpd อย่างเป็นทางการ

ในส่วนต่อไปนี้เราจะไปตั้งค่าที่สำคัญบางอย่างที่จำเป็นในการกำหนดค่าการติดตั้ง vsftpd ที่ปลอดภัย

เริ่มต้นด้วยการเปิดไฟล์คอนฟิกูเรชัน vsftpd:

sudo nano /etc/vsftpd.conf

1. การเข้าถึง FTP

ค้นหาคำสั่ง anonymous_enable และ local_enable และตรวจสอบการกำหนดค่าของคุณตรงกับบรรทัดด้านล่าง:

/etc/vsftpd.conf

anonymous_enable=NO local_enable=YES

สิ่งนี้ทำให้มั่นใจได้ว่ามีเพียงผู้ใช้ในท้องถิ่นเท่านั้นที่สามารถเข้าถึงเซิร์ฟเวอร์ FTP

2. เปิดใช้งานการอัปโหลด

write_enable การตั้งค่า write_enable เพื่ออนุญาตการเปลี่ยนแปลงระบบไฟล์เช่นการอัพโหลดและการลบไฟล์

/etc/vsftpd.conf

write_enable=YES

3. คุก Chroot

เพื่อป้องกันไม่ให้ผู้ใช้ FTP เข้าถึงไฟล์ใด ๆ นอกไดเรกทอรีบ้านยกเลิกการตั้งค่า chroot

/etc/vsftpd.conf

chroot_local_user=YES

ตามค่าเริ่มต้นเพื่อป้องกันช่องโหว่ด้านความปลอดภัยเมื่อเปิดใช้งาน chroot vsftpd จะปฏิเสธที่จะอัปโหลดไฟล์หากไดเรกทอรีที่ผู้ใช้ล็อคอยู่นั้นสามารถเขียนได้

ใช้วิธีใดวิธีหนึ่งด้านล่างเพื่ออนุญาตให้อัปโหลดเมื่อเปิดใช้งาน chroot

  • วิธีที่ 1 - วิธีที่แนะนำให้อนุญาตให้อัพโหลดคือการเปิดใช้งาน chroot และกำหนดค่าไดเรกทอรี FTP ในบทช่วยสอนนี้เราจะสร้างไดเรกทอรี ftp ภายในหน้าแรกของผู้ใช้ซึ่งจะทำหน้าที่เป็น chroot และไดเรกทอรี uploads เขียนได้สำหรับการอัพโหลดไฟล์

    /etc/vsftpd.conf

    user_sub_token=$USER local_root=/home/$USER/ftp

    วิธีที่ 2 - ตัวเลือกอื่นคือการเพิ่มคำสั่งต่อไปนี้ในไฟล์การกำหนดค่า vsftpd ใช้ตัวเลือกนี้หากคุณต้องให้สิทธิ์การเข้าถึงแก่ผู้ใช้ของคุณในโฮมไดเรกทอรี

    /etc/vsftpd.conf

    allow_writeable_chroot=YES

4. การเชื่อมต่อ FTP แบบพาสซีฟ

vsftpd สามารถใช้พอร์ตใดก็ได้สำหรับการเชื่อมต่อ FTP แบบพาสซีฟ เราจะระบุช่วงต่ำสุดและสูงสุดของพอร์ตแล้วเปิดช่วงในไฟร์วอลล์ของเรา

เพิ่มบรรทัดต่อไปนี้ในไฟล์คอนฟิกูเรชัน:

/etc/vsftpd.conf

pasv_min_port=30000 pasv_max_port=31000

5. การ จำกัด การเข้าสู่ระบบของผู้ใช้

หากต้องการอนุญาตให้ผู้ใช้บางคนเท่านั้นที่ล็อกอินเข้าสู่เซิร์ฟเวอร์ FTP ให้เพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์:

/etc/vsftpd.conf

userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO

เมื่อเปิดใช้งานตัวเลือกนี้คุณจะต้องระบุผู้ใช้ที่สามารถเข้าสู่ระบบได้โดยการเพิ่มชื่อผู้ใช้ลงในไฟล์ /etc/vsftpd.user_list (ผู้ใช้หนึ่งคนต่อบรรทัด)

6. การรักษาความปลอดภัยการส่งด้วย SSL / TLS

ในการเข้ารหัสการส่งสัญญาณ FTP ด้วย SSL / TLS คุณจะต้องมีใบรับรอง SSL และกำหนดค่าเซิร์ฟเวอร์ FTP เพื่อใช้งาน

คุณสามารถใช้ใบรับรอง SSL ที่มีอยู่ซึ่งลงนามโดยผู้ออกใบรับรองที่เชื่อถือได้หรือสร้างใบรับรองที่ลงนามด้วยตนเอง

ในบทช่วยสอนนี้เราจะสร้างใบรับรอง SSL ที่ลงชื่อด้วยตนเองโดยใช้คำสั่ง openssl

คำสั่งต่อไปนี้จะสร้างคีย์ส่วนตัว 2048 บิตและใบรับรองที่ลงชื่อด้วยตนเองมีอายุ 10 ปี ทั้งรหัสส่วนตัวและใบรับรองจะถูกบันทึกในไฟล์เดียวกัน:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

เมื่อสร้างใบรับรอง SSL แล้วให้เปิดไฟล์คอนฟิกูเรชัน vsftpd:

sudo nano /etc/vsftpd.conf

ค้นหาคำสั่ง rsa_private_key_file และ rsa_private_key_file เปลี่ยนค่าเป็นพา ธ ไฟล์ pam และตั้งค่าคำสั่ง ssl_enable เป็น YES :

/etc/vsftpd.conf

rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES

หากไม่ได้ระบุเป็นอย่างอื่นเซิร์ฟเวอร์ FTP จะใช้ TLS เท่านั้นเพื่อทำการเชื่อมต่อที่ปลอดภัย

เริ่มบริการ vsftpd ใหม่

เมื่อคุณแก้ไขเสร็จแล้วไฟล์การกำหนดค่า vsftpd (ยกเว้นความคิดเห็น) ควรมีลักษณะดังนี้:

/etc/vsftpd.conf

listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=YES user_sub_token=$USER local_root=/home/$USER/ftp pasv_min_port=30000 pasv_max_port=31000 userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO

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

sudo systemctl restart vsftpd

เปิดไฟร์วอลล์

หากต้องการเปิดพอร์ต 21 (พอร์ตคำสั่ง FTP), พอร์ต 20 (พอร์ตข้อมูล FTP) และ 30000-31000 (ช่วงพอร์ตแบบพาสซีฟ) ให้รันคำสั่งต่อไปนี้:

sudo ufw allow 20:21/tcp sudo ufw allow 30000:31000/tcp

เพื่อหลีกเลี่ยงการถูกล็อคเราจะเปิดพอร์ต 22 :

sudo ufw allow OpenSSH

โหลดกฎ UFW อีกครั้งโดยปิดใช้งานและเปิดใช้งาน UFW อีกครั้ง:

sudo ufw disable sudo ufw enable

หากต้องการตรวจสอบการเปลี่ยนแปลงให้ดำเนินการดังนี้

sudo ufw status

Status: active To Action From -- ------ ---- 20:21/tcp ALLOW Anywhere 30000:31000/tcp ALLOW Anywhere OpenSSH ALLOW Anywhere 20:21/tcp (v6) ALLOW Anywhere (v6) 30000:31000/tcp (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6)

สร้างผู้ใช้ FTP

เพื่อทดสอบเซิร์ฟเวอร์ FTP ของเราเราจะสร้างผู้ใช้ใหม่

  • หากคุณมีผู้ใช้ที่คุณต้องการให้สิทธิ์การเข้าถึง FTP ข้ามขั้นตอนที่ 1 หากคุณตั้ง allow_writeable_chroot=YES ในไฟล์กำหนดค่าของคุณให้ข้ามขั้นตอนที่ 3
  1. สร้างผู้ใช้ใหม่ชื่อ newftpuser :

    sudo adduser newftpuser

    เพิ่มผู้ใช้ไปยังรายการผู้ใช้ FTP ที่อนุญาต:

    echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

    สร้างแผนผังไดเร็กทอรี FTP และตั้งค่าการอนุญาตที่ถูกต้อง:

    sudo mkdir -p /home/newftpuser/ftp/upload sudo chmod 550 /home/newftpuser/ftp sudo chmod 750 /home/newftpuser/ftp/upload sudo chown -R newftpuser: /home/newftpuser/ftp

    ตามที่กล่าวไว้ในส่วนก่อนหน้านี้ผู้ใช้จะสามารถอัปโหลดไฟล์ไปยังไดเรกทอรี ftp/upload

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

ปิดการใช้งาน Shell Access

โดยค่าเริ่มต้นเมื่อสร้างผู้ใช้หากไม่ได้ระบุไว้อย่างชัดเจนผู้ใช้จะมีการเข้าถึง SSH ไปยังเซิร์ฟเวอร์

หากต้องการปิดใช้งานการเข้าถึงเชลล์เราจะสร้างเชลล์ใหม่ซึ่งจะพิมพ์ข้อความแจ้งให้ผู้ใช้ทราบว่าบัญชีของพวกเขาถูก จำกัด การเข้าถึง FTP เท่านั้น

สร้างเชลล์ /bin/ftponly และทำให้สามารถเรียกใช้งานได้:

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly sudo chmod a+x /bin/ftponly

ผนวกเชลล์ใหม่เข้ากับรายการของเชลล์ที่ถูกต้องในไฟล์ /etc/shells :

echo "/bin/ftponly" | sudo tee -a /etc/shells

เปลี่ยนเชลล์ผู้ใช้เป็น /bin/ftponly :

sudo usermod newftpuser -s /bin/ftponly

ใช้คำสั่งเดียวกันเพื่อเปลี่ยนเชลล์ของผู้ใช้ทั้งหมดที่คุณต้องการให้สิทธิ์การเข้าถึง FTP เท่านั้น

ข้อสรุป

ในบทช่วยสอนนี้คุณเรียนรู้วิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ FTP ที่ปลอดภัยและรวดเร็วบนระบบ Debian 9 ของคุณ

ftp debian