Thứ tư, 31/05/2017 | 00:00 GMT+7

Cách bật SFTP mà không cần truy cập Shell trên Ubuntu 16.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 đến server 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ở user .

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

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 16.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ẽ unwritable 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:

/ etc / ssh / sshd_config
. . .  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 . Bạn có thể tìm hiểu thêm về chroot trong hướng dẫn chroot này .
  • 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 message
This 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 prompt
Connected 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 output
uploads

Để 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 cách sử dụ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 hạn chế quyền truy cập vào các group hoặc nhiều user cùng một lúc hoặc hạn chế 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 .


Tags:

Các tin liên quan

Cách tạo Go Executables cho nhiều nền tảng trên Ubuntu 16.04
2017-05-30
Cách cài đặt Concourse CI trên Ubuntu 16.04
2017-05-26
Cách giám sát server và dịch vụ bằng Icinga trên Ubuntu 16.04
2017-05-05
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 16.04
2017-04-28
Cách quản lý log với Graylog 2 trên Ubuntu 16.04
2017-04-25
Cách cài đặt Webmin trên Ubuntu 16.04
2017-04-21
Cách cài đặt và cấu hình OrientDB trên Ubuntu 16.04
2017-03-24
how-to-monitor-system-metrics-with-the-tick-stack-on-ubuntu-16-04
2017-03-16
Cách cài đặt và cấu hình Postfix trên Ubuntu 16.04
2017-03-16
Cách cấu hình client FreeIPA trên Ubuntu 16.04
2017-03-08