Các bước cấu hình FTP Virtual User trên Linux

Chào mọi người, hôm nay mình tiếp tục giới thiệu với các bạn độc giả của THUY SYS DOT COM cách tạo Virtual User cho FTP Server trên máy chủ Linux hay nhiều người vẫn gọi là tạo tài khoản ảo. Trong bài mình vẫn sử dụng vsFTPD và dùng Cloud VPS để demo cho các bạn.

Cấu hình FTP Virtual User trên Linux

Tại sao lại sinh ra cái Virtual User mà không dùng Local User cho đỡ rách việc, mình vắn tắt lý do sau.

  • Virtual User được tạo ra một cách độc lập với Local User – User hệ thống.
  • Dùng Home Directory riêng và không có bash shell để thực hiện bất kỳ lệnh gì.
  • Không thể đăng nhập được Linux Server mà chỉ login được FTP Server.
  • Tạo được nhiều Virtual User với quyền khác nhau.

Như vậy, cho dù bạn có mất tài khoản thì hacker cũng chỉ sử dung được dịch vụ FTP mà thôi giúp bảo mật máy chủ hiệu quả.

Bạn nào cần tìm hiểu FPT là gì ? cách hoạt cấu hình FTP Server trên Linux thì tham khảo các bài trước của minh nhé.

1. Cài Berkeley DB

Mình nói qua một chút, Berkeley DB (BDB) là phần mềm quản lý cơ sở dữ liệu được Oracle phát triển. Đặc điểm của nó là nhỏ gọn toàn bộ dự liệu chỉ là một file duy nhất bạn muốn bê đi đâu thì bê.

Trong bài chúng ta dùng Berkeley DB chỉ nhằm mục đích duy nhất là lưu trữ Virtual User. Bởi Virtual User chỉ bao gồm có 2 trường là Username và Password nên dùng Berkeley là phù hợp cũng tiết kiệm tài nguyên của VPS hơn. Ai muốn dùng MySQL hay các hệ quản trị dữ liệu hầm hố khác thì cứ tự nhiên nhé.

Thường thì mặc định Berkeley DB được cài cho CentOS 7, nếu chưa có chạy lệnh sau.

CentOS 7

yum install -y db-util

Ubuntu 16.04

apt-get install -y db-util

Kiểm tra quá trình cài đặt

db_load -V

Kết quả như này là được

root@srv5:~# db_load -V
Berkeley DB 5.3.28: (September 9, 2013)

Tạm để đó chưa dùng Berkeley vội, ta đi vào cấu hình vsftpd đã.

2. Cấu hình Virtual User trên VsFTPD

Chúng ta sẽ có hai nhóm file cấu hình, file cấu hình vsftpd chung và những file cấu hình cho Virtual User

  • Cấu hình chung vsftpd /etc/vsftpd/vsftpd.conf
  • Cấu hình riêng Virtual User: /etc/vsftpd/vuser_conf/vuser1

Bắt tay vào làm thôi, mở file cấu hình vsftpd ra.

2.1 Cấu hình chung

CentOS 7

vi /etc/vsftpd/vsftpd.conf

Ubuntu 16.04

vi /etc/vsftpd.conf

Các thông số cấu hình như bên dưới.

anonymous_enable=NO

#Không cho user upload, delete file.
write_enable=NO

#Kích hoạt chroot, đọc bài trước để biết chroot là gì.
chroot_local_user=YES

#Cho phép user ghi dữ liệu khi chroot.
allow_writeable_chroot=YES

##########Phần cấu hình cho Virtual User##########

#Kich hoạt deny user login vào máy chủ FTP Server theo danh sách.
userlist_enable=YES

#Chỉ định file chứa danh sách user bị deny.
userlist_file=/etc/vsftpd/user_list_deny

#Tất cả user không thuộc anonymous sẽ được ánh xạ (map) sang ftp user.
#ftp là user mặc định được sinh ra khi cài vsftpd.
guest_enable=YES

#Nếu muốn dùng user khác bạn phải chỉ định bằng khai báo bên dưới.
guest_username=ftp

#Đường dấn đến thư mục chứa file cấu hình Virtual User
user_config_dir=/etc/vuser_conf

#Tự động generate home directory cho virtual user
user_sub_token=$USER
###########END###########

Đến đây chắc các bạn sẽ thấy rối, giữa các thông số cấu hình: Local User, Anonymous, Guest User, Virtual User.

Các bạn xem lại cấu hình ở trên, khi anonymous_enable=NOlocal_enable=YES điều này có nghĩa Anonymous bị vô hiệu hóa còn Local User được định nghĩa trong /etc/passwd xác thực bởi PAM file sẽ được quyền đăng nhập vào FTP Server, bao gồm cả Virtual User.

