Cài đặt và cấu hình VSFTPD làm FTP Server trên Ubuntu 20.04
18 tháng 7, 2023 bởi
Cài đặt và cấu hình VSFTPD làm FTP Server trên Ubuntu 20.04
iTricks
| Chưa có bình luận

1. Chuẩn bị môi trường

  • Ubuntu 20.04.
  • User có quyền sudo.

2. Cài đặt vsftpd

Code Snippet

Terminal Code

Copy code
      
sudo apt update
sudo apt install vsftpd
      
    

Tiếp theo, chúng ta cần sao lưu lại cài đặt vsfptd cũ nếu bạn muốn cài đặt vsftpd mới ghi đè lên version cũ:

Code Snippet

Terminal Code

Copy code
      
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
      
    


3. Cấu hình tưởng lửa cho vsftpd

Bạn cần phải cấu hình UFW (công cụ tường lửa trên Ubuntu 20.04) để 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:

Code Snippet

Terminal Code

Copy code
      
$ sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
      
    

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 35000-40000:

Code Snippet

Terminal Code

Copy code
      
sudo ufw allow 20:21/tcp
sudo ufw allow 990/tcp
sudo ufw allow 35000:40000/tcp
sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
20:21/tcp                  ALLOW       Anywhere
35000:40000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
35000:40000/tcp (v6)       ALLOW       Anywhere (v6)
      
    


4. Cấu hình vsftpd

Tiếp theo bạn cần cấu hình vsftpd bằng cách mở và chỉnh sửa file cấu hình:

Code Snippet

Terminal Code

Copy code
      
sudo nano /etc/vsftpd.conf
      
    

Để giới hạn chỉ cho người dùng nội bộ truy cập vào FTP thì bạn thêm dòng cấu hình sau:

Code Snippet

Terminal Code

Copy code
      
anonymous_enable=NO
local_enable=YES
      
    

Bạn cần cho phép quyền ghi để có thể kích hoạt chức năng upload trên FTP Server. Để làm điều đó, uncomment dòng sau:

Code Snippet

Terminal Code

Copy code
      
write_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ể. Để làm điều đó, bạn cần uncomment dòng sau:

Code Snippet

Terminal Code

Copy code
      
chroot_local_user=YES
allow_writeable_chroot=YES
      
    

vsftpd có thể sử dụng bất kì port nào cho các kết nối passive FTP. Vi 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:

Code Snippet

Terminal Code

Copy code
      
pasv_min_port=35000
pasv_max_port=40000
      
    

Cuối cùng là để 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:

Code Snippet

Terminal Code

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

Với đoạn cấu hình trên, bạn đã chỉ định người dùng có thể truy cập với username lưu tại /etc/vsftpd.userlist.


5. Cấu hình thư mục người dùng

Để thêm người dùng mới vào FTP Server, trong bài viết mình sẽ thực hiện thêm mới người dùng. Đầu tiên là tạo người dùng mới:

Code Snippet

Terminal Code

Copy code
      
sudo adduser itricks
      
    

Tiếp theo bạn cần thêm người dùng mới tạo vào danh sách người dùng của FTP:

Code Snippet

Terminal Code

Copy code
      
echo "itricks" | sudo tee -a /etc/vsftpd.userlist
      
    


Sau khi thêm vào danh sách, bạn hãy tạo thư mục cho người dùng đó:

Code Snippet

Terminal Code

Copy code
      
sudo mkdir /home/itricks/ftp
sudo chown nobody:nogroup /home/itricks/ftp
sudo chmod a-w /home/itricks/ftp
      
    

Sau khi tạo xong thư mục, kiểm tra lại quyền thư mục như sau:

Code Snippet

Terminal Code

Copy code
      
sudo ls -al /home/itricks/ftp
total 8
dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
drwxr-xr-x 3 itricks itricks 4096 Jun  7 13:08 ..
      
    

Tiếp theo, bạn cần tạo thư mục có quyền write để có thể lưu các file tải lên:

