Hướng Dẫn Cài đặt Máy Chủ FTP Với VSFTPD Trên Ubuntu 20.04

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.confanonymous_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.conflocal_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.confchroot_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.confwrite_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.confpasv_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.confuserlist_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.confrsa_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.confssl_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.confallow_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_configDenyUsers 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!

Từ khóa » Cài đặt Ftp Server Trên Ubuntu