Cách bật SFTP mà không cần quyền truy cập Shell trên CentOS 7
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 :
- Một server CentOS 7 được cài đặt với hướng dẫn cài đặt server ban đầu này , bao gồm một user không phải root có quyền sudo .
- Tùy chọn, editor
nano
được cài đặt vớiyum install nano
. CentOS đi kèm với editorvi
theo mặc định, nhưngnano
có thể thân thiện với user hơ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
Tiếp theo, gán password cho user mới:
- sudo passwd sammyfiles
Nhập password mạnh và lặp lại để xác minh.
Đế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ả CentOS 7) 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 .
Hãy mở file cấu hình server SSH bằng vi
hoặc editor yêu thích của bạn (đây là phần giới thiệu ngắn về vi
)
- sudo vi /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
. Bạn có thể tìm hiểu thêm về chroot trong hướng dẫn chroot dựa trên Ubuntu 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 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 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 .
Các tin liên quan
Cách theo dõi cảnh báo Zabbix với Alerta trên CentOS 72017-05-31
Cách cài đặt Perlbrew và quản lý nhiều phiên bản Perl 5 trên CentOS 7
2017-05-31
Cách cấu hình NTP để sử dụng trong Dự án NTP Pool trên CentOS 7
2017-05-11
Cách lưu trữ một trang web với Caddy trên CentOS 7
2017-05-10
Cách cài đặt và cấu hình Ghost trên CentOS 7
2017-04-10
Cách cấu hình một client FreeIPA trên CentOS 7
2017-03-24
Cách theo dõi các chỉ số hệ thống bằng TICK Stack trên CentOS 7
2017-03-12
Cách thiết lập xác thực đa yếu tố cho SSH trên CentOS 7
2017-03-08
Cách cài đặt và bảo mật message broker MQTT Mosquitto trên CentOS 7
2017-01-23
Cách thay đổi thư mục dữ liệu MariaDB thành vị trí mới trên CentOS 7
2016-12-19