Cách dựng máy chủ FTP trên Ubuntu VPS

Hôm nay mình sẽ hướng dẫn cho các bạn cách làm thế nào để dựng FTP server trên Ubuntu VPS. Vsftpd server là cách được công nhận rộng rãi, nhanh nhất và an toàn nhất để bảo mật FTP cho những nền tảng giống với UNIX.

FTP (File Transfer Protocol) là cách để gửi và nhận files qua kết nối mạng. Nhờ vào framework client/server kết nối bảo mật SSL/TLS, FTP cho phép người dùng chia sẽ (và nhận) file từ xa một cách an toàn, hiệu quả, và đáng tin cậy (sử dụng giao thức TCP/IP).

FTP Functions hoạt động giống với HTTP hoặc SMTP; điểm khác biệt là nó chịu trách nhiệm truyền tải file an toàn giữa người gửi và người nhận. Bài hướng dẫn này sẽ chỉ bạn cách thiết lập FTP server trên Ubuntu 16.04.

Đối với lĩnh vực Camera giám sát, bạn có thể dùng giao thức FTP để truyền dữ liệu video, hình ảnh từ thiết bị ghi hình đến Server để lưu trữ hoặc xử lý phát triển. Xem cách cài đặt truyền dữ liệu FTP tại đây.


Bước 1 – Cài đặt Vsftpd

Đầu tiên, hãy cập nhật các gói sản phẩm trước khi tiến hành cài đặt vsftpd daemon. Để bắt đầu, hãy chạy lệnh sau:

sudo apt-get update

Đợi tiến trình kết thúc, sau đó bạn sẽ nhận được thông báo sau:

Sau đó thực hiện lệnh sau để cài vsftpd daemon:

sudo apt-get install vsftpd

Bạn sẽ được hỏi xác nhân, nhấn để đồng ý rồi nhấn Enter để bắt đầu

Sau khi cài đặt hoàn tất, hãy backup file gốc để chúng ta có thể bắt đầu với một file cấu hình trống:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original

Bây giờ chúng ta đã sẳn sàng cho bước tiếp theo để cấu hình firewall.


Bước 2 – Cho phép FTP traffic qua tường lửa

Để cho phép Ubuntu FTP server giao tiếp ra ngoài, bạn cần phải cho phép nó khỏi bị chặn bởi tường lửa. Hãy xem tường lửa có được kích hoạt chưa bằng cách dùng lệnh sau:

sudo ufw status

Nếu bạn thấy thông báo này:

ufw: command not found

Có nghĩa là tường lửa chưa được bật và bạn có thể làm tiếp bước tiếp theo.

Tuy nhiên, nếu kết quả hiển thị khác, với một số quy tắc đã được định nghĩa rồi hoặc một thông báo là tưởng lửa đang active (hoạt động), bạn sẽ phải xác định xem kết nối FTP có hoạt động không. Hãy tiếp tục và mở port 20 và 21 cho kết nối FTP; port 40000-50000 đã được dành riêng cho một số port thụ động có thể sẽ được cấu hình trong file cấu hình và port 990 sẽ được dùng khi TLS được kích hoạt. Để làm việc này hãy thực hiện lệnh sau:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp

Giờ bạn hãy tiếp tục xem tình trạng firewall:

sudo ufw status

Kết quả sẽ tương tự như sau:

Output
Status: active
To Action From
-- ------ ----
990/tcp ALLOW Anywhere
20/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere
40000:50000/tcp ALLOW Anywhere
20/tcp (v6) ALLOW Anywhere (v6)
21/tcp (v6) ALLOW Anywhere (v6)
990/tcp (v6) ALLOW Anywhere (v6)
40000:50000/tcp (v6) ALLOW Anywhere (v6)

Vậy giờ bạn đã có tất cả các port cầnt hiết được mở, bạn có thể tiếp tục ở bước tiếp theo.


Bước 3 – Tạo thư mục người dùng

Tại bước 3 này trong quá trình cài đặt Ubuntu FTP server, chúng tôi sẽ cần bạn chọn người dùng cho việc truy cập FTP. Để làm được vậy, chúng tôi sẽ tạo một user mới. Để tạo user mới, bạn hãy thực hiện lệnh sau:

sudo adduser alex