Code Snippet

Terminal Code

Copy code
      
sudo mkdir /home/itricks/ftp/upload
sudo chown itricks:itricks /home/itricks/ftp/upload
      
    

Lúc đó, thư mục dành cho việc tải lên sẽ có quyền như bên dưới:

Code Snippet

Terminal Code

Copy code
      
sudo ls -al /home/itricks/ftp
total 12
dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
drwxr-xr-x 3 itricks itricks 4096 Jun  7 13:08 ..
drwxr-xr-x 2 itricks itricks 4096 Jun  7 13:10 upload
      
    

Để tiện cho việc test thử, bạn nên tạo một file test.txt ttrong thư mục upload:

Code Snippet

Terminal Code

Copy code
      
echo "vsftpd test file" | sudo tee /home/itricks/ftp/upload/test.txt
      
    


6. Kiểm tra kết nối FTP

Sau khi cấu hình xong, bạn hãy thử kiểm tra kết nối FTP như sau:

Code Snippet

Terminal Code

Copy code
      
ftp -p 45.118.146.166
Connected to 45.118.146.166.
220 (vsFTPd 3.0.3)
Name (45.118.146.166:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>
      
    

Như bên trên, người dùng bất kì không thể đăng nhập vào FTP Server. Ta thử lại với người dùng mới tạo:

Code Snippet

Terminal Code

Copy code
      
ftp -p 45.118.146.166
Connected to 45.118.146.166.
220 (vsFTPd 3.0.3)
Name (45.118.146.166:default): itricks
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
      
    


Với người dùng được cấu hình thì bạn có thể đăng nhập thành công. Thực hiện tải xuống file test.txt vừa tạo:

Code Snippet

Terminal Code

Copy code
      
ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>
      
    

Tiếp tục thực hiện đổi tên file test.txt để xác nhận người dùng được tạo có quyền write:

Code Snippet

Terminal Code

Copy code
      
ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)
      
    

Cuối cùng đóng kết nối:


7. Mã hoá kết nối với SSL/TLS

Để có thể mã hoá kết nối FTP, bạn cần phải có một chứng chỉ SSL và cấu hình vsftpd sử dụng nó. Trong bài viết này, mình sẽ sử dụng openssl để tạo chứng chỉ như sau:

Code Snippet

Terminal Code

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

Sau khi có chứng chỉ, bạn cần cấu hình vsftpd:

Code Snippet

Terminal Code

Copy code
      
sudo nano /etc/vsftpd.conf
      
    

Tìm và uncomment đoạn cấu hình sau:

Code Snippet

Terminal Code

Copy code
      
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:

Code Snippet

Terminal Code

Copy code
      
ssl_enable=YES
      
    

Sau đó, bạn cần thêm một số cấu hình để tăng bảo mật cho SSL:

Code Snippet

Terminal Code

Copy code
      
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
      
    

Lưu lại các cấu hình bên trên và khởi động lại dịch vụ:

Code Snippet

Terminal Code

Copy code
      
sudo systemctl restart vsftpd
      
    


8. Kiểm tra TLS với FileZlilla

Sau phần cấu hình mã hoá FTP với SSL/TLS bên trên, bạn 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 bạn có thể để trống ô port. Bạn nhớ chọn Require explicit FTP over TLS do FTP Server đã được mã hoá TLS.

Nếu kết nối thành công, bạn 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. 


9. Tắt SSH trong vsftpd

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

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

Code Snippet

Terminal Code

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

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

Code Snippet

Terminal Code

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

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

Code Snippet

Terminal Code

Copy code
      
sudo usermod itricks -s /bin/ftponly
      
    


10. Kết luận

Như vậy, qua bài viết này, mình đã hướng dẫn bạn cài đặt vsftpd với SSL/TLS. Bạn có thể cân nhắc việc thay thế SFTP hoặc SCP với FTP mã hoá TLS như trên.

Đăng nhập để viết bình luận