Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
SFTP là viết tắt của S SH F ile T ransfer P rotocol. Như tên gọi của nó, đó là một cách an toàn để truyền file giữa các máy bằng kết nối SSH được mã hóa. Mặc dù tên gọi, nó là một giao thức hoàn toàn khác với FTP ( F ile T ransfer P rotocol), mặc dù nó được hỗ trợ rộng rãi bởi các client FTP hiện đại.SFTP có sẵn theo mặc định mà không cần cấu hình bổ sung trên tất cả các server đã bật quyền truy cập SSH. Nó an toàn và dễ sử dụng, nhưng đi kèm với một nhược điểm: trong cấu hình tiêu chuẩn, server SSH cấp quyền truy cập truyền file và quyền truy cập shell terminal cho tất cả user có account trên hệ thống.
Trong một số trường hợp, bạn có thể chỉ muốn một số user nhất định được phép chuyển file và không có quyền truy cập SSH. Trong hướng dẫn này, ta sẽ cài đặt daemon SSH để giới hạn quyền truy cập SFTP vào một folder không được phép truy cập SSH trên cơ sở mỗi user .
Yêu cầu
Để làm theo hướng dẫn này, bạn cần truy cập vào server Ubuntu 18.04. Server này phải có user không phải root có quyền sudo
, cũng như firewall được kích hoạt. Để được trợ giúp cài đặt điều này, hãy làm theo Hướng dẫn cài đặt server ban đầu cho Ubuntu 18.04 của ta .
Bước 1 - Tạo user mới
Đầu tiên, hãy tạo một user mới, người này sẽ chỉ được cấp quyền truy cập truyền file đến server . Ở đây, ta đang sử dụng tên user sammyfiles , nhưng bạn có thể sử dụng bất kỳ tên user nào bạn thích.
- sudo adduser sammyfiles
Bạn sẽ được yêu cầu tạo password cho account , sau đó là một số thông tin về user . Thông tin user là tùy chọn, vì vậy bạn có thể nhấn ENTER
để để trống các trường đó.
Đến đây bạn đã tạo một user mới sẽ được cấp quyền truy cập vào folder bị hạn chế. Trong bước tiếp theo, ta sẽ tạo folder để truyền file và cài đặt các quyền cần thiết.
Bước 2 - Tạo folder để truyền file
Để hạn chế quyền truy cập SFTP vào một folder , trước tiên ta phải đảm bảo folder đó tuân theo các yêu cầu về quyền của server SSH, rất đặc biệt.
Cụ thể, bản thân folder và tất cả các folder phía trên nó trong cây hệ thống file phải thuộc sở hữu của root và không thể ghi bởi bất kỳ ai khác. Do đó, không thể chỉ đơn giản là cấp quyền truy cập hạn chế vào folder chính của user vì folder chính thuộc sở hữu của user , không phải root .
Lưu ý: Một số version của OpenSSH không có các yêu cầu nghiêm ngặt như vậy đối với cấu trúc folder và quyền sở hữu, nhưng hầu hết các bản phân phối Linux hiện đại (bao gồm cả Ubuntu 18.04) thì có.
Có một số cách để giải quyết vấn đề quyền sở hữu này. Trong hướng dẫn này, ta sẽ tạo và sử dụng /var/sftp/uploads
làm folder tải lên đích. /var/sftp
sẽ được sở hữu bởi root và sẽ không được ghi bởi những user khác; folder con /var/sftp/uploads
sẽ thuộc sở hữu của sammyfiles , do đó user có thể tải file lên đó.
Đầu tiên, tạo các folder .
- sudo mkdir -p /var/sftp/uploads
Đặt chủ sở hữu của /var/sftp
thành root .
- sudo chown root:root /var/sftp
Cấp quyền ghi root cho cùng một folder và chỉ cấp cho user khác quyền đọc và thực thi.
- sudo chmod 755 /var/sftp
Thay đổi quyền sở hữu trên folder uploads
thành sammyfiles .
- sudo chown sammyfiles:sammyfiles /var/sftp/uploads
Bây giờ cấu trúc folder đã có, ta có thể tự cấu hình server SSH.
Bước 3 - Hạn chế quyền truy cập vào một folder
Trong bước này, ta sẽ sửa đổi cấu hình server SSH để không cho phép truy cập terminal cho sammyfiles nhưng cho phép truy cập chuyển file .
Mở file cấu hình server SSH bằng nano
hoặc editor yêu thích của bạn.
- sudo nano /etc/ssh/sshd_config
Cuộn xuống cuối file và nối đoạn mã cấu hình sau:
. . . Match User sammyfiles ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /var/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
Sau đó, lưu file .
Đây là những gì mỗi lệnh đó thực hiện:
-
Match User
yêu cầu server SSH chỉ áp dụng các lệnh sau cho user được chỉ định. Ở đây, ta chỉ định sammyfiles . -
ForceCommand internal-sftp
buộc server SSH chạy server SFTP khi đăng nhập, không cho phép truy cập shell . -
PasswordAuthentication yes
cho phép xác thực password cho user này. -
ChrootDirectory /var/sftp/
đảm bảo user sẽ không được phép truy cập vào bất kỳ thứ gì ngoài folder/var/sftp
. -
AllowAgentForwarding no
,AllowTcpForwarding no
. vàX11Forwarding no
vô hiệu hóa chuyển tiếp cổng, tunnel và chuyển tiếp X11 cho user này.
Bộ lệnh này, bắt đầu bằng Match User
, cũng có thể được sao chép và lặp lại cho những user khác nhau. Đảm bảo sửa đổi tên user trong dòng Match User
phù hợp.
Lưu ý : Bạn có thể bỏ qua dòng PasswordAuthentication yes
và thay vào đó, cài đặt quyền truy cập SSH key để tăng cường bảo mật. Làm theo phần Sao chép Khóa SSH Công khai của bạn trong Hướng dẫn Cơ bản về SSH: Làm việc với Server , Máy khách và Khóa SSH để thực hiện . Đảm bảo làm điều này trước khi bạn vô hiệu hóa quyền truy cập shell cho user .
Trong bước tiếp theo, ta sẽ kiểm tra cấu hình bằng SSHing local với quyền truy cập bằng password , nhưng nếu bạn cài đặt SSH key , thay vào đó, bạn cần quyền truy cập vào máy tính bằng cặp khóa của user .
Để áp dụng các thay đổi cấu hình, hãy khởi động lại dịch vụ.
- sudo systemctl restart sshd
Đến đây bạn đã cấu hình server SSH để hạn chế quyền truy cập chỉ truyền file cho sammyfiles . Bước cuối cùng là kiểm tra cấu hình đảm bảo rằng nó hoạt động như dự định.
Bước 4 - Xác minh cấu hình
Hãy đảm bảo user sammyfiles mới của ta chỉ có thể chuyển file .
Đăng nhập vào server như sammyfiles sử dụng quyền truy cập shell thông thường sẽ không thể thực hiện được nữa. Hãy thử nó:
- ssh sammyfiles@localhost
Bạn sẽ thấy thông báo sau trước khi được quay lại dấu nhắc ban đầu:
Error messageThis service allows sftp connections only. Connection to localhost closed.
Điều này nghĩa là sammyfiles không còn có thể truy cập server shell bằng SSH.
Tiếp theo, hãy xác minh xem user có thể truy cập thành công SFTP để chuyển file hay không.
- sftp sammyfiles@localhost
Thay vì thông báo lỗi, lệnh này sẽ hiển thị thông báo đăng nhập thành công kèm theo dấu nhắc tương tác.
SFTP promptConnected to localhost. sftp>
Bạn có thể liệt kê nội dung folder bằng ls
trong dấu nhắc :
- ls
Thao tác này sẽ hiển thị folder uploads
đã được tạo ở bước trước và đưa bạn trở lại dấu nhắc sftp>
.
SFTP file list outputuploads
Để xác minh user thực sự bị giới hạn trong folder này và không thể truy cập bất kỳ folder nào bên trên folder đó, bạn có thể thử thay đổi folder thành folder phía trên nó.
- cd ..
Lệnh này sẽ không báo lỗi, nhưng liệt kê nội dung folder như trước đó sẽ không hiển thị thay đổi, chứng tỏ rằng user không thể chuyển sang folder mẹ.
Đến đây bạn đã xác minh cấu hình hạn chế hoạt động như dự định. User sammyfiles mới được tạo chỉ có thể truy cập vào server bằng giao thức SFTP để truyền file và không có khả năng truy cập toàn bộ shell .
Kết luận
Bạn đã hạn chế một user quyền truy cập chỉ SFTP vào một folder trên server mà không có toàn quyền truy cập shell. Mặc dù hướng dẫn này chỉ sử dụng một folder và một user cho ngắn gọn, bạn có thể mở rộng ví dụ này cho nhiều user và nhiều folder .
Server SSH cho phép các schemas cấu hình phức tạp hơn, bao gồm giới hạn quyền truy cập vào các group hoặc nhiều user cùng một lúc, hoặc thậm chí giới hạn quyền truy cập vào một số địa chỉ IP nhất định. Bạn có thể tìm thấy các ví dụ về các tùy chọn cấu hình bổ sung và giải thích về các chỉ thị có thể có trong OpenSSH Cookbook . Nếu bạn gặp sự cố nào với SSH, bạn có thể gỡ lỗi và khắc phục chúng bằng loạt SSH khắc phục sự cố này .
Các tin liên quan
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.042018-07-13
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04
2018-07-12
Cách sử dụng Chế độ độc lập của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 18.04
2018-07-11
Cách cài đặt WordPress với LEMP trên Ubuntu 18.04
2018-07-11
Cách sử dụng LVM để quản lý thiết bị lưu trữ trên Ubuntu 18.04
2018-07-11
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 18.04
2018-07-10
Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 18.04
2018-07-10
Cách cài đặt và cấu hình GitLab trên Ubuntu 18.04
2018-07-09
Cách cài đặt Git trên Ubuntu 18.04
2018-07-06