I'm 99 - Tutorial

Hướng dẫn cài FTP Server trên CentOS siêu đơn giản với ProFTPD

Bạn đang sử dụng VPS để làm webserver cho khách hàng. Và khách hàng yêu cầu bạn cung cấp tài khoản FTP để khách có thể download và upload dữ liệu lên website của họ? Giải pháp lúc này là bạn cần cài đặt ProFTPD làm FTP Server và tạo account cho khách để họ có quyền download và upload file 🙂

Cài đặt proFTPD

Trong bài viết này mình sử dụng phần mềm Bitvise SSH Client để kết nối với VPS. Đọc bài hướng dẫn sử dụng Bitvise SSH Client để quản trị VPS nhé

Hướng dẫn cài đặt FTP Server đơn giản với ProFTPD

Mở cửa sổ Terminal và gõ lệnh dưới (lưu ý không gõ hoặc copy dấu #)

# yum install epel-release -y 
# yum install proftpd -y

Mặc định cấu hình của ProFTPD được lưu tại /etc/proftpd.conf

Lưu ý: Thiết lập DefaultRoot ~ khiến các user không thể truy cập FTP ra ngoài thư mục gốc. Tiếp theo, thêm /bin/false vào cuối file /etc/shells với lệnh sau:

# echo "/bin/false" >> /etc/shells

Đảm bảo trong /etc/shells/ có /sbin/nologin hoặc /bin/false

Sử dụng lệnh nano để xem file /etc/shells/ đã cấu hình đúng hay chưa

nano /etc/shells

Nếu thấy nội dung như dưới đây là được

/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/false

Bấm Ctrl + X để thoát nano

Tự khỏi động (Auto start) ProFTPD mỗi khi hệ thống của vps được chạy

Để ProFTPD tự khởi động cùng hệ thống, bạn thực thi 2 lệnh dưới đây

# service proftpd start 
# chkconfig proftpd on

Cách cấu hình ProFTPD

Mở port 21 trên Centos

Mở port truy cập FTP – port 21 trong thiết lập tường lửa (iptables, firewalld, csf) của VPS. Mặc định CentOS6 sử dụng IPtables và CentOS7 là FirewallD. Nhưng nếu bạn không thích thằng FirewallD thì có thể tắt nó đi và cài lại thằng IPtables truyền thống.

Kiểm tra trạng thái của FirewallD bằng lệnh.

systemctl status firewalld

Nếu thấy có thông báo active:running nghĩa là Firewalld đang được chạy, bạn tắt nó đi bằng cách

systemctl stop firewalld

Tắt firewalld khởi động cùng hệ thông

systemctl disable  firewalld

Cài đặt iptables cho Centos 7 làm firewall mặc định

Tất nhiên do firewalld thay thế cho iptables nên iptables không được cài đặt mặt định, hãy làm việc này thủ công

# yum -y install iptables-services

Vậy là iptables đã được cài đặt, lúc này bạn cần chạy lệnh dưới đây để iptables sẽ được khởi động cùng hệ thống

# systemctl enable iptables
# systemctl start iptables

Kiểm tra iptables đã hoạt động hay chưa

# systemctl status iptables

Nếu thấy Active: active (exited) vậy là OK rồi.

Mở port 21 trên Centos

# iptables -I INPUT -p tcp --dport 21 -j ACCEPT
# service iptables save 
# service iptables restart

Tạo FTP User trên centos

ProFTPD có thể cấu hình sử dụng user của hệ điều hành (Local User) hoặc user ảo dành riêng cho FTP (Virtual User). Các bạn chỉ có thể lựa chọn cách thức đăng nhập Local User hoặc Virtual User

2. Tạo FTP user

ProFTPD có thể cấu hình sử dụng user của hệ điều hành (Local User) hoặc user ảo dành riêng cho FTP (Virtual User). Các bạn chỉ có thể lựa chọn cách thức đăng nhập Local User hoặc Virtual User

2.1. Local user

Bạn có thể sử dụng user của hệ điều hành Linux – Local User để đăng nhập FTP Server, trừ các user trong /etc/ftpusers. Khi đó, ProFTPD xác thực đăng nhập bằng mod_auth_unix

Tạo user mới useradd với các tùy chọn:

  • -g thiết lập user vào group. Trong HocVPS Script, các thư mục web thuộc group nginx. Để dễ dàng trong việc chỉnh sửa, bạn nên add user vào group nginx và cho phép chỉnh sửa đối với group owner – nginx.
  • -s thiết lập shell đăng nhập. Trong đó, shell sbin/nologin hoặc /bin/false chặn truy cập SSH. Khi đó, user được tạo chỉ có thể đăng nhập trên FTP, không thể đăng nhập SSH cũng như chạy lệnh hệ thống.
  • -d thiết lập thư mục gốc của user.

Như vậy, để tạo FTPuser 99tut chỉ có thể truy cập thư mục /home/99tut.com/, đồng thời không thể đăng nhập SSH:

# useradd 99tut -g nginx -s /sbin/nologin -d /home/99tut.com/

Rồi tiến hành thiết lập password cho user vừa tạo: # passwd 99tut

Lưu ý: Nếu muốn chỉnh sửa user đã được tạo: # usermod -a -G nginx 99tut -s /sbin/nologin

Thiết lập quyền chỉnh sửa của Group Owner Nginx đối với thư mục web:

# chmod -R g+rw /home/99tut.com/

2.2. Virtual User

Virtual User là user ảo được tạo bởi FTPassWD, chỉ có thể sử dụng trên FTP (không phải user hệ thống Linux). Khi đó, ProFTPD xác thực đăng nhập bằng mod_auth_file.

Chương trình ProFTPD Utilities với nhiều công cụ nhỏ bên trong sẽ giúp thiết lập, quản lý ProFTPD. Trong đó, công cụ ftpasswd dùng để thiết lập Virtual User. Cài đặt:

# yum install proftpd-utils -y

Tạo thư mục lưu thông tin đăng nhập Virtual User:

# mkdir /etc/proftpd
# touch /etc/proftpd/passwd /etc/proftpd/group
# chown -R nobody:nobody /etc/proftpd

Mở file /etc/proftpd.conf để chỉnh sửa cấu hình ProFTPD

Tìm 2 dòng này

AuthPAMConfig                   proftpd
AuthOrder                       mod_auth_pam.c* mod_auth_unix.c

Comment 2 dòng đó bằng cách thêm dấu # ở trước mỗi dòng

Tìm nhanh bằng cách: Mở file proftpd.conf bằng notepad++, sau đó bấm Ctrl + F và tìm từ AuthPAMConfig

Tiếp theo, chèn xuống dưới 2 dòng vừa comment phía trên, đoạn code sau

AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/passwd
AuthGroupFile /etc/proftpd/group
RequireValidShell off

Tạo user ftp mới bằng dòng lệnh sau (UID và GID bạn nhập tùy ý số lớn hơn 500)

# ftpasswd --passwd --name=99tut --uid=1000 --gid=1000 --home=/home/99tut.com/ --shell=/sbin/nologin --file=/etc/proftpd/passwd

Trong đó --name=99tut bạn thay bằng user ftp bạn muốn tạo

--home=/home/99tut.com/ là đường dẫn tới folder website, nơi tài khoản tut99 có thể truy cập vào.

Bạn sẽ thấy thông báo

ftpasswd: using alternate file: /etc/proftpd/passwd 
ftpasswd: creating passwd entry for user 99tut 
Password: #nhập_mật_khẩu

Password: #nhập_mật_khẩu bạn nhập mật khẩu muốn sử dụng tại đây

Thiết lập quyền chỉnh sửa với thư mục web :

# chmod -R o+rw /home/99tut.com/

Rồi tiến hành restart service: service proftpd restart

Vậy là xong rồi đấy, giờ bạn có thể kết nối FTP đến server sử dụng account đã tạo ở trên. Đối với Windows OS, các bạn có thể sử dụng File Zilla để đăng nhập.

Trên quan điểm cá nhân của mình và của nhiều pro khác thì các bạn nên cấu hình đăng nhập chỉ bằng Virtual User.

3. Một số lỗi thường gặp

– Quá trình Upload gặp lỗi PassiveMode thì chỉnh TransferMode sang Active trên FTP Client. Trong FileZilla là Edit – Settings – Connection – FTP – Transfer Mode.

– Nếu đã thiết lập tường lửa Iptables và chuyển ActiveMode mà vẫn không thể kết nối thì bạn thêm giá trị ip_conntrack_ftp vào /etc/sysconfig/iptables-config
Cụ thể là IPTABLES_MODULES=”ip_conntrack_ftp”. Sau đó tiến hành restart Iptables
Chỉ áp dụng CentOS 6 và nếu VPS không có module ip_conntrack_ftp trong hệ thống thì cần yêu cầu support thêm thủ công

Thái Dương

Là một người đam mê công nghệ, thích khám và thích phá. Blog này tôi chia sẻ những gì tôi biết và chia sẻ những kinh nghiệm trong quá trình tìm hiểu và phá phách với mọi người. Giúp mọi người làm đúng, đừng để sai như tôi :p

Add comment

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.

Most popular

Most discussed