Можно включить SSH и отключить SFTP как глобально, так и для каждого пользователя / группы.
Лично мне это нужно, потому что я хочу предоставить доступ к некоторым git-репозиториям через SSH, и мне нравится отключать ненужные системы. В этом случае SFTP не нужен.
глобально
Вы можете отключить SFTP для всех пользователей несколькими способами.
Недостающая подсистема
SFTP-демон, используемый SSH, можно настроить через Subsystem
ключевое слово. Из sshd_config(5)
руководства:
Subsystem
Configures an external subsystem (e.g. file transfer daemon).
Arguments should be a subsystem name and a command (with optional
arguments) to execute upon subsystem request.
The command sftp-server(8) implements the “sftp” file transfer
subsystem.
Alternately the name “internal-sftp” implements an in-process
“sftp” server. This may simplify configurations using
ChrootDirectory to force a different filesystem root on clients.
By default no subsystems are defined.
Последняя строка предполагает, что этого должно быть достаточно, чтобы не определять подсистему для «sftp».
Ложная ложь
Вы также можете отключить SFTP, установив демон SFTP, используемый SSH, на что-то непригодное. Например, настройте подсистему "sftp" на /bin/false
:
Subsystem sftp /bin/false
Когда что-то пытается войти через SFTP, демон SSH пытается запустить «демон sftp» /bin/false
. /bin/false
Программа делает только одну вещь, и это возвращает код ошибки. Попытка подключения SFTP фактически отклонена.
На пользователя / группу
Также возможно отключить 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
соответствует пользователям "Стивен" и "Мария"
Match Group wheel,adams,simpsons
соответствует группам "колесо", "адамс", "симпсоны"
Если вы хотите получить больше информации, в sshd_config(5)
руководстве есть грузы .
Принудительная команда
Обычно вы получаете пользовательскую оболочку входа в систему при подключении через SSH, но SSH может быть настроен для принудительного выполнения определенной команды. Команда принудительна для любого соединения SSH, включая SFTP, и, таким образом, у вас может быть возможность принудительно ввести нужную команду.
Команду force можно настроить с помощью 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