Hướng dẫn cài đặt máy chủ FTP với VSFTPD trên Ubuntu 20.04
BÀI VIẾT

Hướng dẫn cài đặt máy chủ FTP với VSFTPD trên Ubuntu 20.04

135
author Nguyễn Ngọc Đang - 2021-12-02 15:00:52 (GMT+7)

Bạn không sử dụng Ubuntu 20.04?
Xem bài viết cho các distro khác

Giới thiệu

FTP là chữ viết tắt của File Transfer Protocol đây là một giao thức giúp chúng ta dễ dàng trao đổi các dữ liệu giữa client với server và ngược lại. Với FTP, chúng ta sẽ có quyền quản lý toàn bộ các dữ liệu dạng tập tin và thư mục có trên server ngoại trừ database.

Trong bài viết này sẽ hướng dẫn cách cài đặt máy chủ FTP với vsftpd trên Ubuntu 20.04 có sử dụng SSL/TLS.

Cập nhật hệ thống

Để đảm bảo rằng tất cả các phụ thuộc của vsftpd đều được cập nhật, hãy thực thi lệnh bên dưới:

bash (root)
apt-get update && apt-get upgrade

Trong quá trình cập nhật hệ thống chúng ta chờ từ 5 phút đến 15 phút.

Cài đặt vsftpd

Chúng ta thực thi lệnh bên dưới để tiến hành cài đặt vsftpd:

bash (root)
apt install vsftpd -y

Sau khi cài đặt thành công chúng ta có thể kiểm tra version của vsftpd như sau:

bash (root)
vsftpd -v
Kết quả
vsftpd: version 3.0.3

Chúng ta tiến hành thực thi lệnh sau để vsftpd có thể khởi động cùng với hệ thống.

bash (root)
systemctl start vsftpd && systemctl enable vsftpd

Tiến hành kiểm tra trạng thái của vsftpd:

bash (root)
systemctl status vsftpd
Kết quả
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-11-29 13:30:41 +07; 10min ago
   Main PID: 1221 (vsftpd)
      Tasks: 1 (limit: 4621)
     Memory: 600.0K
     CGroup: /system.slice/vsftpd.service
             └─1221 /usr/sbin/vsftpd /etc/vsftpd.conf

Nov 29 13:30:41 ngocdang2 systemd[1]: Starting vsftpd FTP server...
Nov 29 13:30:41 ngocdang2 systemd[1]: Started vsftpd FTP server.

Cấu hình firewall

Đối với hệ điều hành Ubuntu thì firewall UFW là firewall mặc định. Do đó, chúng ta cần phải cấu hình firewall UFW để mở port cho FTP nên trước hết bạn hãy kiểm tra trạng thái hiện tại:

bash (root)
ufw status
Kết quả
Status: active

Thực hiện mở các port 20 (FTP command port), 21 (FTP data port), 990 (TLS FTP data port) và dải port 39000-40000 bằng cách thực hiện các câu lệnh sau:

bash (root)
ufw allow 20:21/tcp
ufw allow 990/tcp
ufw allow 39000:40000/tcp

Tiến hành kiểm tra kết quả sau khi đã mở port:

bash (root)
ufw status
Kết quả
Status: active

To                         Action      From
--                         ------      ----
20:21/tcp                  ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
39000:40000/tcp            ALLOW       Anywhere
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
39000:40000/tcp (v6)       ALLOW       Anywhere (v6)

Cấu hình vsftpd

Sau khi đã tiến hành mở các port cần thiết trên firewall chúng ta sẽ tiến hành cầu hình vsftpd bằng cách thực hiện chỉnh 1 số giá trị trong file /etc/vsftpd.conf bằng cách sử dụng trình soạn thảo quen thuộc.

Tiếp đến, tìm đến các dòng sau để thay đổi và chỉnh sửa như sau:

/etc/vsftpd.conf
anonymous_enable=YES => anonymous_enable=NO

Tìm đến dòng local_enable thay đổi giá trị thành yes, dòng này có nghĩa là chúng ta sẽ cho phép các user nội bộ login qua ftp

