FTP (File Transfer Protocol) là một mạng giao thức kết nối từ máy người dùng đến máy chủ, cho phép người dùng truyền đến và từ một máy tính từ xa.
Có nhiều máy chủ FTP nguồn mở có sẵn cho Linux. Các máy chủ phổ biến nhất và thường được sử dụng là PureFTPd , ProFTPD và vsftpd .
Trong hướng dẫn này, chúng tôi sẽ cài đặt vsftpd (Very Secure Ftp Daemon) trên CentOS 8. Đây là một máy chủ FTP ổn định, an toàn và nhanh chóng. Chúng tôi cũng sẽ hướng dẫn cho bạn cấu hình vsftpd để phân quyền và hạn chế người dùng vào thư mục chính của họ và mã hóa việc truyền dữ liệu bằng SSL / TLS.
Cài đặt vsftpd trên CentOS 8
Gói vsftpd có sẵn trong kho lưu trữ CentOS mặc định. Để cài đặt nó, hãy chạy lệnh sau:
dnf install vsftpd -y
Khi gói được cài đặt, hãy khởi động daemon vsftpd và cho phép nó tự động bắt đầu lúc khởi động:
systemctl enable vsftpd --now
Xác minh trạng thái dịch vụ:
systemctl status vsftpd
Đầu ra sẽ giống như thế này, cho thấy rằng dịch vụ vsftpd đang hoạt động và đang chạy:
● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s ago Process: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS) ...
Cấu hình vsftpd
Cài đặt vsftpd server được lưu trữ trong /etc/vsftpd/vsftpd.conf. Hầu hết các cài đặt đều được ghi rõ bên trong tệp. Đối với tất cả các tùy chọn có sẵn, hãy truy cập trang vsftpd chính thức .
Trong các phần sau, chúng ta sẽ xem xét một số cài đặt quan trọng cần thiết để định cấu hình cài đặt vsftpd an toàn.
Bắt đầu bằng cách mở tệp cấu hình vsftpd:
vi /etc/vsftpd/vsftpd.conf
1. Truy cập FTP
Chúng tôi sẽ chỉ cho phép người dùng trong mạng LAN truy cập vào máy chủ FTP, tìm anonymous_enable và local_enable như sau:
# /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES
2. Cho phép tải lên
Bỏ ghi chú write_enable cài đặt để cho phép thay đổi hệ thống folder và file, chẳng hạn như tải lên và xóa tệp.
# /etc/vsftpd/vsftpd.conf write_enable=YES
3. Phân quyền
Ngăn người dùng FTP truy cập bất kỳ tệp nào bên ngoài thư mục chính của họ bằng cách bỏ ghi chú chroot chỉ thị.
# /etc/vsftpd/vsftpd.conf chroot_local_user=YES
Theo mặc định, khi bật chroot, vsftpd sẽ từ chối tải tệp lên nếu thư mục mà người dùng bị khóa có thể ghi được. Điều này là để ngăn chặn một lỗ hổng bảo mật.
Sử dụng một trong các phương pháp dưới đây để cho phép tải lên khi đã bật chroot.
Phương pháp 1:
Phương pháp được khuyến nghị để cho phép tải lên là giữ cho chroot được bật và định cấu hình các thư mục FTP. Trong hướng dẫn này, chúng tôi sẽ tạo một thư mục ftp, thư mục này được phần quyền chroot và có thể upload dữ liệu lên.
# /etc/vsftpd/vsftpd.conf user_sub_token=$USER local_root=/home/$USER/ftp
Phương pháp 2.
Một tùy chọn khác là thêm chỉ thị sau vào tệp cấu hình vsftpd. Sử dụng tùy chọn này nếu bạn phải cấp quyền truy cập có thể ghi cho người dùng của mình vào thư mục chính của nó.
# /etc/vsftpd/vsftpd.conf allow_writeable_chroot=YES
4. Mở dải cổng kết nối FTP
vsftpd có thể sử dụng bất kỳ cổng nào cho các kết nối FTP. Chúng tôi sẽ chỉ định phạm vi range port và sau đó mở firewall cho phép kết nối.
Thêm các dòng sau vào tệp cấu hình:
# /etc/vsftpd/vsftpd.conf pasv_min_port=30000 pasv_max_port=31000
5. Giới hạn đăng nhập Người dùng
Để chỉ cho phép một số người dùng nhất định đăng nhập vào máy chủ FTP, hãy thêm các dòng sau vào sau userlist_enable=YES dòng:
# /etc/vsftpd/vsftpd.conf userlist_file=/etc/vsftpd/user_list userlist_deny=NO
Khi tùy chọn này được bật, bạn cần chỉ định rõ ràng người dùng nào có thể truy cập ftp server bằng cách thêm tên người dùng vào /etc/vsftpd/user_list danh sach đó.
6. Cấu hình bảo mật truyền với SSL / TLS
Để mã hóa truyền FTP bằng SSL/TLS, bạn cần phải có chứng chỉ SSL và định cấu hình máy chủ FTP để sử dụng.
Bạn có thể sử dụng chứng chỉ SSL hiện có do Tổ chức phát hành chứng chỉ đáng tin cậy ký hoặc tạo chứng chỉ tự ký.
Nếu bạn có miền hoặc miền phụ trỏ đến địa chỉ IP của máy chủ FTP, bạn có thể dễ dàng tạo chứng chỉ SSL Let’s Encrypt miễn phí .
Trong hướng dẫn này, chúng tôi sẽ tạo chứng chỉ SSL tự ký bằng openssl công cụ.
Lệnh sau sẽ tạo khóa cá nhân 2048-bit và chứng chỉ tự ký có hiệu lực trong 10 năm. Cả khóa cá nhân và chứng chỉ sẽ được lưu trong cùng một tệp:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
Khi chứng chỉ SSL được tạo, hãy mở tệp cấu hình vsftpd:
# vi /etc/vsftpd/vsftpd.conf
Tìm rsa_cert_filevà rsa_private_key_filechỉ thị, thay đổi giá trị của chúng thành pamđường dẫn tệp và đặt ssl_enablechỉ thị thành YES:
# /etc/vsftpd/vsftpd.conf rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES
Nếu không được chỉ định khác, máy chủ FTP sẽ chỉ sử dụng TLS để tạo kết nối an toàn.
Khởi động lại Dịch vụ vsftpd
Sau khi bạn chỉnh sửa xong, tệp cấu hình vsftpd (không bao gồm nhận xét) sẽ trông giống như sau:
# /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=NO tcp_wrappers=YES user_sub_token=$USER local_root=/home/$USER/ftp pasv_min_port=30000 pasv_max_port=31000 rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES
Lưu tệp và khởi động lại dịch vụ vsftpd để các thay đổi có hiệu lực:
# systemctl restart vsftpd
Mở tường lửa
Nếu bạn đang chạy, bạn cần cho phép lưu lượng FTP.
Để mở cổng 21( cổng lệnh FTP), cổng 20( cổng dữ liệu FTP) và 30000-31000(Phạm vi cổng thụ động), trên tường lửa của bạn, hãy nhập các lệnh sau:
# firewall-cmd --permanent --add-port=20-21/tcp # firewall-cmd --permanent --add-port=30000-31000/tcp
Tải lại các quy tắc tường lửa bằng cách nhập:
#firewall-cmd --reload
Tạo người dùng FTP
Để kiểm tra máy chủ FTP, chúng tôi sẽ tạo một người dùng mới.
Nếu bạn đã có người dùng mà bạn muốn cấp quyền truy cập FTP, hãy bỏ qua bước đầu tiên.
Nếu bạn đặt allow_writeable_chroot=YES trong tệp cấu hình của mình, hãy bỏ qua bước thứ 3.
Tạo người dùng mới có tên newftpuser:
# adduser newftpuser
Tiếp theo, bạn sẽ cần đặt mật khẩu người dùng :
# passwd newftpuser
Thêm người dùng vào danh sách người dùng FTP được phép:
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
Tạo cây thư mục FTP và đặt các quyền chính xác :
# mkdir -p /home/newftpuser/ftp/upload # chmod 550 /home/newftpuser/ftp # chmod 750 /home/newftpuser/ftp/upload # chown -R newftpuser: /home/newftpuser/ftp
Như đã thảo luận trong phần trước, người dùng sẽ có thể tải các tệp của nó lên ftp/upload thư mục trên server.
Tại thời điểm này, máy chủ FTP của bạn đã hoạt động đầy đủ và bạn có thể kết nối với máy chủ của mình bằng bất kỳ ứng dụng khách FTP nào có thể được cấu hình để sử dụng mã hóa TLS chẳng hạn như FileZilla .
Tắt quyền truy cập Shell
Theo mặc định, khi tạo người dùng, nếu không được chỉ định rõ ràng, người dùng sẽ có quyền truy cập SSH vào máy chủ.
Để vô hiệu hóa quyền truy cập trình bao, chúng tôi sẽ tạo một trình bao mới sẽ chỉ in một thông báo cho người dùng biết rằng tài khoản của họ bị giới hạn chỉ truy cập FTP.
Chạy các lệnh sau để tạo /bin/ftponlyshell và làm cho nó có thể thực thi được:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
# chmod a+x /bin/ftponly
Nối trình bao mới vào danh sách các trình bao hợp lệ trong /etc/shells :
echo "/bin/ftponly" | sudo tee -a /etc/shells
Thay đổi trình bao người dùng thành /bin/ftponly:
# usermod newftpuser -s /bin/ftponly
Sử dụng lệnh tương tự để thay đổi trình bao cho những người dùng khác mà bạn chỉ muốn cấp quyền truy cập FTP.
Nguồn: linuxize