Cài Đặt Và Cấu Hình ftp Server Với vsftpd
This post is also available in: English
Hiện tại có rất nhiều phần mềm có thể cài làm FPT Server được. Trong bài mình sử dụng vsFTPD – Very Secure FTP Daemon đây là phần mềm FTP tốt nhất hiện nay, tốc độ nhanh cấu hình đơn giản. Bạn nào không thích có thể chuyển qua dùng ProFTPD hoặc Pure-FTPD cũng tốt cả.
Mình sử dụng VPS ở Vultr, nội dung bài áp dụng cho cả Linux CentOS 7/Ubuntu 16.04 và các bản cũ hơn.
Bạn có thể dùng VPS của Linode hoặc DigitalOcean đều được cả : Danh sách nhà cung cấp VPS uy tín.
1. CÀI ĐẶT VSFTPD
Lệnh cài đặt vsFTPD
CentOS 7
yum install vsftpd
Ubuntu 16.04
apt-get install vsftpd
Khởi động vsftpd
systemctl start vsftpd
Cho phép tự chạy vsftpd khi khởi động hệ điều hành
systemctl enable vsftpd
Kiểm tra sợ bộ xem vsftpd hoạt động hay chưa, chạy lệnh.
telnet localhost 21
Kết quả như trên là thành công, không cài telnet bạn dùng lệnh netstat -tulpn
cũng được thấy đang listen trên Port 21 là ok.
2. CẤU HÌNH VSFTPD TRÊN CENTOS 7
Giờ chúng ta mở file config vsftpd ra thay đổi một số thông số cho phù hợp. Mặc định file config vsftpd nằm trong /etc/vsftpd/vsftpd.conf
. Trước khi thay đổi thông số nào bạn nhớ copy một bản backup để có vấn đề gì còn phục hồi lại.
Mở file cấu hình.
vi /etc/vsftpd/vsftpd.conf
Trước tiên chúng ta disable anonymous user đi, đây là user nặc danh mặc định nó có quyền truy cập FTP Server mà không cần mật khẩu.
anonymous_enable=NO
Tiếp theo là khai báo local_enable để cho phép hay không cho phép local user truy cập FTP Server. vsFTPD có thể được cấu hình dùng user của hệ điều hành(Local User) hoặc dùng user ảo (Virtual User) giữa hai loại tài khoản này có sự khác nhau về sự linh hoạt và vấn đề bảo mật. Trong bài này chúng ta sẽ dùng Local User, còn Virtual User xin để dịp khác.
Khi dùng Local User, VsFTPD sẽ sử dụng tài khoàn trong /etc/passwd
, bạn chọn YES cho khai báo này.
local_enable=YES
Đến write_enable nếu chọn Yes thì local user mới upload, delete file được đồng nghĩa với việc user có thể dùng các FTP Command bao gồm STOR, DELE, RNFR, RNTO, MKD, RMD, APPE and SITE. Xem ý nghĩa và command khác tại đây.
Chỉ muốn local user download file thì bạn để NO, còn mình chọn YES.
write_enable=YES
Khai báo listen, mặc định vsftpd dùng IPv6, để dùng IPv4 bạn chọn Yes
listen=YES
Không dùng IPv6
listen_ipv6=NO
Cấu hình vsftpd cơ bản như thế cũng xài được rồi, bây giờ bạn có thể tạo local user rồi dùng Firezilla login vào FTP Server là sử dụng được ngay.
3. CẤU HÌNH VSFTPD TRÊN UBUNTU 16.04
File cấu hình vsftpd trên Ubuntu có đường dẫn.
/etc/vsftpd.conf
Tất cả các thông số trên CentOS bạn bê nguyên sang Ubuntu cho mình, nhưng ftp chưa chạy được đâu nhé.
Thực chất phần này thiên về fix lỗi vsftpd trên Ubuntu hơn là cấu hình. Có một thông số bạn cần chú ý:
pam_service_name=vsftpd
Với giá trị mặc định như trên, vsftpd sẽ gọi đến file /etc/pam.d/vsftpd
là file PAM xác thực cho dịch vụ vsftpd. Mở file ra bạn thấy như bên dưới.
Bạn nhìn chỗ khoanh đỏ, pam_shells.so là nguồn cơn của lỗi. Nếu dùng Filezilla thử login vào FTP Server bạn sẽ thấy thông báo:
Response: 331 Please specify the password. Command: PASS ****** Response: 530 Login incorrect. Error: Critical error: Could not connect to server
Nguyên nhân do pam_shells.so khi chạy sẽ sử dụng Shell (/bin/bash, /bin/sh…) của Local User, mà Ubuntu không tự tạo shell khi tạo user. Để sửa lỗi bạn phải tạo shell cho user thôi.
Lệnh:
useradd -d /home/user1 -s /bin/bash user1
Giờ thì FTP Server của bạn đã hoạt động được rồi.
4. BẢO MẬT FTP SERVER
Cấu hình thêm một chút cho an toàn, để cấu hình bảo mật cho FTP Server bạn thêm cho mình hai dòng bên dưới, đây là cách chroot FPT rất cần thiết với máy chủ có nhiều user. Mục đích là đảm bảo mỗi user được tạo ra sẽ bị giới hạn truy cập trong Home Directory của nó, không thể view hoặc access vào bất kỳ thư mục nào khác.
chroot_local_user=YES # kích hoạt tính năng chroot cho local user. allow_writeable_chroot=YES # Phải có dòng này chroot mới hoạt động chuẩn được nhé.
Tiếp theo là userlist_enable, cái này quan trọng không kém. Nếu được gán giá trị YES thì tất cả các user được liệt kê trong file /etc/vsftpd/user_list
sẽ không thể access vào FTP Server được. Tất cả các user trong user_list đều là những tài khoản quan trọng dùng để vận hành máy chủ, tốt nhất không dùng cho FTP thì hơn. Nếu giá trị là NO thì ngược lại, toàn bộ những user trong user_list sẽ truy cập được FTP Server.
Mình chọn YES.
userlist_enable=YES
Khi chroot user đồng nghĩa với việc user không truy cập được vào đâu ngoài thư mục của mình. Nhưng trong quá trình sử dụng nhiều khi bạn lại muốn tạo ra một ngoại lệ (exception) để một user nào đó có thể đi vào tất cả các thư mục ngó nghiêng linh tinh một tí thì làm thế nào ?
Để làm được điều đó, bạn thêm vào hai dòng bên dưới.
chroot_list_enable=YES # Dòng này vô hiệu hóa Chroot. chroot_list_file=/etc/vsftpd/chroot_list # Dòng này tạo ra một file chứa danh sách các local user không bị giới hạn bởi chroot.
Bạn có thể dùng vi tạo file có tên là chroot_list
với đường dẫn như trên rồi thêm mỗi user vào một dòng.
Chú ý nếu gặp lỗi 500 OOPS: vsftpd: refusing to run with writable root inside chroot() bạn kiểm tra lại giá trị allow_writeable_chroot cho mình.
Cấu hình như trên là khá ổn rồi, bạn lưu lại file config vsftp ấn :wq
để thoát trình soạn thảo vi.
5. TẠO TÀI KHOẢN FTP
Cấu hình hoạt động và bảo mật FTP đã ok, để cho linh hoạt khi sử dụng FTP trên linux mình hướng dẫn thêm cách tạo user FTP.
Theo mặc định Local User được tạo ra trên linux có Home Directory là /home/user
. Tất cả dữ liệu user upload/download đều nằm trong thư mục /home/user cả.
Nhưng giờ mình không muốn dùng mặc định, muốn gom tất cả vào đường dẫn /var/ftp/user
thì làm thế nào ?
Bước 1 – Tạo Home Directory
Ví dụ mình sẽ tạo user1 có home directory là /var/ftp/user1
, chạy lệnh:
mkdir /var/ftp/user1
Bước 2 – Tạo User
CentOS 7
useradd -d /var/ftp/user1 -s /sbin/nologin user1
Ubuntu 16.04
useradd -d /var/ftp/user1 -s /usr/sbin/nologin user1
Ý nghĩa thông số:
-d
Thay đổi Home Directory sang /var/ftp/user1 , nếu không user tạo ra sẽ dùng có Home Directory mặc định là /home/user1.-s
Tạo Shell cho user1 không cho login vào server. Bạn nên dùng shellnologin
thay cho /bin/bash, /bin/sh như đã nói ở mục lục 3. Không chỉ FTP đâu mất tất cả user tạo cho dịch vụ POP3, SMTP bạn cũng nên dùng nologin để bảo mật hệ thống.
Chú ý: nếu một user2 được tạo ra trước đó sử dụng Home Directory mặc định, bạn có thể thay đổi bằng lệnh sau.
usermod -d /var/ftp/user2
Bước 3 – Thay đổi quyền sở hữu Home Directory
Thư mục tạo ra mặc định root:root quản lý, bạn phải chown lại cho thư mục.
chown user1:user1 -R /var/ftp/user1
6. FIREWALL VÀ SELINUX
Bạn kiểm tra lại Firewall và SELinux xem đã disable chưa, hầu hết các đơn vị cung cấp VPS đều disable theo mặc định rồi.
Tham khảo: Lỗi cơ bản trên linux.
Mình dùng VPS thì có thằng Vultr là không disable Firewall theo mặc định, không muốn disable thì bạn phải allow port cho FTP Server nhé, không lại kêu cấu hình đúng mà không chạy. Xen cách mở port trên một số firewall hay dùng.
Trên CentOS 7, mặc định dùng Firewalld
firewall-cmd --permanent --add-service=ftp firewall-cmd --reload
Trên Ubuntu 16.04, mặc định dùng UFW
ufw allow 21/tcp ufw reload
Bạn nào vẫn dùng iptables thì dùng lệnh này.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
Xong rồi nhé, bài viết đến đây thôi. Các bạn làm theo các bước như mình hướng dẫn nếu gặp vấn đề gì thì comment phát để mọi người cùng trao đổi.
Chúc thành công.
Source: https://www.thuysys.com/server-vps/ftp-server/cai-dat-va-cau-hinh-ftp-server-voi-vsftpd.html