OpenSSH bất cứ điều gì như 'nội bộ-sftp' nhưng đối với SCP?


16

Tôi đang chạy Debian ổn định và tôi đang tìm cách thiết lập môi trường sau cho những người dùng trong nhóm 'sftponly' của tôi:

  • bỏ tù
  • có thể chuyển bằng SFTP
  • có thể chuyển với SCP
  • không thể đăng nhập tương tác với SSH

Từ thử nghiệm và nghiên cứu của tôi, có vẻ như các khổ thơ sau trong sshd_config đưa tôi đến 90% ở đó:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Điều này mang lại cho tôi SFTP bị bỏ tù và không có SSH, điều này là tốt. Nhưng nó cũng vô hiệu hóa SCP, điều này không lý tưởng vì khá nhiều khách hàng là di sản, các quy trình được sử dụng theo kịch bản sử dụng SCP thay vì SFTP (máy chủ chúng tôi thay thế cả hai giao thức) và vì các máy khách đó không thuộc quyền kiểm soát của chúng tôi và dễ dàng đã sửa đổi, có thể không thực tế để vô hiệu hóa SCP hoàn toàn.

Điều hợp lý là cấu hình này sẽ vô hiệu hóa SCP, vì các kết nối SCP đến khiến sshd sinh ra một quá trình 'scp' thông qua vỏ đăng nhập của người dùng, với tư cách là người dùng đó. Có vẻ như điều tương tự thường đúng với SFTP, phải không đối với trình xử lý 'nội bộ sftp' đặc biệt.

Vì vậy, tôi cho rằng câu hỏi của tôi là: có cách nào để đạt được hiệu quả tương tự như 'nội bộ' nhưng đối với SCP, mà không cần sử dụng các công cụ của bên thứ ba như scponly và rssh? Điều thực sự thú vị về 'nội bộ' là nó không yêu cầu thiết lập một nhà tù với các tệp hỗ trợ hoặc xử lý các tệp nhị phân của bên thứ ba có khả năng khai thác (đặc biệt là rssh, có lịch sử khai thác).


1
Các máy khách đang kết nối bằng tệp khóa ssh hay chúng đang sử dụng mật khẩu? Nếu đó là một keyfile, có thể hạn chế những gì họ có thể làm.
Jenny D nói Phục hồi lại

Họ đang kết nối với mật khẩu.
brianjcohen

Câu trả lời:


3

Hãy xem rssh là một vỏ thay thế cho phép truy cập hạn chế vào hệ thống.

rssh là một vỏ bị hạn chế để cung cấp quyền truy cập hạn chế vào máy chủ thông qua ssh (1), cho phép người dùng có vỏ được cấu hình để rssh sử dụng một hoặc nhiều lệnh (s) scp (1), sftp (1) cvs (1) ), rdist (1) và rsync (1) và chỉ những lệnh đó.

Bạn có thể định cấu hình các lệnh nào có thể được sử dụng trên cơ sở cho mỗi người dùng hoặc toàn hệ thống bằng cách sử dụng tệp rssh.conf

Ngoài ra, bạn có thể sử dụng một cách khéo léo để làm những gì bạn muốn. Nó hoạt động như một trình bao bọc cho bộ ssh và cho phép truyền tệp nhưng không truy cập shell.


2

Bạn có cần phải làm điều này thông qua ssh?

NẾU bạn có thể thử đặt vỏ của chúng thành:

/usr/libexec/openssh/sftp-server

Và hãy chắc chắn rằng bạn thêm phần trên vào / etc / shell

Nếu bạn muốn tách rời khỏi việc sử dụng các tài khoản tích hợp, bạn có thể thiết lập proftpd

Tôi thiết lập một SFTP an toàn bằng cách sử dụng proftpd. biên dịch proftpd như vậy:

./mình --prefix = / usr --sysconfdir = / etc --with-mô-đun = mod_sftp

Có thể sử dụng bài viết này bên dưới và một số thông tin khác trên google về cách thiết lập nó:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html


2

Tôi e rằng không có gì dễ dàng hoặc đáng tin cậy tương tự với OpenSSH, vì như bạn thấy có một máy chủ SFTP tích hợp, nhưng không có máy chủ SCP tích hợp.

Một cảnh báo: đề xuất của Vince Berk là xấu vì một số lý do:

  1. Hành vi của shell liên quan đến các tệp khởi động có thể bị ảnh hưởng bởi các biến môi trường, mà SSH có thể được đặt từ xa tùy thuộc vào cấu hình máy chủ.
  2. Người dùng chỉ có thể chạy ssh / bin / bash và lấy shell. Nó sẽ không có tty và vì vậy sẽ bất tiện khi sử dụng, nhưng vì vậy ... không đề cập đến tất cả các chương trình khác mà anh ấy có thể chạy mà có lẽ bạn không muốn anh ấy làm.
  3. Thay đổi quyền của .bash_profile sẽ không tốt nếu người dùng chỉ có thể thực hiện "ssh host rm -f .bash_profile"; không có gì được đề cập về các quyền của thư mục nhà.

... và như thế. Cách tiếp cận này chỉ là cách quá mong manh.


0

Đây là một công cụ của bên thứ ba, không nằm trong phạm vi của câu hỏi, nhưng tôi nghĩ dù sao nó cũng xứng đáng được đề cập.

Jailkit: https://olivier.sessink.nl/jailkit/

Nó có một bộ công cụ để giúp dễ dàng thiết lập các nhà tù của người dùng - sao chép các tệp nhị phân và thư viện vào nhà tù và thiết lập việc ghi nhật ký từ bên trong nhà tù vào HĐH. Tôi đã sử dụng nó để xây dựng các chroots sftp / scp / rsync.

Nó cũng đi kèm với jk_lsh(shellkit giới hạn) có thể được sử dụng bên ngoài nhà tù để giới hạn các lệnh mà người dùng có thể chạy, nếu bạn muốn chỉ cho phép scp / sftp / rsync mà không cần chroot.


-1

Đây là một mẹo về cách thực hiện máy chủ này. Đặt shell của người dùng, giả sử, bash:

usermod -S /bin/bash [username]

Bây giờ tạo trong homedir của họ một '.bash_profile' với dòng sau:

[ -n "$PS1" ] && exit

Điều này khiến các phiên không tương tác (như 'scp') tiếp tục. Tuy nhiên, nếu họ cố gắng đăng nhập 'ssh', 'exit' sẽ được gọi và kết nối bị đóng.

Hãy chắc chắn rằng họ không thể 'sftp' một '.bash_profile' mới vào thư mục nhà của họ!

chown root:root .bash_profile

Mong rằng sẽ giúp!


Cách tiếp cận này dường như không tính đến yêu cầu của nhà tù.
brianjcohen

Có, thật không may, bạn sẽ phải tạo một môi trường chroot thủ công cho phía 'scp', chồng lấp với thư mục chroot được đưa ra trong sshd_config và thực hiện thủ thuật trên cho mỗi người dùng bạn muốn hạn chế. 'Scp' không hoạt động với máy chủ sftp nội bộ.
Vince Berk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.