/etc/vsftpd.conf
local_enable=YES

Tiếp theo cần giới hạn người dùng chỉ có thể thao tác trên thư mục cụ thể.

/etc/vsftpd.conf
chroot_local_user=YES

Chúng ta có thể cho phép quyền ghi để có thể kích hoạt chức năng upload trên FTP Server.

/etc/vsftpd.conf
write_enable=YES

Do vsftpd có thể sử dụng bất kì port nào cho các kết nối passive FTP. Vì vậy nên chúng ta thực hiện cấu hình minimum port và maximum port với dòng cấu hình sau:

/etc/vsftpd.conf
pasv_min_port=39000
pasv_max_port=40000

Ngoài ra chúng ta cũng có thể giới hạn những người dùng nào có thể đăng nhập vào FTP Server, thêm đoạn cấu hình sau:

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

Sau đó thực hiện lưu file lại và thoát ra. Ta dùng lệnh sau để khởi động lại dịch vụ vsftpd.

bash (root)
service vsftpd restart

Tạo và phân quyền user

Để thêm người dùng mới vào máy chủ FTP, chúng ta thao tác như sau:

bash (root)
adduser demoftp123host

Do khi nảy chúng ta có tiến hành cấu hình giới hạn người dùng được phép đăng nhập FTP server vì vậy cầm thêm người dùng mới tạo vào danh sách người dùng của FTP:

bash (root)
echo "demoftp123host" >> /etc/vsftpd.userlist

Sau khi thêm vào danh sách, chúng hãy tạo thư mục và thực hiện phân quyền cho user:

bash (root)
mkdir /home/demoftp123host/ftp
chown nobody:nogroup /home/demoftp123host/ftp/
chmod a-w /home/demoftp123host/ftp/

Kiểm tra lại quyền thư mục như sau:

bash (root)
ls -la /home/demoftp123host/ftp/
Kết quả
total 8
dr-xr-xr-x 2 nobody         nogroup        4096 Nov 29 15:12 .
drwxr-xr-x 3 demoftp123host demoftp123host 4096 Nov 29 15:12 ..

Tạo một thư mục để có thể lưu các file tải lên và phân quyền cho user được phép truy cập thư mục này:

bash (root)
mkdir /home/demoftp123host/ftp/upload
chown demoftp123host:demoftp123host /home/demoftp123host/ftp/upload

Kiểm tra lại kết quả như sau:

bash (root)
ls -la /home/demoftp123host/ftp/
Kết quả
total 12
dr-xr-xr-x 3 nobody         nogroup        4096 Nov 29 15:17 .
drwxr-xr-x 3 demoftp123host demoftp123host 4096 Nov 29 15:12 ..
drwxr-xr-x 2 demoftp123host demoftp123host 4096 Nov 29 15:17 upload

Thực hiện tạo 1 file bên trong thư mục upload.

bash (root)
touch 123hostdemo.txt

Thực hiện thêm nội dung cho file này:

bash (root)
echo Hello > 123hostdemo.txt

Kết nối FTP Client

Đối với hệ điều hành Linux

Chúng ta có thể thực hiện lệnh sau để thực hiện kiểm tra kết nối FTP.

bash (root)
ftp -p IP

Trong bài hướng dẫn này sẽ kiểm tra như sau:

bash (root)
ftp -p 103.97.125.162
Kết quả
220 (vsFTPd 3.0.3)
Name (103.97.125.162:root): test
530 Permission denied.
Login failed.

Kết quả bên trên cho chúng ta thấy người dùng bất kì không thể đăng nhập vào FTP Server. Vì chúng ta đã cấu hình giới hạn những người dùng có thể đăng nhập vào FTP Server.

bash (root)
ftp -p 103.97.125.162

Chúng ta sẽ sử dụng username và password mà chúng ta đã tạo ở bước trên để tiến hành đăng nhập FTP Server:

