Назад | Перейти на главную страницу

Как отключить sftp для некоторых пользователей, но оставить ssh включенным?

Мой проект требует, чтобы я отключил sftp для некоторых пользователей, но этим пользователям все равно нужно подключаться по ssh. Кто-нибудь знает, как это реализовать?

Я видел предложения по изменению файла на /etc/ssh/sshd_config, но я не уверен, что менять.

В общем, это плохая практика безопасности по причинам, перечисленным другими. Однако, я думаю, цель вашего задания - научить вас, что у вас могут быть условные разделы конфигурации, основанные на различных критериях.

Способ сделать это - использовать Match условный блок *.

Match User bob
Subsystem   sftp  /bin/false

Видеть sshd_config(5) под Match раздел для получения дополнительной информации и сопоставления на Group.

* Есть несколько способов сделать это.

В этом нет никакого смысла, это безопасность через бесполезную неизвестность. Любой пользователь, который может использовать SSH, сможет передать любой файл, который он сможет прочитать, через сеанс SSH. Вы также сможете писать, если у вас есть на это разрешение.

Например, вы можете загрузить / etc / passwd через ssh, используя следующий метод (сеанс scp / sftp не требуется): ssh foo@bar.com "cat / etc / passwd"> passwdcopy

Если вы видите его на своем экране через SSH, вы можете легко скопировать его в виде файла.

Единственный способ, которым это будет иметь смысл, - это если у вас есть настраиваемая ограниченная оболочка, которая применяет политику безопасности.

Однако обратное этому имеет смысл (отключение оболочки ssh, но оставление scp / sftp включенным), потому что вы не можете выполнять произвольные команды через sftp / scp, что вы можете через оболочку ssh.

PS: Я предполагаю, что предоставляемая вами оболочка SSH является стандартной оболочкой, допускающей произвольное выполнение. Если это не так, посмотрите это: Как отключить подсистему sftp для определенного пользователя или группы? и взгляните на параметр конфигурации подсистемы sshd_config.

Match Group nosft
Subsystem   sftp  /bin/false

Я предпочитаю использовать для этого группу.

Это полезно в сочетании с пользователями, у которых есть ограниченные оболочки. Иногда я даю ssh-доступ клиенту, чтобы он мог получить доступ к sql-дампу своей базы данных, установив в своей оболочке сценарий, который выгружает их данные. Отрезать их от scp тоже кажется разумной идеей. У них нет доступа к бегу cat передать файл по ssh.

Можно включить SFTP глобально и отключить SFTP только для некоторых пользователей.

Это не сработает, если вы хотите, чтобы ваш пользователь получал обычное приглашение оболочки. Это также не имеет смысла, поскольку вы можете обойти большинство вещей, если у вас есть доступ к оболочке. Это будет работать только в том случае, если вы хотите предоставить доступ только определенной программе.

Мне лично это нужно, потому что я хочу предоставить доступ к некоторым репозиториям git через SSH, и мне нравится отключать системы, которые не нужны. В этом случае SFTP не нужен.

Соответствие

Чтобы соответствовать набору пользователей, вы можете настроить SSH с Match ключевое слово. Из sshd_config(5) руководство:

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).

        ...

Пара примеров:

  • Match User eva соответствует пользователю "eva"
  • Match User stephen,maria соответствует пользователям "stephen" и "maria"
  • Match Group wheel,adams,simpsons соответствует группам "wheel", "adams", "simpsons"

Если вам нужна дополнительная информация, в sshd_config(5) руководство.

Принудительная команда

Обычно вы получаете оболочку входа пользователя при подключении через SSH, но SSH можно настроить для принудительного выполнения определенной команды. Команда принудительно применяется для любого SSH-соединения, включая SFTP, и поэтому у вас может быть возможность принудительно выполнить команду, которую вы хотите.

Команду принудительного выполнения можно настроить с помощью ForceCommand ключевое слово. Из sshd_config(5) руководство:

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”.

Таким образом, вы можете принудительно использовать ограниченную команду, которую хотите использовать ForceCommand <your command>. Например:

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

пример

В моем случае, когда я хочу предоставить доступ к git, мне нужен только пользователь, чтобы иметь доступ к git-shell. Это раздел, который отключает SFTP для моих пользователей git, а также некоторые параметры безопасности:

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
Match User bob
MaxSessions 0

Протестировано и работает на CentOS 6.6. Обратите внимание, что Subsystem не допускается с Match по крайней мере в более новых версиях CentOS. На странице руководства для sshd_config перечислены ограниченные ключевые слова, которые разрешены с условием соответствия.

Вы можете посмотреть на scponly чтобы сделать наоборот, разрешите только scp / sftp, но без доступа к оболочке.

Я согласен с @Nathan выше, это не имеет большого смысла. Если вы полностью настроены, попробуйте отредактировать файл / etc / ssh / sshd_config и удалить / закомментировать следующую строку:

Подсистема sftp / usr / libexec / openssh / sftp-server

не указывать домашний каталог для пользователя

usermod username -d /bin/false

Измените Subsystem sftp / usr / libexec / openssh / sftp-server в файле / etc / ssh / sshd_config на Subsystem sftp / dev / null / usr / libexec / openssh / sftp-server

Затем перезапустите ssh

service ssh restart

у меня это работает, дебиан.

в ~/authorized_key настройте пользовательский ключ следующим образом:

command="/bin/bash" ssh-rsa AAAAB3Nz.........