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

วิธีตั้งค่า SFTP Server บน Linux

ผู้คนส่วนใหญ่ชอบใช้โปรแกรม FTP เช่น FileZilla, WinSCP เมื่อต้องโอนไฟล์ไปมากับเซิร์ฟเวอร์ Linux SFTP เป็นทางเลือกที่ปลอดภัยแทนโปรโตคอล FTP เดิม ทำงานคล้ายกันแต่มีการเข้ารหัสเพิ่มเติม โดยใช้โปรโตคอล SSH ที่ให้ความสามารถด้านการเข้ารหัส การตั้งค่า SFTP server บน Linux มีหลายขั้นตอน ซึ่งเราจะ示範ที่นี่

SFTP คืออะไร?

SFTP (Secure File Transfer Protocol) เป็นโปรโตคอลเครือข่ายสำหรับโอนไฟล์จากไคลเอ็นต์ไปเซิร์ฟเวอร์ แตกต่างจาก FTP (File Transfer Protocol) ที่ SFTP ใช้โปรโตคอล SSH (Secure Shell) เข้ารหัสข้อมูลที่ส่ง พัฒนาโดยนักวิทยาการคอมพิวเตอร์ Tatu Ylönen และ Sami Lehtinen ซึ่งก็คือผู้พัฒนาโปรโตคอล SSH ในทศวรรษ 1990 แต่เวอร์ชันสมัยใหม่พัฒนาโดย IETF (Internet Engineering Task Force)

อธิบายได้ว่าเป็นโปรโตคอลระบบไฟล์ระยะไกล (remote file system protocol) แม้ชื่อจะบ่งชี้ว่าเพียงโอนไฟล์ เมื่อส่งไฟล์ผ่าน SFTP จากไคลเอ็นต์ไปเซิร์ฟเวอร์รับ ข้อมูลจะถูกเข้ารหัสก่อนส่ง หากถูกดักฟังโดย "man-in-the-middle" จะถอดรหัสไม่ได้ง่าย

ติดตั้ง SSH และ OpenSSH Server

เริ่มต้นการตั้งค่า SFTP server ด้วยการติดตั้ง SSH และ OpenSSH server

Linux ส่วนใหญ่ติดตั้ง SSH มาแล้ว แต่ถ้ายังไม่มี ติดตั้งด้วยคำสั่ง apt ของ Advanced Packaging Tool:

sudo apt install ssh

ตรวจสอบเวอร์ชัน SSH ด้วยแฟล็ก -V:

ssh -V

ติดตั้ง OpenSSH Server บน Debian/Ubuntu:

sudo apt install openssh-server

บน Arch Linux ใช้ pacman:

sudo pacman -S openssh

สร้างผู้ใช้ กลุ่ม และไดเรกทอรีสำหรับ SFTP

แนะนำให้บริการต่างๆ บน Linux ใช้ผู้ใช้ กลุ่ม และไดเรกทอรีของตัวเอง

สร้างกลุ่มสำหรับผู้ใช้ SFTP:

sudo groupadd sftp_group

สร้างผู้ใช้และเพิ่มเข้ากลุ่มที่สร้าง:

sudo useradd -g sftp_group sftp_user

กำหนดรหัสผ่านให้ผู้ใช้:

sudo passwd sftp_user

สร้างไดเรกทอรีเริ่มต้นสำหรับผู้ใช้ใหม่:

sudo mkdir -p /data/sftp_user/uploaded_files

ตั้งค่าสิทธิ์ไดเรกทอรีด้วย chown:

sudo chown -R root:sftp_group /data/sftp_user
sudo chown -R sftp_user:sftp_group /data/sftp_user/uploaded_files

ตั้งค่า SSH Server

ขั้นตอนต่อไปคือตั้งค่า SSH server ที่ SFTP จะใช้

แก้ไขไฟล์ "sshd_config" ใน "/etc/ssh/" ให้ผู้ใช้ใช้ SFTP shell เมื่อเชื่อมต่อ แทน SSH shell

แก้ไขไฟล์ด้วย Nano editor (มากับ Linux หลาย distro):

sudo nano /etc/ssh/sshd_config

ไปที่ท้ายไฟล์ เพิ่ม:

Match Group sftp_group
ChrootDirectory /data/%u
ForceCommand internal-sftp

รีสตาร์ทบริการ SSH:

sudo systemctl restart sshd

(ตัวเลือก) เปลี่ยนพอร์ต SFTP

หากต้องการเปลี่ยนพอร์ตจากค่าเริ่มต้น 22 ให้แก้ไข "sshd_config" อีกครั้ง

