Thiết lập tài khoản SFTP trong Linux (chỉ cho phép SFTP, không SSH)

Nếu bạn muốn thiết lập một tài khoản trên hệ thống của bạn sẽ chỉ được sử dụng để chuyển các tập tin (và không để ssh vào hệ thống), bạn nên thiết lập SFTP chroot sẽ được giải thích trong bài viết này.

Trong một kịch bản điển hình SFTP (khi chroot sftp chưa được thiết lập), nếu bạn sử dụng SFTP, bạn có thể xem toàn bộ file root gốc như hình dưới đây.

Môi trường Non-chroot SFTP

Trong ví dụ sau đây (một môi trường sftp điển hình), john có thể truy cập sftp để vào hệ thống, và xem được thư mục /etc và tải các tập tin đó về mà không gặp bất kỳ hạn chế nào.

Nếu bạn muốn cho truy cập SFTP trên hệ thống của bạn mà không cho phép xem toàn bộ file root gốc hệ thống, 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 Jail như được giải thích dưới đây.

Môi trường Chroot SFTP

Trong ví dụ sau, john có thể sftp vào hệ thống, và chỉ xem các thư mục mà bạn đã cấp cho john để thực hiện SFTP (tức là /incoming).

Khi john cố gắng thực hiện “cd / etc ‘, hệ thống sẽ cung cấp một thông báo lỗi. Do SFTP đã được thiết lập trong một môi trường chroot, john không thể xem bất kỳ tập tin khác trong hệ thống.

1. Tạo 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ẽ được tự động giới hạn trong môi trường chroot SFTP trên hệ thống này.

2. Tạo user (hoặc Modify user hiện tại)

Giờ bạn muốn tạo một guestuser người dùng chỉ được phép thực hiện SFTP trong một môi trường chroot, và không nên được cho phép để thực hiện SSH.

Các lệnh sau tạo guestuser, gán người dùng này vào nhóm sftpusers, gán vào thưc mục /incoming , thiết lập / sbin / nologin vào shell (nghĩa là sẽ không cho phép người dùng sử dụng ssh và được tiếp cận các lệnh trong shell).

Nếu bạn muốn thay đổi một user hiện tại và làm cho user đó chỉ sử dụng SFTP, làm như sau:

3. Thiết lập sftp-server Subsystem trong sshd_config

Bạn cần hướng dẫn sshd để sử dụng internal-SFTP cho SFTP (thay vì sftp-server mặc định).

Sửa đổi các tập tin /etc/ssh/sshd_config và ẩn dòng sau:

Tiếp theo, thêm dòng sau vào /etc/ssh/sshd_config

4. Chỉ định chroot Directory cho một Nhóm

Bạn muốn đặt chỉ người dùng nào đó (tức là những người dùng thuộc nhóm sftpusers) trong môi trường chroot. Thêm các dòng sau vào cuối của /etc/ssh/sshd_config

Giải thích các dòng phía trên:

Gặp nhóm sftpusers – Điều này chỉ ra rằng những dòng này sẽ được xử lý cho người dùng thuộc nhóm sftpusers
ChrootDirectory /SFTP/%u – Đây là đường dẫn thư mục mà sẽ được sử dụng cho chroot sau khi người dùng đã đăng nhập vào hệ thống. Vì vậy, cho john, đây sẽ là /SFTP /john.
ForceCommand internal-SFTP – Buộc thực hiện các lệnh bên trong internal-sftp và bỏ qua các lệnh trong tập tin ~/.ssh/rc.

5. Tạo sftp Home Directory

Như đã chỉ định /SFTP như ChrootDirectory trên, tạo thư mục này ( tương đương của thư mục /home của user).

Bây giờ, dưới /SFTP, tạo ra các thư mục cá nhân cho người dùng là một phần của nhóm sftpusers. tức là người dùng sẽ chỉ được phép thực hiện SFTP và sẽ nằm trong môi trường chroot.

/SFTP/guestuser là tương đương với root / cho guestuser. Khi guestuser sftp vào hệ thống, và biểu diễn “cd /”, họ sẽ được nhìn thấy chỉ có các nội dung của thư mục dưới “/SFTP/guestuser” (và không phải là root / của hệ thống). Đây là chức năng chính của chroot.

Vì vậy, dưới thư mục này /SFTP/guestuser, tạo ra bất kỳ thư mục con cho user đó. Ví dụ, tạo một thư mục đến nơi người dùng có thể sftp tập tin của họ.

6. Thiết lập Permission

Đối với chroot để làm việc đúng cách, bạn cần phải tạo quyền thích hợp được thiết lập đúng vào thư mục mà bạn vừa tạo ở trên.

Đặt owenership cho người sử dụng, và nhóm cho nhóm sftpusers như dưới đây.

7. Khởi động lại sshd và Test chroot SFTP

Sshd restart:

Kiểm tra môi trường chroot SFTP. Khi bạn nhìn thấy dưới đây, khi gusetuser truy cập vào SFTP, và thực hiện “cd /”, họ sẽ chỉ nhìn thấy thư mục incoming.

Khi guestuser làm việc trong thư mục /incoming , họ sẽ thực sự nằm dưới /SFTP/guestuser trên hệ thống.

 

Leave a Reply