![](https://thuvienkhcn.net/wp-content/uploads/2021/07/Sftp-Chroot-Jail.jpg)
Hướng dẫn thiết lập cấu hình Chroot sFTP
Hướng dẫn thiết lập cấu hình Chroot sFTP. Điều gì xảy ra khi bạn host hàng trăm website cho khách hàng mà một vị khách đáng kính có thể lang thang vào toàn bộ khu vực chứa code web? Bản thân khách hàng cũng chưa chắc đã biết tài khoản của mình sạch hay bị hack từ khi nào. Chroot sFTP là một giải pháp tự động giới hạn người dùng truy cập máy chủ. Khi người dùng truy cập bằng dịch vụ sFTP sẽ chỉ có thể đi đến những vùng giới hạn sẵn. Họ cũng chỉ được làm những gì được phép làm.
Bài viết này sẽ chỉ cho các bạn cách thiết lập Chroot sFTP. Kỹ thuật giam giữ (jail) người dùng tại một khu vực nhất định trên máy chủ.
1. Chroot sFTP là gì?
Kỹ thuật Chroot sFTP về bản chất là kỹ thuật “nhốt” người dùng trong một khu vực nhất định khi họ truy cập vào hệ thống bằng dịch vụ sFTP. Điều này đảm bảo họ không có quá nhiều quyền sục sạo trong máy chủ cũng như hạn chế các tổn thất có thể họ vô tình gây ra.
Cách thiết lập Chroot SFTP trong Linux (Chỉ cho phép SFTP, không phải SSH)
Nếu bạn muốn thiết lập một tài khoản chuyển tệp trên hệ thống của mình. Tài khoản này sẽ chỉ được sử dụng để truyền tệp (chứ không phải để chuyển ssh vào hệ thống). Khi đó bạn nên thiết lập sFTP Chroot như được giải thích trong bài viết này. Hay bạn muốn cấp quyền truy cập sftp trên hệ thống của mình cho các nhà cung cấp bên ngoài để chuyển tệp? Bạn không nên sử dụng sftp chuẩn. Thay vào đó, bạn nên thiết lập Chroot sFTP như được giải thích bên dưới. Trong trường hợp sftp điển hình (khi chroot sftp không được thiết lập), nếu bạn sử dụng sftp, bạn có thể thấy tệp của root như được hiển thị bên dưới.
Môi trường SFTP không Chroot
Trong ví dụ sau (một môi trường sftp điển hình), user1 có thể sftp vào hệ thống và xem thư mục /etc và tải xuống các tệp từ đó.
# sftp user1@cuongcong.com user1@cuongcong's password: sftp> pwd Remote working directory: /home/user1 sftp> ls projects user1.txt documents sftp> cd /etc sftp> ls -l passwd -rw-r--r-- 0 0 0 3750 Dec 29 23:09 passwd sftp> get passwd Fetching /etc/passwd to passwd /etc/passwd 100% 3750 3.7KB/s 00:00
Môi trường có Chroot sFTP
Trong ví dụ sau, user1 có thể sftp vào hệ thống và chỉ xem thư mục mà bạn đã chỉ định cho user1 thực hiện sftp (tức là thư mục /home/user1).Khi user1 cố gắng thực hiện ‘cd /etc’ để truy cập vào thư mục quan trọng của hệ thống, nó sẽ đưa ra thông báo lỗi. Vì sFTP được thiết lập trong môi trường chroot, user1 không thể xem bất kỳ tệp nào khác trong hệ thống.
# sftp user1@cuongcong.com user1@cuongcong's password: sftp> pwd Remote working directory: /home/user1 sftp> ls sftp> cd /etc Couldn't canonicalise: No such file or directory
Qua hai ví dụ trên, bây giờ bạn đã hiểu môi trường Chroot sFTP là gì. Bản chất Chroot hiểu đơn giản là kỹ thuật giới hạn người dùng chỉ được truy cập và làm việc trong một khu vực nhất định trên máy chủ. hãy cùng chúng tôi xem cách thiết lập môi trường này.
2. Tạo một nhóm mới
Tạo một nhóm gọi là sftpusers. Chỉ những người dùng thuộc nhóm này sẽ tự động bị hạn chế đối với môi trường chroot SFTP trên hệ thống này.
# groupadd sftpusers
3. Tạo người dùng (hoặc sửa đổi người dùng hiện tại)
Giả sử bạn muốn tạo một người dùng khách người dùng chỉ được phép thực hiện SFTP trong môi trường chroot và không được phép thực hiện SSH.Lệnh sau tạo người dùng khách, chỉ định người dùng này vào nhóm sftpusers, tạo / incoming làm thư mục chính, đặt /sbin/nologin làm shell (sẽ không cho phép người dùng ssh và nhận quyền truy cập shell).
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
Xác minh rằng người dùng đã được tạo đúng cách.
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
Nếu bạn muốn sửa đổi một người dùng hiện tại và biến anh ta thành người dùng sftp và nhốt anh ta vào khu vực (tù) chỉ định bằng kỹ thuật chroot sftp, hãy làm như sau:
# usermod -g sftpusers -d /incoming -s /sbin/nologin user1
Một lưu ý liên quan, nếu bạn phải chuyển tệp từ windows sang Linux, hãy sử dụng bất kỳ ứng dụng khách sftp nào được đề cập trong danh sách 7 ứng dụng khách sftp hàng đầu này.
4. Thiết lập sftp-server Subsystem in sshd_config
Bạn nên hướng dẫn sshd sử dụng internal-sftp cho sftp (thay vì sftp-server mặc định). Bạn sửa đổi tệp /etc/ssh/sshd_config và comment dòng sau:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Tiếp theo, thêm dòng sau vào tệp / etc / ssh / sshd_config
Subsystem sftp internal-sftp
Bạn sẽ thấy nó như thế này:
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
Ghi lại các thay đổi cho tệp sshd_config này.
5. Chỉ định Thư mục Chroot cho một nhóm
Bạn chỉ muốn đưa một số người dùng nhất định (tức là người dùng thuộc nhóm sftpusers) vào môi trường chroot. Thêm các dòng sau vào cuối tệp /etc/ssh/sshd_config
# tail /etc/ssh/sshd_config Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
Ý nghĩa đoạn lệnh ở trên:
- Đối sánh nhóm sftpusers. Điều này cho biết rằng các dòng sau sẽ chỉ được đối sánh cho những người dùng thuộc nhóm sftpusers
- ChrootDirectory /sftp/%u. Đây là đường dẫn sẽ được sử dụng cho chroot sau khi người dùng được xác thực. % u cho biết người dùng. Vì vậy, đối với người dùng user1, thư mục giam giữ anh ta sẽ là /sftp/user1
- ForceCommand internal-sftp. Điều này buộc thực thi internal-sftp và bỏ qua bất kỳ lệnh nào được đề cập trong tệp ~/.ssh/rc.
6. Tạo Thư mục Home sftp
Vì chúng tôi đã chỉ định /sftp là ChrootDirectory ở trên, hãy tạo thư mục này (tương đương với thư mục /home điển hình của bạn).
# mkdir /sftp
Thư mục /sftp/guestuser tương đương với thư mục gốc / cho người dùng. Khi người dùng chuyển sang hệ thống và thực hiện “cd /”, họ sẽ chỉ nhìn thấy nội dung của các thư mục trong “/sftp/guestuser” (chứ không phải thư mục / thật của hệ thống). Đây là sức mạnh của kỹ thuật chroot.Bây giờ trong thư mục /sftp/guestuser này, hãy tạo bất kỳ thư mục con nào mà bạn muốn người dùng xem. Ví dụ: bạn có thể tạo một thư mục đến nơi người dùng có thể sftp các tệp của họ.
# mkdir /sftp/guestuser/incoming
7. Thiết lập Quyền thích hợp
Để chroot hoạt động bình thường, bạn cần đảm bảo các quyền thích hợp được thiết lập đúng cách trên thư mục bạn vừa tạo ở trên.Thiết lập quyền sở hữu cho người dùng và nhóm thành nhóm sftpusers như hình dưới đây.
# chown guestuser:sftpusers /sftp/guestuser/incoming
Quyền sẽ giống như sau cho thư mục incoming.
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
Quyền sẽ giống như sau cho thư mục /sftp/guestuser
# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
8. Khởi động lại sshd và kiểm tra SFTP Chroot
Restart sshd bằng lệnh sau:
# service sshd restart
Thử nghiệm Hướng dẫn thiết lập cấu hình Chroot sFTP: Như bạn thấy bên dưới, khi guestuser thực hiện sftp và thực hiện “cd /”, họ sẽ chỉ thấy thư mục incoming.
# sftp guestuser@cuongcong.com guestuser@cuongcong's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
Khi người dùng chuyển bất kỳ tệp nào đến thư mục /incoming từ sftp, chúng sẽ thực sự nằm trong thư mục /sftp/guestuser/incoming trên hệ thống.
Lời Kết
Trên đây là toàn bộ hướng dẫn thiết lập cấu hình Chroot sFTP. Nó giúp bạn khống chế người dùng hoạt động trong một khu vực bạn đã chỉ định cho họ trên máy chủ. Tuy nhiên cảnh báo rằng kỹ thuật này không có tác dụng với dịch vụ ssh (cùng sử dụng chung port với sftp) nên bạn cần cân nhắc khi áp dụng. Bạn có thể cân nhắc có cho phép người dùng ssh vào hệ thống hay không. Hy vọng bạn thấy hữu ích khi đọc bài viết này.