SFTP hay Giao thức truyền tệp SSH là phương pháp truyền dữ liệu an toàn giữa hai máy tính trở lên. Đây là FTP chạy trên giao thức SSH và tận dụng tính bảo mật của giao thức này, đồng thời hỗ trợ đầy đủ tính xác thực của giao thức này.
Ngày nay, người ta khuyến nghị nên sử dụng SFTP thay vì giao thức FTP hoặc FTP/S cũ. SFTP an toàn theo mặc định vì đó là cách SSH hoạt động. Về mặt bảo mật, SFTP cũng bảo vệ bạn khỏi việc đánh hơi mật khẩu và tấn công trung gian (MiTM).
Giống như SSH, SFTP bảo vệ tính toàn vẹn của dữ liệu bằng cách sử dụng mã hóa và hàm băm mật mã. Nó cũng hỗ trợ nhiều phương pháp xác thực an toàn, bao gồm xác thực dựa trên mật khẩu và khóa. Ngoài ra, nó còn giảm cổng mở của máy chủ ra mạng bên ngoài vì nó chạy trên cùng một cổng với giao thức SSH.
Dưới đây là môi trường hiện tại để triển khai:
1. Để đảm bảo rằng các gói OpenSSH được cài đặt trên hệ thống Linux của bạn, hãy sử dụng lệnh sau.
Đối với máy chủ Debian hoặc Ubuntu, bạn có thể sử dụng lệnh dpkg bên dưới.
Dưới đây là đầu ra từ hệ thống Debian của chúng tôi.
Cột đầu tiên 'ii' có nghĩa là gói đã được cài đặt. Gói 'openssh-sftp-server' đã được cài đặt trên hệ thống Debian/Ubuntu.
Bạn có thể sử dụng lệnh rpm bên dưới cho người dùng RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux.
1. Thực hiện lệnh sau để tạo nhóm mới 'sftpgroup'.
2. Tạo người dùng mới 'sftpuser' bằng lệnh sau.
Tùy chọn chi tiết:
Nhập mật khẩu mạnh của bạn và lặp lại, sau đó nhấn 'Enter' để xác nhận.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22182%22%3E%3C/svg%3E
Để thêm nhiều người dùng hơn, hãy lặp lại giai đoạn số2 và 3, và quan trọng nhất, tất cả người dùng SFTP phải nằm trong nhóm 'sftpgroup' không có quyền truy cập shell thông qua SSH.
1. Đối với người dùng 'sftpuser', thư mục home mới sẽ nằm tại '/srv/sftpuser'. Thực hiện lệnh bên dưới để tạo thư mục đó.
2. Để thiết lập chroot cho người dùng 'sftpuser', bạn phải thay đổi quyền sở hữu thư mục thành người dùng root, nhưng vẫn là nhóm được phép đọc và thực thi mà không được phép ghi.
Thay đổi quyền sở hữu thư mục thành người dùng 'root' bằng lệnh sau.
Cấp cho nhóm quyền đọc và thực thi, nhưng không được phép ghi.
3. Tiếp theo, tạo một thư mục 'data' mới bên trong thư mục '/srv/sftpuser' và thay đổi quyền sở hữu của thư mục 'data' đó thành người dùng 'sftpuser'.
Cho đến nay, bên dưới là cấu hình chi tiết cho thư mục người dùng SFTP.
1. Chỉnh sửa cấu hình ssh '/etc/ssh/sshd_config' bằng nano hoặc vim.
2. Bình luận cấu hình sau để tắt tính năng 'sftp-server' độc lập.
3. Dán cấu hình sau vào cuối dòng.
Lưu cấu hình và thoát.
Cấu hình chi tiết:
Máy chủ SFTP đã sẵn sàng và có thể truy cập được, và nó đang chạy trên cùng một cổng với dịch vụ SSH.
1. Để kết nối với máy chủ SFTP, hãy thực hiện lệnh sftp như bên dưới.
Nếu máy chủ SFTP và/hoặc SSH của bạn chạy trên cổng tùy chỉnh, bạn có thể sử dụng lệnh sftp như bên dưới.
Nhập mật khẩu cho 'sftpuser'.
2. Sau khi bạn đã kết nối với máy chủ SFTP, hãy thực hiện lệnh sau.
Hiển thị đường dẫn thư mục làm việc hiện tại và liệt kê tất cả các tệp và thư mục có sẵn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22307%22%3E%3C/svg%3E
3. Tải tệp cục bộ lên máy chủ SFTP trên thư mục '/', kết quả sẽ là 'quyền bị từ chối', vì đó là thư mục chroot.
4. Tải tệp cục bộ lên thư mục '/data/' trên máy chủ SFTP. Nếu cấu hình của bạn đúng, tệp của bạn sẽ được tải lên thư mục '/data/'.
5. Bây giờ hãy kiểm tra các tệp có sẵn trong thư mục '/data' bằng lệnh sau.
Và bạn sẽ thấy tệp của mình được tải lên máy chủ SFTP.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22729%22%20height=%22129%22%3E%3C/svg%3E
Ngày nay, người ta khuyến nghị nên sử dụng SFTP thay vì giao thức FTP hoặc FTP/S cũ. SFTP an toàn theo mặc định vì đó là cách SSH hoạt động. Về mặt bảo mật, SFTP cũng bảo vệ bạn khỏi việc đánh hơi mật khẩu và tấn công trung gian (MiTM).
Giống như SSH, SFTP bảo vệ tính toàn vẹn của dữ liệu bằng cách sử dụng mã hóa và hàm băm mật mã. Nó cũng hỗ trợ nhiều phương pháp xác thực an toàn, bao gồm xác thực dựa trên mật khẩu và khóa. Ngoài ra, nó còn giảm cổng mở của máy chủ ra mạng bên ngoài vì nó chạy trên cùng một cổng với giao thức SSH.
Điều kiện tiên quyết
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập Máy chủ SFTP trên hệ thống Linux. Ngoài ra, bạn sẽ học lệnh cơ bản của máy khách sftp.Dưới đây là môi trường hiện tại để triển khai:
- Máy chủ Linux - bạn có thể sử dụng Debian, Ubuntu, CentOS, Fedora, Rocky hoặc bất kỳ bản phân phối Linux nào khác.
- Đảm bảo các gói OpenSSH có sẵn trên hệ thống Linux của bạn.
- Máy khách SFTP - dòng lệnh sftp hoặc bất kỳ máy khách GUI nào bạn thích.
Xác minh các gói OpenSSH
Để thiết lập máy chủ SFTP, các gói OpenSSH phải được cài đặt trên hệ thống Linux của bạn. Hầu như tất cả các máy chủ phân phối Linux đều có các gói OpenSSH được cài đặt theo mặc định. Tuy nhiên, trong trường hợp bạn không có gói OpenSSH trên hệ thống của mình, bạn có thể cài đặt nó từ kho lưu trữ chính thức.1. Để đảm bảo rằng các gói OpenSSH được cài đặt trên hệ thống Linux của bạn, hãy sử dụng lệnh sau.
Đối với máy chủ Debian hoặc Ubuntu, bạn có thể sử dụng lệnh dpkg bên dưới.
Mã:
dpkg -l | grep ssh
Mã:
ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library
ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
Bạn có thể sử dụng lệnh rpm bên dưới cho người dùng RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux.
Mã:
rpm -qa | grep ssh
Tạo nhóm và người dùng
Tại bước này, bạn sẽ tạo một nhóm và người dùng mới cho máy chủ SFTP. Người dùng trong nhóm này sẽ được phép truy cập máy chủ SFTP. Vì lý do bảo mật, người dùng SFTP không thể truy cập dịch vụ SSH; họ chỉ có thể truy cập máy chủ SFTP.1. Thực hiện lệnh sau để tạo nhóm mới 'sftpgroup'.
Mã:
sudo groupadd sftpgroup
Mã:
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
- -G : tự động thêm người dùng vào 'sftpgroup'.
- -d : chỉ định thư mục gốc cho người dùng mới.
- -s : đặt mặc định cho người dùng mới thành '/sbin/nologin', nghĩa là người dùng không thể truy cập Máy chủ SSH.
Mã:
passwd sftpuser
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22182%22%3E%3C/svg%3E
Để thêm nhiều người dùng hơn, hãy lặp lại giai đoạn số2 và 3, và quan trọng nhất, tất cả người dùng SFTP phải nằm trong nhóm 'sftpgroup' không có quyền truy cập shell thông qua SSH.
Thiết lập thư mục Chroot Jail
Sau khi tạo nhóm và người dùng mới, bạn phải tạo và cấu hình thư mục chroot cho người dùng SFTP.1. Đối với người dùng 'sftpuser', thư mục home mới sẽ nằm tại '/srv/sftpuser'. Thực hiện lệnh bên dưới để tạo thư mục đó.
Mã:
mkdir -p /srv/sftpuser
Thay đổi quyền sở hữu thư mục thành người dùng 'root' bằng lệnh sau.
Mã:
sudo chown root /srv/sftpuser
Mã:
sudo chmod g+rx /srv/sftpuser
Mã:
mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