Kết quả
Connected to 103.97.125.162.
220 (vsFTPd 3.0.3)
Name (103.97.125.162:root): demoftp123host
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Sau khi chúng ta đã login thành công chúng ta. Thực hiện tải xuống file 123hostdemo.txt vừa tạo:

Kết quả
ftp> ls
227 Entering Passive Mode (103,97,125,162,154,232).
150 Here comes the directory listing.
dr-xr-xr-x    3 65534    65534        4096 Nov 29 15:17 ftp
226 Directory send OK.
ftp> cd ftp
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (103,97,125,162,153,221).
150 Here comes the directory listing.
drwxr-xr-x    2 1002     1003         4096 Nov 29 22:01 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (103,97,125,162,154,157).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               6 Nov 29 22:01 123hostdemo.txt
ftp> get 123hostdemo.txt
local: 123hostdemo.txt remote: 123hostdemo.txt
227 Entering Passive Mode (103,97,125,162,153,75).
150 Opening BINARY mode data connection for 123hostdemo.txt (6 bytes).
226 Transfer complete.
6 bytes received in 0.00 secs (60.4059 kB/s)
ftp>

Thực hiện đổi tên file 123hostdemo.txt để xác nhận người dùng được tạo có quyền write:

Kết quả
put 123hostdemo.txt client123hostdemo.txt
local: 123hostdemo.txt remote: client123hostdemo.txt
227 Entering Passive Mode (103,97,125,162,154,50).
150 Ok to send data.
226 Transfer complete.
6 bytes sent in 0.00 secs (41.5559 kB/s)
ftp> ls
227 Entering Passive Mode (103,97,125,162,155,90).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               6 Nov 29 22:01 123hostdemo.txt
-rw-------    1 1002     1003            6 Nov 29 22:06 client123hostdemo.txt

Thực thi lệnh sau để đóng kết nối FTP:

Kết quả
ftp> exit
221 Goodbye.

Trở về máy client chúng ta kiểm tra file 123hostdemo.txt đã được download về thành công chưa.

bash (root)
ls -la
Kết quả
total 64
-rw-r--r--  1 root root     6 Nov 29 22:05 123hostdemo.txt

Kiểm tra nội dung file:

bash (root)
cat 123hostdemo.txt
Kết quả
Hello

Đây chính là file mà chúng ta đã tạo ở bước trên tại FTP Server

Quay trở lại FTP Server kiểm tra file khi nảy client upload lên xem kết quả như nào:

bash (root)
ls -la /home/demoftp123host/ftp/upload
Kết quả
total 16
drwxr-xr-x 2 demoftp123host demoftp123host 4096 Nov 29 22:06 .
dr-xr-xr-x 3 nobody         nogroup        4096 Nov 29 15:17 ..
-rw-r--r-- 1 root           root              6 Nov 29 22:01 123hostdemo.txt
-rw------- 1 demoftp123host demoftp123host    6 Nov 29 22:06 client123hostdemo.txt

Như vậy là việc download và upload file ở client Linux đã thành công.

Đối với hệ điều hành Windows

Với hệ điều hành Windows chúng ta có thể sử dụng các phần mềm như là WinSCP, Cyberduck, FileZilla trong hướng dẫn này sẽ sử dụng FileZilla trên Windows để hướng dẫn việc kết nối FTP Server cũng như download file.

Chúng ta có thể thực hiện tải phần mềm FileZilla

Đây là giao diện của phần mềm FileZilla

Tiếp theo chúng ta cần thực hiện điền Host, Username, Password đây là thông tin FTP Server chúng ta cần kết nối đến:

Kết quả kết nối như trên.

Chúng ta có thể thực hiện download file từ FTP Server về máy tính như sau:

Hoặc chúng ta có thể thực hiện upload file từ máy tính cá nhân lên FTP Server

Như vậy là việc download và upload file ở client Window đã thành công.

Thiết lập LTS

Tại FTP Server

Để đảm bảo an toàn thì FTP cần thực hiện mã hoá kết nối sử dụng LTS vì vậy chúng ta cần phải có một chứng chỉ SSL và cấu hình vsftpd sử dụng chứng chỉ SSL này.

