Cách cài đặt và sử dụng SFTP trên máy chủ Linux

theanh

Administrator
Nhân viên
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.

Đ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
Dưới đây là đầu ra từ hệ thống Debian của chúng tôi.
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
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.
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
2. Tạo người dùng mới 'sftpuser' bằng lệnh sau.
Mã:
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
Tùy chọn chi tiết:
  • -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.
3. Tiếp theo, tạo mật khẩu cho người dùng 'sftpuser' bằng lệnh bên dưới.
Mã:
passwd sftpuser
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.

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
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.
Mã:
sudo chown root /srv/sftpuser
Cấp cho nhóm quyền đọc và thực thi, nhưng không được phép ghi.
Mã:
sudo chmod g+rx /srv/sftpuser
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'.
Mã:
mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

2-setup-upload-directory-and-chroot-jail.png



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
2. Bình luận cấu hình sau để tắt tính năng 'sftp-server' độc lập.
Mã:
#Subsystem sftp /usr/lib/openssh/sftp-server
3. Dán cấu hình sau vào cuối dòng.
Mã:
Subsystem sftp internal-sftp

Match Group sftpgroup
 ChrootDirectory %h
 X11Forwarding no
 AllowTCPForwarding no
 ForceCommand internal-sftp
Lưu cấu hình và thoát.

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'.
4. Để áp dụng cấu hình mới, hãy khởi động lại dịch vụ ssh bằng lệnh bên dưới.
Mã:
sudo systemctl restart sshd
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.

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
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.
Mã:
sftp -P PORT ftpuser@SERVER-IP
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.
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 /
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/'.
Mã:
put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

4-verify-read-and-write-on-sftp-server.png



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/
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

Kết luận​

Xin chúc mừng! Bạn đã cấu hình thành công Máy chủ SFTP trên hệ thống Linux. Kiểu cấu hình này có thể được áp dụng trên hầu hết các hệ thống Linux có cài đặt OpenSSH. Ngoài ra, bạn đã học cách thiết lập thư mục chroot cho người dùng SFTP và học lệnh máy khách sftp cơ bản.
 
Back
Bên trên