Cho đến nay, bên dưới là cấu hình chi tiết cho thư mục người dùng SFTP.
- Thư mục '/srv/sftuser' là thư mục home mặc định.
- Người dùng 'sftpuser' không thể ghi vào thư mục '/srv/sftpuser', nhưng có thể đọc bên trong thư mục đó.
- Người dùng 'sftpuser' có thể tải tệp lên máy chủ SFTP tại thư mục '/srv/sftpuser/data'.
Bật SFTP trên Máy chủ SSH
Để bật máy chủ SFTP trên OpenSSH, bạn phải chỉnh sửa cấu hình SSH '/etc/ssh/sshd_config'.1. Chỉnh sửa cấu hình ssh '/etc/ssh/sshd_config' bằng nano hoặc vim.
Mã:
sudo nano /etc/ssh/sshd_config
Mã:
#Subsystem sftp /usr/lib/openssh/sftp-server
Mã:
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory %h
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
Cấu hình chi tiết:
- Thay vì sử dụng quy trình phụ 'sftp-server', chúng tôi sử dụng 'internal-sftp'.
- Máy chủ SFTP được bật cho nhóm 'sftpgroup'.
Mã:
sudo systemctl restart sshd
Truy cập Máy chủ SFTP
Ở phía máy khách, chúng ta sẽ sử dụng dòng lệnh sftp, được cài đặt theo mặc định trên hầu hết các Bản phân phối Linux. Tuy nhiên, bạn cũng có thể sử dụng một máy khách dòng lệnh khác hoặc máy khách FTP GUI như FileZilla, Cyberduck, v.v.1. Để kết nối với máy chủ SFTP, hãy thực hiện lệnh sftp như bên dưới.
Mã:
sftp ftpuser@SERVER-IP
Mã:
sftp -P PORT ftpuser@SERVER-IP
2. Sau khi bạn đã kết nối với máy chủ SFTP, hãy thực hiện lệnh sau.
Hiển thị đường dẫn thư mục làm việc hiện tại và liệt kê tất cả các tệp và thư mục có sẵn.
Mã:
pwd
ls
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22307%22%3E%3C/svg%3E
3. Tải tệp cục bộ lên máy chủ SFTP trên thư mục '/', kết quả sẽ là 'quyền bị từ chối', vì đó là thư mục chroot.
Mã:
put /path/to/file/on/local /
Mã:
put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

5. Bây giờ hãy kiểm tra các tệp có sẵn trong thư mục '/data' bằng lệnh sau.
Mã:
ls /data/
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22729%22%20height=%22129%22%3E%3C/svg%3E