Chúng ta sẽ sử dụng openssl để tạo chứng chỉ như sau:

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

Sau khi đã tạo thành công chứng chỉ SSL thì chúng ta cần tiến hành cấu hình vsftpd sử dụng chứng chỉ SSL bằng cách chỉnh sửa file cấu hình tại /etc/vsftpd.conf

Thực hiện chỉnh sửa đường dẫn sau:

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

Tiếp tục thay đổi giá trị ssl_enable thành yes:

/etc/vsftpd.conf
ssl_enable=YES

Chúng ta cần thêm một số cấu hình để tăng bảo mật cho SSL:

/etc/vsftpd.conf
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Sau đó thực hiện lưu file lại và thoát ra. Ta dùng lệnh sau để khởi động lại dịch vụ vsftpd.

bash (root)
service vsftpd restart

Tại FTP Client

Ở trên chúng ta đã cấu hình mã hoá FTP với SSL/TLS hiện tại chúng ta có thể sử dụng Filezilla để kiểm tra.

Mở Filezilla, chọn Site Manager bên trên:

Chọn tiếp New Site để thêm thông tin FTP Server mới:

Thực hiện điền thông tin FTP Server. Do mặc định port FTP là 21 nên chúng ta có thể để trống ô port.

Lưu ý: Chọn Require explicit FTP over TLS do FTP Server đã được mã hoá TLS.

Nếu kết nối thành công, chúng ta sẽ nhận được cửa sổ như bên dưới. Chọn Always trust this certificate in future sessions để không phải hỏi như lần sau.

Bảo mật vsftpd

Theo như mặc định thì khi tạo một người dùng FTP, nếu không cấu hình giới hạn, thì người dùng đó có thể SSH vào Server. Chính vì vậy, để đảm bảo an toàn chúng ta nên tắt SSH cho những người dùng FTP để nâng cao bảo mật.

Cách 1: Tạo shell script

Tạo một shell script thực thi /bin/ftponly như bên dưới:

bash (root)
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' > /bin/ftponly
chmod a+x /bin/ftponly

Thêm đoạn shell trên vào /etc/shells:

bash (root)
echo "/bin/ftponly" >> /etc/shells

Thay đổi đoạn shell của người dùng FTP:

bash (root)
usermod demoftp123host -s /bin/ftponly

Cách 2: Cấu hình trong dịch vụ ssh

Chúng ta có thể sử dụng trình soạn thảo quen thuộc để cấu hình file /etc/ssh/sshd_config không cho User FTP truy cập SSH và SFTP bằng cách thực hiện thêm vào dòng sau:

/etc/ssh/sshd_config
DenyUsers user_name

Lưu ý: Không nhập tên người dùng root tại đây hoặc bất kỳ tên người dùng chúng ta sử dụng để truy cập SSH nếu không chúng ta không thể truy cập SSH

Lưu lại file cấu hình và thoát.

Khởi động lại dịch vụ SSH.

bash (root)
service sshd restart

Như vậy chúng ta có thể không cho User FTP truy cập SSH và SFTP.

Bài viết trên đã hoàn tất việc cấu hình và cài đặt vsftpd trên Ubuntu 20.04

Chúc các bạn thành công!


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Hướng dẫn cài đặt timezone và đồng bộ thời gian trên Ubuntu 20.04
Hướng dẫn cài đặt timezone và đồng bộ thời gian trên Ubuntu 20.04
Hướng dẫn cài đặt Nginx trên Ubuntu 20.04
Hướng dẫn cài đặt Nginx trên Ubuntu 20.04
Hướng dẫn cấu hình mạng trên Ubuntu 20.04
Hướng dẫn cấu hình mạng trên Ubuntu 20.04

Cloud VPS tại 123HOST

Hiệu năng, ổn định và bảo mật

Xem thêm

Trở thành tác giả

Được trả phí từ 100k đến 800k/ mỗi bài viết

Chi tiết
Thông tin tác giả
1 Bình luận

Tính năng đang được phát triển

Đang tải bình luận