Làm cách nào để tắt sftp cho một số người dùng, nhưng vẫn bật ssh?


12

Dự án của tôi cần tôi vô hiệu hóa sftp cho một số người dùng, nhưng những người dùng đó vẫn cần kết nối qua ssh. Có ai biết làm thế nào để thực hiện điều này?

Tôi đã thấy các đề xuất để thay đổi tệp tại /etc/ssh/sshd_config, nhưng tôi không biết phải thay đổi gì.


Cách duy nhất tôi có thể tưởng tượng khi làm điều này là sử dụng chính sách MLS trong SELinux và hạn chế chính xác những tệp, thư mục và ổ cắm mà một người có thể truy cập, thực thi, v.v. Tôi sẽ làm điều này kết hợp với chính sách iptables hạn chế cao sử dụng mô-đun ownerđể truy cập ra ngoài. Điều này giả định rằng bạn sẽ được thử nghiệm bởi một đội đỏ. Nếu tất cả mọi người truy cập vào hệ thống của bạn luôn tuân thủ các quy tắc và không bao giờ có ý định xấu, thì cách tiếp cận của tôi sẽ rất nặng nề và quá phức tạp.
Aaron

Câu trả lời:


7

Nói chung làm điều này là thực hành bảo mật xấu vì lý do mà những người khác đã liệt kê. Tuy nhiên, quan điểm của bài tập của bạn, tôi nghĩ, là dạy bạn rằng bạn có thể có các phần cấu hình có điều kiện dựa trên các tiêu chí khác nhau.

Cách để làm điều này là sử dụng một Matchkhối có điều kiện *.

Match User bob
Subsystem   sftp  /bin/false

Xem sshd_config(5)bên dưới Matchphần để biết thêm thông tin và phù hợp trên Group.

* Có nhiều hơn một cách để làm điều đó.


7
Nó không làm việc cho tôi. Lỗi: Chỉ thị 'Hệ thống con' không được phép trong khối Kết hợp
bắt đầu từ

Câu trả lời sai vì Hệ thống con không được phép trong Khối kết hợp
mikep

6

Điều này không có ý nghĩa gì, nó là bảo mật thông qua sự tối nghĩa vô dụng. Bất kỳ người dùng nào có thể SSH sẽ có thể chuyển bất kỳ tệp nào họ có thể đọc qua phiên SSH. Bạn cũng sẽ có thể viết, nếu bạn có quyền làm như vậy.

Như có thể ví dụ, bạn có thể tải xuống / etc / passwd qua ssh bằng phương thức sau (không yêu cầu phiên scp / sftp): ssh foo@bar.com "cat / etc / passwd"> passwdcopy

Nếu bạn có thể nhìn thấy nó trên màn hình của mình thông qua SSH, thì bạn có thể dễ dàng sao chép nó dưới dạng tệp.

Cách duy nhất điều này sẽ có ý nghĩa là nếu bạn có một vỏ bị hạn chế tùy chỉnh thực thi chính sách bảo mật.

Tuy nhiên, nghịch đảo của điều này có ý nghĩa (vô hiệu hóa ssh shell nhưng kích hoạt scp / sftp) vì bạn không thể thực thi các lệnh tùy ý thông qua sftp / scp mà bạn có thể thông qua shell ssh.

PS: Tôi giả sử shell SSH mà bạn cấp là một shell chuẩn cho phép thực thi tùy ý. Nếu đây không phải là trường hợp thì hãy xem điều này: Làm cách nào để tắt hệ thống con sftp cho một người dùng hoặc nhóm cụ thể? và hãy xem tùy chọn cấu hình hệ thống con của sshd_config.


4
Match Group nosft
Subsystem   sftp  /bin/false

Tôi thích sử dụng một nhóm cho việc này.

Nó rất hữu ích khi kết hợp với người dùng có vỏ bị hạn chế. Đôi khi tôi cung cấp cho ssh quyền truy cập vào một máy khách để họ có thể truy cập vào một khối dữ liệu sql của cơ sở dữ liệu của họ bằng cách đặt shell của chúng thành một tập lệnh bỏ dữ liệu của chúng. Cắt chúng ra khỏi scp dường như cũng là một ý tưởng thông minh. Họ không có quyền truy cập để chạy catmột tập tin qua ssh.


3
Directive 'Subsystem' is not allowed within a Match block
Patryk

Câu trả lời sai vì Hệ thống con không được phép trong Khối kết hợp
mikep

4

Có thể kích hoạt SFTP trên toàn cầu và chỉ vô hiệu hóa SFTP cho một số người dùng.

