SFTP (SSH File Transfer Protocol) là một giao thức truyền file đến server thông qua kết nối SSH bảo mật. SFTP có thể được thiết lập mà không cần quyền truy cập SSH để giới hạn người dùng. Bài viết này sẽ hướng dẫn cách bật SFTP không cần truy cập Shell trên CentOS 7.
Giới thiệu về SFTP
Theo mặc định, SFTP có thể dễ dàng được thiết lập trên mọi server có quyền truy cập SSH. Đây là một phương thức an toàn, đơn giản và dễ sử dụng. Tuy nhiên trong các thiết lập tiêu chuẩn thì server SSH lại cấp quyền truy cập file và terminal shell cho mọi người dùng có tài khoản trên hệ thống.
Đôi khi bạn có thể muốn giới hạn quyền truyền file bằng SFTP cho một số người dùng nhất định thì bạn có thể chọn thiết lập SFTP mà không cần quyền truy cập SSH.
Điều kiện tiên quyết
Trước tiên để làm theo hướng dẫn thì bạn cần có sẵn một server CentOS 7 có user non-root với quyền sudo. Bên cạnh đó cũng cần có một text editor, chẳng hạn như nano
hoặc vim
.
Nếu bạn đang tìm kiếm và muốn thuê máy chủ VPS ổn định để thiết lập SFTP trên CentOS 7, bạn có thể tham khảo các gói VPS tại Vietnix. Vietnix cung cấp các gói VPS phù hợp với mọi nhu cầu, từ VPS Giá Rẻ cho đến VPS SSD, VPS AMD và VPS NVMe. Với dịch vụ VPS, bạn sẽ có một máy chủ ảo cân bằng giữa hiệu năng và chi phí, dễ dàng triển khai một hệ thống SFTP ổn định và bảo mật với mức phí tiết kiệm. Mang đến tốc độ xử lý mạnh mẽ và khả năng xử lý lượng dữ liệu lớn, điều này sẽ rất hữu ích cho việc truyền tải và quản lý các tệp tin SFTP lớn. Dù bạn chọn gói nào, Vietnix cam kết cung cấp dịch vụ VPS ổn định và tốc độ nhanh, hỗ trợ kỹ thuật chuyên nghiệp 247. Liên hệ Vietnix để tìm hiểu thêm thông tin chi tiết.
Sau khi đáp ứng các điều kiện trên, bạn hãy làm theo các bước dưới đây để thiết lập một daemon SSH nhằm giới hạn truy cập SFTP vào một thư mục không có quyền truy cập SSH cho từng user.
Bước 1: Tạo user mới
Trước tiên bạn có thể tạo một user mới, chỉ được cấp quyền truy cập truyền file vào server. Ở ví dụ này, Vietnix sẽ sử dụng username là vietnix
:
sudo adduser vietnix
Sau đó tạo mật khẩu cho user mới:
sudo passwd vietnixpassword
Nhập lại mật khẩu lần nữa để xác nhận
Sau khi tạo xong user mới, bạn sẽ tạo một thư mục để truyền file và thiết lập các quyền cần thiết.
Bước 2: Tạo thư mục để truyền file
Để giới hạn quyền truy cập SFTP cho một thư mục, trước tiên bạn cần đảm bảo rằng thư mục này tuân theo các yêu cầu về quyền của server SSH.
Cụ thể hơn, một thư mục và các thư mục ở trên nó trong cây filesystem đều phải được sở hữu bởi root và không người dùng nào có quyền được ghi. Khi đó, bạn sẽ không thể hạn chế quyền truy cập vào home directory của user vì một số home directory được sở hữu bởi user chứ không phải root.
Lưu ý: Một số phiên bản OpenSSH không có các yêu cầu này, tuy nhiên trên các bản Linux mới khác đều có.
Để khắc phục vấn đề này, bạn có thể tạo và sử dụng thư mục mới /var/sftp/uploads
làm thư mục upload đích. Trong đó /var/sftp
được sở hữu bởi root và mọi user khác đều không có quyền ghi, thư mục con /var/sftp/uploads
được sở hữu bởi vietnix, do đó user này sẽ có quyền upload file vào đó.
Trước tiên, tạo thư mục bằng lệnh sau:
sudo mkdir -p /var/sftp/uploads
Sau đó đặt chủ sở hữu của /var/sftp
thành root:
sudo chown root:root /var/sftp
Cung cấp quyền ghi cho root ở cùng thư mục đó, còn mọi user khác chỉ có quyền đọc và thực thi:
sudo chmod 755 /var/sftp
Cuối cùng là đổi chủ sở hữu cho thư mục uploads
thành vietnix:
sudo chown vietnix:vietnix /var/sftp/uploads
Bước 3: Giới hạn truy cập cho một thư mục
Ở bước tiếp theo, bạn sẽ thay đổi cấu hình server SSH để chặn truy cập terminal cho user vietnix, nhưng đồng thời vẫn cho phép truyền file.
Trước tiên, mở file cấu hình SSH bằng một text editor bất kỳ:
sudo vi /etc/ssh/sshd_config
Kéo xuống phía dưới cùng rồi thêm đoạn cấu hình sau vào file:
. . .
Match User vietnix
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Sau đó lưu rồi đóng file lại.
Trong đó:
Match User
yêu cầu server SSH áp dụng các lệnh được liệt kê ở dưới, chỉ cho user được chỉ định. Ở đây chính là user vietnix.ForceCommand internal-sftp
buộc server SSH chạy server SFTP mỗi khi login, chặn truy cập vào shell.PasswordAuthentication yes
cho phép user xác thực bằng mật khẩu.ChrootDirectory /var/sftp/
đảm bảo rằng user sẽ không được phép truy cập vào bất kỳ thứ gì ngoài thư mục/var/sftp
.AllowAgentForwarding no
,AllowTcpForwarding no
vàX11Forwarding no
disable các tính năng: chuyển tiếp cổng (port forwarding), tunnel và chuyển tiếp X11 cho user vietnix.
Các dòng cấu hình trên có thể được áp dụng cho các user khác, trong đó hãy lưu ý đổi tên user tương ứng ở dòng Match User
.
Lưu ý: Bạn có thể bỏ dòng PasswordAuthentication yes
để xác thực truy cập dựa trên SSH key nếu cần đảm bảo bảo mật tốt hơn. Ở bước sau, bạn sẽ cần kiểm tra cấu hình bằng cách truy cập SSH từ máy cục bộ và xác thực bằng mật khẩu, tuy nhiên nếu thiết lập xác thực dựa trên SSH key thì bạn cần có quyền truy cập vào máy tính có keypair của user.
Restart lại dịch vụ để áp dụng thay đổi:
sudo systemctl restart sshd
Bước 4: Xác thực cấu hình
Ở bước cuối cùng, bạn sẽ kiểm tra xem user vietnix đã có khả năng truyền file như mong muốn chưa.
Trước tiên, đăng nhập vào server bằng user vietnix sử dụng shell thông thường:
ssh vietnix@localhost
Quyền truy cập shell này đã bị chặn, khi đó bạn sẽ nhận thông báo lỗi như sau:
Error message
This service allows sftp connections only.
Connection to localhost closed.
Thông báo này cho biết user vietnix không còn quyền truy cập vào server shell bằng SSH nữa.
Tiếp theo hãy thử truy cập SFTP để truyền file:
sftp vietnix@localhost
Server sẽ cho phép user đăng nhập vào hệ thống:
SFTP prompt
Connected to localhost.
sftp>
Kiểm tra nội dung thư mục bằng lệnh ls
, sau đó prompt sẽ hiển thị thư mục uploads
được tạo trước đó:
sftp> ls
Kết quả sẽ hiển thị thư mục upload
vừa tạo ở bước trên và trả về thông báo sftp>.
SFTP file list output
uploads
Để xác thực xem user có bị giới hạn truy cập vào thư mục này và các thư mục ở trên nó hay không, bạn có thể thử dùng lệnh sau để di chuyển lên một thư mục phía trên:
cd ..
Lệnh trên sẽ dẫn đến lỗi vì ta không có quyền truy cập, mặc dù vẫn có thể xem nội dung của thư mục.
Như vậy là cấu hình đã được cài đặt chính xác. Bây giờ user vietnix chỉ có thể truy cập server bằng SFTP để truyền file, nhưng không có quyền truy cập vào shell.
Lời kết
Qua bài viết này, bạn đã hoàn tất việc thiết lập SFT trên CentOS 7 mà không cần cung cấp quyền truy cập vào shell. Đối với các thư mục và user khác, bạn hoàn toàn có thể lặp lại các bước tương tự. Nếu có bất kỳ thắc mắc nào khác, hãy bình luận bên dưới để được Vietnix hỗ trợ nhanh nhất nhé.