Khi được hỏi, hãy điền mật khẩu thành viên và điền vào các thông tin chi tiết khác. Lý tưởng nhất là FTP cần phải hạn chế để cho truy cập vào thư mục nhất định thôi, vì lý do an toàn. Vsftpd sử dụng chroot jails để làm việc này. Với việc kích hoạt chroot, một local user sẽ bị hạn chế vào thư mục home của họ mặc định. Cũng vì vậy, có thể vì lý do bảo mật của vsftpd, uesr có thể không ghi được vào trong thư mục này. Chúng ta sẽ không vô hiệu quyền ghi dữ liệu khỏi thư mục home, mà thay vào đó, chúng ta sẽ tạo một thư mục FTP hoạt động như là chroot với quyền ghi dữ liệu được kích hoạt, sẽ chịu trách nhiệm cho việc giữ các file được chia sẽ. sử dụng lệnh này để tạo một thư mục FTP:

sudo mkdir /home/alex/ftp

Chọn ownership bằng lệnh sau:

sudo chown nobody:nogroup /home/alex/ftp

Cuối cùng, bỏ quyền ghi cho thư mục đó:

sudo chmod a-w /home/alex/ftp

Giờ hãy dùng lệnh sau để xác nhận lại phân quyền:

sudo ls -la /home/alex/ftp

Kết quả sẽ tương tự như sau:

total 8
dr-xr-xr-x 2 nobody nogroup 4096 Jun 29 11:32 .
drwxr-xr-x 3 alex alex 4096 Jun 29 11:32 ..

Ở bước tiếp theo, chúng ta sẽ tạo file chứa thư mục và phân quyền sở hữu:

sudo mkdir /home/alex/ftp/files
sudo chown alex:alex /home/alex/ftp/files

Cuối cùng, thêm một file test vào thư mục này để thử nghiệm kết quả::

 echo "vsftpd sample file" | sudo tee /home/alex/ftp/files/sample.txt

Bước 4 – Cấu hình vsftpd

Bước tiếp theo là thiết lập FTP server trên Ubuntu VPS, chúng tôi sẽ cấu hình vsftpd và kết nối FTP. Trong bài hướng dẫn này, chúng tôi sẽ cho phép một người dùng duy nhất kết nối với FTP sử dụng tài khoản local shell. 2 điểm cần thiết để cấu hình đã được đặt sẵn trong file cấu hình (vsftpd.conf). Trước tiên bạn hãy xác nhận file cấu hình có cài đặt giống như chúng tôi đề cập ở trên chưa, bằng cách sử dụng nano command:

sudo nano /etc/vsftpd.conf
. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
. . .

Trong cùng một file, chúng tôi sẽ loại bỏ # và kích hoạt write_enable:

. . .
write_enable=YES
. . ..

Chroot cũng sẽ được bỏ dấu ghi chú để đảm bảo người dùng  kết nối qua FTP chỉ có quyền truy cập vào thư mục cho phép:

. . .
 chroot_local_user=YES
 . . .

Một vài giá trị mới sẽ cần thêm bằng tay. Bạn có thể dễ dàng dán vào cuối file. Đầu tiên user_sub_token sẽ cần được thêm vào đường dẫn thư mục local_root. Việc này sẽ cho phép file cấu hình hoạt động được với user hiện tại và các user khác nếu được thêm sau này:

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

Để đảm bảo đủ số lượng kết nối, chúng ta sẽ hạn chế số port được dùng trong file cấu hình như sau:

pasv_min_port=40000
pasv_max_port=50000

Trong bài hướng dẫn này, chúng tôi sẽ cho phép truy cập theo từng trường hợp cụ thể vì vậy chúng tôi sẽ cấu hình cho phép những user nào được gán quyền mới được truy cập trong danh sách những user có thể truy cập như sau:

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

Flag userlist_deny chịu trách nhiệm xử lý logic này; khi đặt thành “NO”, chỉ những user được chọn trong danh  sách có quyền truy cập. Khi hoàn tất, click  CTRL+X và xác nhận thay đổi.

Cuối cùng, chúng tôi sẽ tạo và thêm user vào file:

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

 Kiểm tra user có đang hoạt động không bằng lệnh sau:

cat /etc/vsftpd.userlist

 Kết quả sẽ là “alex”, theo hình là alex đã được thêm vào server Ubuntu:

ftp user được thêm vào ubuntu vps server

Khởi động lại daemon bằng câu lệnh sau để tải lên thay đổi:

