Можна включити 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
відповідає користувачам "stephen" та "maria"
Match Group wheel,adams,simpsons
відповідає групам "колесо", "Адамс", "Сімпсон"
Якщо ви хочете отримати додаткову інформацію, у sshd_config(5)
посібнику є вантажі .
Примусова команда
Зазвичай ви отримуєте оболонку входу користувача під час підключення через SSH, але SSH може бути налаштований так, щоб форсувати певну команду. Команда вимушена для будь-якого з'єднання SSH, включаючи SFTP, і, таким чином, у вас може бути можливість застосувати потрібну команду.
Команду for 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