Điều này không hoạt động nếu bạn muốn người dùng của mình nhận được một dấu nhắc shell thông thường. Cũng không có nghĩa gì, vì bạn có thể phá vỡ hầu hết mọi thứ nếu bạn có quyền truy cập shell. Nó sẽ chỉ hoạt động nếu bạn chỉ muốn cấp quyền truy cập vào một chương trình cụ thể.

Cá nhân tôi cần điều này bởi vì tôi muốn cấp quyền truy cập vào một số kho git qua SSH và tôi muốn vô hiệu hóa các hệ thống không cần thiết. Trong trường hợp đó SFTP là không cần thiết.

Phù hợp

Để khớp với nhóm người dùng, bạn có thể định cấu hình SSH với Matchtừ khóa. Từ sshd_config(5)hướng dẫn:

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

Một vài ví dụ:

  • Match User eva phù hợp với người dùng "eva"
  • Match User stephen,maria phù hợp với người dùng "stephen" và "maria"
  • Match Group wheel,adams,simpsons phù hợp với các nhóm "bánh xe", "adams", "simpsons"

Nếu bạn muốn biết thêm thông tin, có tải trong sshd_config(5)hướng dẫn.

Lệnh cưỡng bức

Thông thường, bạn nhận được vỏ đăng nhập của người dùng khi bạn kết nối qua SSH, nhưng SSH có thể được cấu hình để buộc một lệnh nhất định. Lệnh bị buộc đối với mọi kết nối SSH, bao gồm SFTP, và do đó bạn có thể có tùy chọn để buộc lệnh bạn muốn.

Lệnh bắt buộc có thể được cấu hình với ForceCommandtừ khóa. Từ sshd_config(5)hướng dẫn:

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

Vì vậy, bạn có thể buộc lệnh bị ràng buộc mà bạn muốn sử dụng ForceCommand <your command>. Ví dụ:

Match User kim
        ForceCommand echo 'successful login man, congrats'

Thí dụ

Trong trường hợp tôi muốn cấp quyền truy cập git, tôi chỉ cần người dùng có quyền truy cập git-shell. Đây là phần vô hiệu hóa SFTP cho người dùng git của tôi, cùng với một số tùy chọn bảo mật:

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no

1
Này không trả lời câu hỏi của OP, nhưng nó rất hữu ích cho tôi để đạt được những gì tôi muốn đạt được trong trường hợp sử dụng của riêng tôi
Kidburla

Tôi không đồng ý. Câu hỏi của OP là "Làm cách nào để tắt sftp cho một số người dùng, nhưng vẫn bật ssh?", Và câu trả lời này giải thích một cách để làm điều đó. Vui mừng bạn vẫn thấy nó hữu ích!
aude

Bằng cách thừa nhận của riêng bạn, "không hoạt động nếu bạn muốn người dùng của mình nhận được lời nhắc shell thông thường". vì vậy, điều này không đáp ứng yêu cầu "giữ ssh cho phép" của
OP

Đó là một điểm hay. Tôi đoán rằng tôi đã đồng ý với giải pháp này vì "Nó cũng không có ý nghĩa gì, vì bạn có thể phá vỡ hầu hết mọi thứ nếu bạn có quyền truy cập shell.". Nhưng tôi đã không tìm được cách chính xác những gì OP yêu cầu, tôi đồng ý ngay bây giờ.
aude

Đây là phiên bản đầy đủ hơn của câu trả lời này: serverfault.com/a/817482
aude

1
Match User bob
MaxSessions 0

Đã thử nghiệm và làm việc trên CentOS 6.6. Lưu ý rằng Hệ thống con không được phép với Kết hợp ít nhất trên các phiên bản CentOS mới hơn. Trang chủ cho sshd_config liệt kê các từ khóa giới hạn được phép với điều kiện Khớp.


0

Bạn có thể nhìn vào scponly để làm ngược lại, chỉ cho phép scp / sftp nhưng không có quyền truy cập shell.

Tôi đồng ý với @Nathan ở trên, điều này không có ý nghĩa gì cả. Nếu bạn đã chết, hãy thử chỉnh sửa tệp / etc / ssh / sshd_config và xóa / nhận xét dòng sau:

Hệ thống con sftp / usr / libexec / openssh / sftp-server


0

không có thư mục nhà cho người dùng

usermod username -d /bin/false

Thay đổi hệ thống con sftp / usr / libexec / openssh / sftp-server trong tệp / etc / ssh / sshd_config thành Hệ thống con sftp / dev / null / usr / libexec / openssh / sftp-server

Sau đó khởi động lại ssh

service ssh restart

nó làm việc cho tôi, debian.


-2

Trong ~/authorized_keycấu hình khóa người dùng như sau:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
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.