sudo systemctl restart vsftpd

Bước 5 – Bảo mật FTP

Mặc định, FTP sẽ không thực hiện mã hóa dữ liệu, vì vậy chúng ta sẽ thiết lập TTL/SSL để truyền dữ liệu an toàn hơn. Bước đầu tiên, chúng tôi sẽ cần tạo SSL certificate và sử dụng nó cho Ubuntu FTP server. Để tạo chứng chỉ thực hiện lệnh sau:

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

Flag days khiến cho chứng chỉ có hiệu lực một năm với khóa private RSA 2048-bit trong cùng một lệnh. Khi hoàn tất, điền hông tin cá nhân phù hợp trong các trường hiện ra.

Sau khi hoàn tất tạo chứng chỉ, mở lại file cấu hình lần nữa:

sudo nano /etc/vsftpd.conf

Ở cuối file sẽ bao gồm 2 dòng bắt đầu với “_rsa”. Đặt dấu ghi chú như sau:

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Thay vào đó chúng ta sẽ trỏ file cấu hình tới chứng chỉ chúng ta vừa tạo, thêm những dòng sau vào:

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

Giờ chúng ta sẽ kích hoạt SSL và đảm bảo chỉ có khách hàng có SSL có thể liên hệ với chúng ta. Đổi giá trị ssl_enable thành YES:

ssl_enable=YES

Bây giờ hãy thêm những dòng sau vì lý do an toàn: (không cho phép kết nối nặc danh qua SSL)

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Cấu hình server sử dụng TLS:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Tại đây chúng ta sẽ thêm 2 lựa chọn. Đầu tiên, tái sử dụng SSL là việc không cần thiết vì nó dẫn tới gãy kết nối FTP do quá nhiều kết nối từ FTP clients. Thứ 2, chúng ta sẽ tăng tính bảo mật cho encryption cipher suits, sẽ dẫn đến khóa dài bằng hoặc hơn 128 bits.

require_ssl_reuse=NO
ssl_ciphers=HIGH

Hãy khởi động lại để áp dụng các thay đổi mới:

sudo systemctl restart vsftpd

Tốt lắm! Bây giờ bạn đã cấu hình thành công FTP trên Ubuntu VPS để hoạt động với giao thực SSL/TLS.


Bước 6 – Thử kết nối tới ftp server bằng FileZilla

Ngày nay, hầu hết các FTP clients đều hỗ trợ TLS encryptions, vì vậy hãy kiểm tra thử xem Uuntu có hoạt động hiệu quả như mong muốn không. Để kiểm thử kết nối, hãy sử dụng FileZilla FTP Client. Mở FileZilla, click vào icon Site Manager.

filezilla-site-manager

Click vào nút New Site và điền vào thông tin Ubuntu FTP server.

Thêm thông tin ubuntu FTP server

Điền toàn bộ thông tin cần thiết với thông tin Ubuntu FTP server vừa tạo. Vì chúng ta đã cấu hình sử dụng TLS, hãy đánh dấu encryption là explicit FTP over TLS. Kết quả cuối cùng sẽ như sau:

cấu hình kết nối bảo mật cho FTP server

Khi sẵn sàng, hãy click vào nút Connect và màn hình sẽ hiển thị thông tin nhập pass FTP.

điền mật khẩu FTP user để kết nối qua Filezilla

Cuối cùng, bạn sẽ cần xác thực  SSL certificate của FTP server trên Ubuntu VPS.

xác thực ftp server certificate

Sau khi xác thực, thư mục gốc sẽ hiển thị như hình sau với file mẫu:

kết nối thành công tới ubuntu ftp server

Vậy là xong! Bây giờ bạn đã có thể thực thi thao tác chuyển dữ liệu từ máy tính của bạn sang Ubuntu FTP server và ngược lại.


Lời kết

Trong bài hướng dẫn này, chúng tôi đã chỉ bạn từng bước một từ việc tạo một user local đến truyền dữ liệu an toàn giữa FTP client và Ubuntu FTP server với SSL/TLS. Chúng tôi cũng đã kiểm tra kết quả cuối cùng bằng FileZilla để chắc rằng mọi thứ hoạt động ổn định.


Nguồn: https://www.hostinger.vn/huong-dan/lam-nao-de-dung-ftp-server-tren-ubuntu-vps