Còn guest_enable=YES có nghĩa tất cả người dùng  được ánh xạ đến tài khoản ftp được khai báo trong guest_username. Như vậy bạn chỉ cần biết có Virtual User mà thôi và chúng được ánh xạ từ ftp.

2.2 Tạo file cấu hình Virtual User riêng

Mỗi user ảo có một file cấu hình riêng quy định quyền hạn nhất định trên FTP Server. File cấu hình phải trùng tên với username. Giả xử mình tạo một user ảo có username là vuser thì file cấu hình cũng tên vuser.

Tạo folder chứa Virtual User

mkdir /etc/vsftpd/vuser_conf

Trong bài mình sẽ tạo hai user ảo là vuser1vuser2

vi /etc/vsftpd/vuser_conf/vuser1

Thêm vào nội dung bên dưới.

###########vuser1###########
#Trong cấu hình chung đặt NO, thì ở cấu hình riêng chúng ta phải đặt YES.
#Đây là khai báo quan trọng phải có nó thì những khái báo về Upload/mkdir mới có hiệu lực.
write_enable=YES

#Virtual User chỉ được tải về các tập tin mà nó có thể đọc được. Default: YES
anon_world_readable_only=YES

#write_enable phải có giá trị YES thì Virtual User có quyền upload. Default: NO
anon_upload_enable=YES

#Virtual User có quyền tạo thư mục. Default: NO
anon_mkdir_write_enable=YES

#Bô sung thêm quyền hạn còn thiếu cho Virtual User khi dùng write_enable.
#Có thể hiểu Virtual User có Full quyền. Default: NO
anon_other_write_enable=YES

Mình chỉ tạo vuser1, muốn tạo thêm vuser2… bạn copy file config bên trên rồi đổi tên file tương ứng cho từng user là xong.

cp /etc/vsftpd/vuser_conf/vuser1 /etc/vsftpd/vuser_conf/vuser2

3. Tạo Virtual User Database

Bước này mình tạo cơ sở dữ liệu cho vuser1, vuser2 trên Berkeley DB

Đầu tiên mình sẽ tạo file text chứa danh sách Virtual User gồm username và password.

vi /etc/vsftpd/vuser_list

Nội dung như sau, với username một dòng và password một dòng:

vuser1
123456
vuser2
123456

Tiếp theo import vuser_list vào Berkeley DB

db_load -T -t hash -f /etc/vsftpd/vuser_list /etc/vsftpd/vuser_list.db

Gán quyền read và execute.

chmod 600 /etc/vsftpd/vuser_list.db

Sau đó bạn có thể xóa file vuser_list nếu muốn, rm -f vuser_list

4. Cấu hình PAM

Mình sẽ không dùng file PAM mặc định mà tạo file riêng để xác thực cho Virtual User. File sẽ có tên là vuser_vsftpd.

vi /etc/pam.d/vuser_vsftpd

Nội dung file

auth required pam_userdb.so db=/etc/vsftpd/vuser_list
account required pam_userdb.so db=/etc/vsftpd/vuser_list
session required pam_loginuid.so

5. Cấu hình Home Directory cho Virtual User.

Trước hết sửa file passwd một chút.

vi /etc/passwd

sửa /var/ftp thành

/var/ftp/$USER

Edit Passwd

Tạo Home Directory cho Virtual User

mkdir /var/ftp/vuser1
mkdir /var/ftp/vuser2

Chown, toàn bộ dữ liệu trong /var/ftp thuộc sở hữu của tài khoản ftp

chown -R ftp:ftp /var/ftp/*

6. Kiểm tra hoạt động FTP Server

Cấu hình như trên là hoàn tất rồi, giờ mình test xem với cấu hình như thế FTP Server sẽ hoạt động thế nào

Mình sẽ deny vuser1 bằng cách thêm nó vào user_list_deny như đã cấu hình ở trên. Còn vuser2 vẫn cho truy cập upload/delete/rename bình thường.

 

Kết quả khi dùng FileZilla đăng nhập vào FTP Server trên VPS -> vuser1 đã bị chặn truy cập.

vuser1

vuser1

vuser2 đăng nhập bình thường và có thể upload file.

Upload file vuser2

vuser2

Tất cả đã hoạt động ok, bạn thử tạo thêm nhiều user ảo khác và check rename, delete, create folder xem sao.

Có vấn đề gì thì comment bên dưới để cùng trao đổi, chúc thành công.

One Response

  1. long June 29, 2017 Reply

Leave a Reply