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.
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=NO
và local_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à vuser1 và vuser2
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
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
Kết quả khi dùng FileZilla đăng nhập vào FTP Server trên VPS -> vuser1 đã bị chặn truy cập.
vuser2 đăng nhập bình thường và có thể upload file.
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.
Chào bạn,
Có cách nào vừa sủa dụng đc local user và Virtual User song song với nhau không?