Hôm bữa cần làm task liên quan đến việc đối soát dữ liệu và đẩy lên một thư mục có sẵn thông qua SFTP nên là mình viết luôn bài hướng dẫn cách cấu hình SFTP trên Centos 7 luôn. Để thiết lập được thì bạn cần một server đang chạy centos 7 và làm theo các bước hướng dẫn như bên dưới.

SFTP là viết tắt của SSH File Transfer Protocol, một giao thức truyền nhận dữ liệu tới máy chủ thông qua SSH.

Bước 1: Tạo một tài khoản mới, có thể kết nối tới SFTP server để truyền dữ liệu

sudo adduser testsftp

sudo passwd testsftp

hai command trên dùng để tạo tài khoản và thiết lập mật khẩu đăng nhập vào SFTP server, bạn nhớ lưu lại cặp user/pass này.

Bước 2: Tiếp theo chúng ta sẽ tạo một thư mục, sẽ dùng để chứa các tệp dữ liệu trên SFTP server.

tạo mới thư mục sftp/uploads nằm ở cụm /var/www bằng command bên dưới:

sudo mkdir -p /var/www/sftp/uploads

mặc định command trên đã cho biết là root là người dùng sở hữu của thư mục sftp

thực hiện cấp quyền 755 cho thư mục var/www/sftp, nghĩa là người dùng root sẽ có quyền đọc ghi trong thư mục này, còn những người dùng khác sẽ chỉ có quyền đọc và liệt kê dữ liệu trong thư mục.

sudo chmod 755 /var/www/sftp

thay đổi quyền sở hữu thư mục /uploads nằm trong /sftp cho người dùng testsftp đã tạo từ trước, người dùng testsftp sẽ có đầy đủ đặc quyền thực hiện trong thư mục /uploads này.

sudo chown testsftp:testsftp /var/www/sftp/uploads

Bước 3: Hạn chế quyền truy cập của người dùng testsftp.

ở bước này, chúng ta cần cấu hình để tài khoản người dùng testsftp chỉ có quyền kết nối thông qua sftp để chuyển file dữ liệu vào đúng thư mục mà chúng ta thiết lập, và không được phép kết nối đến server thông qua SSH thông thường

mở tệp cấu hình SSH bằng command sau:

sudo vi /etc/ssh/sshd_config

chèm thêm vào cuối file config nội dung sau:

Match User testsftp
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/www/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Giải thích ý nghĩa cấu hình vừa thêm vào:

  • Match User testsftp : yêu cầu máy chủ SSH chỉ áp dụng các lệnh sau cho người dùng testsftp.
  • ForceCommand internal-sftp :  buộc máy chủ SSH chạy máy chủ SFTP khi đăng nhập, không cho phép truy cập trình bao. Nghĩa là chỉ được phép kết nối vào SFTP chứ không vào được SSH để làm các thao tác khác như người dùng bình thường.
  • PasswordAuthentication yes : cho phép xác thực mật khẩu cho người dùng này.
  • ChrootDirectory /var/www/sftp/ : đảm bảo rằng người dùng sẽ không được phép truy cập vào bất kỳ thứ gì ngoài thư mục /var/www/sftp.

Để áp dụng các thay đổi, thực hiện khởi động lại dịch vụ bằng command:

sudo systemctl restart sshd

Bước 4: Xác minh lại cấu hình

sau khi đã thực hiện khởi động lại dịch vụ SSH, ta sẽ cần kiểm tra lại để đảm bảo tài khoản được cấu hình chỉ có quyền truyền file qua SFTP mà không có quyền truy cập SSH như thông thường.

ssh testsftp@localhost

thông báo kết nối qua trình bao SSH thất bại

sau khi nhập password để kết nối, nếu bạn gặp thông báo như bên trên, chứng tỏ việc không kết nối được qua ssh là chính xác.

tiếp theo, cần xác minh xem người dùng có thể chuyển tệp thông qua SFTP hay không, ta thực hiện như sau:

sftp testsftp@localhost

thông báo kết nối SFTP thành công

Done, chúng ta đã thực hiện xong việc cấu hình SFTP trên Centos 7 để truyền nhận file qua một người dùng cụ thể, và hạn chế quyền sử dụng của nó.

Tham khảo:

https://www.digitalocean.com/community/tutorials/how-to-enable-sftp-without-shell-access-on-centos7