แก้ไขด้วย Nano:

sudo nano /etc/ssh/sshd_config

หาบรรทัดที่มีพอร์ตเริ่มต้น 22 ถูกคอมเมนต์ไว้:

#Port 22

ลบเครื่องหมาย # และใส่พอร์ตที่ต้องการ (ตัวอย่าง 1111):

Port 1111

บันทึกไฟล์ และรีสตาร์ทเซิร์ฟเวอร์:

sudo systemctl restart sshd

ล็อกอินและใช้งานเซิร์ฟเวอร์

เมื่อติดตั้งและตั้งค่าเสร็จ เซิร์ฟเวอร์พร้อมใช้งาน โอนไฟล์อัปโหลด/ดาวน์โหลดได้ทั้งหมด พร้อมเซสชันเข้ารหัสจาก SSH

ก่อนล็อกอิน ดูคู่มือก่อน:

sftp -h

ล็อกอินเซิร์ฟเวอร์ โดยระบุผู้ใช้และ IP หรือ hostname:

sftp USER@HOST

ระบุพอร์ต SFTP (ค่าเริ่มต้น 22) ด้วยแฟล็ก -P:

sftp USER@HOST -P 

เมื่อล็อกอิน จะได้ SFTP shell พิมพ์ help ดูคู่มือ

ดาวน์โหลดไฟล์

ดาวน์โหลดไฟล์:

get /path/to/file/on/server

ตัวอย่าง:

get /bin/ls

จะดาวน์โหลดไปที่ไดเรกทอรีปัจจุบัน (ที่คุณอยู่ก่อนล็อกอิน) หากต้องการดาวน์โหลดไปไดเรกทอรีเฉพาะ:

get /path/to/file/on/server /path/to/local/folder

คัดลอกไดเรกทอรี เพิ่มพารามิเตอร์ -r (recursive):

get -r /bin /home/username/Desktop/bin

จำไว้: ต้องใส่ชื่อไดเรกทอรีใหม่ที่ต้องการสร้างในเครื่องโลคอล เช่น "/home/username/Desktop/bin" หากใช้ get -r /bin /home/username/Desktop ไฟล์จะถูกคัดลอกตรง Desktop ไม่ใช่โฟลเดอร์ bin

อัปโหลดไฟล์

อัปโหลดไฟล์/ไดเรกทอรี หลักการเดียวกัน แต่พาธสลับกัน: ระบุไฟล์/ไดเรกทอรีโลคอลก่อน แล้วพาธระยะไกล

อัปโหลดไฟล์ด้วย put:

put /path/to/local/content /path/to/remote/location

อัปโหลดไดเรกทอรี (recursive) กฎเดียวกัน: คัดลอกไฟล์ในไดเรกทอรี ไม่ใช่ไดเรกทอรีเอง ต้องระบุชื่อไดเรกทอรีใหม่ฝั่งระยะไกล

put -r /home/username/Desktop/bin bin

จะสร้างไดเรกทอรีใหม่ชื่อ "bin" ฝั่งระยะไกล

Resume การโอน และใช้พาธที่มีช่องว่าง

โอนไฟล์ใหญ่ขาดกลางทาง ให้ resume ด้วย reput และ reget ใช้พาธเดียวกับครั้งก่อน

reget /path/to/file/on/server /path/to/local/file
reput /path/to/local/file /path/to/file/on/server

Resume ไดเรกทอรี เพิ่ม -r:

reput -r /home/username/Desktop/bin bin

พาธมีช่องว่าง ให้หุ้มคำพูด:

put "/home/username/My Documents/Files"

การใช้งานอื่นๆ

แสดงรายการไฟล์/ไดเรกทอรีด้วย ls:

ls -l

เปลี่ยนสิทธิ์ไฟล์ด้วย chmod:

chmod  

สร้างไดเรกทอรีใหม่ด้วย mkdir:

mkdir 

คำถามที่พบบ่อย

1. ต้องติดตั้ง SFTP client ไหม?

โดยทั่วไปไม่จำเป็น เพราะ Linux ส่วนใหญ่มี SFTP client แบบเทอร์มินัลมาพร้อมกัน

2. ใช้ public-key authentication ได้ไหม?

ได้ ใช้ public-key authentication แทนรหัสผ่าน ตั้งค่าง่ายและเพิ่มความปลอดภัย

3. โฮสต์ SSH server พร้อมกันได้ไหม?

ได้ แต่ต้องแน่ใจว่า SFTP server ไม่ใช้พอร์ตเดียวกับ SSH server