Es ist möglich, SSH global und pro Benutzer / Gruppe zu aktivieren und SFTP zu deaktivieren.
Ich persönlich benötige dies, weil ich über SSH Zugriff auf einige Git-Repositorys gewähren möchte und ich nicht benötigte Systeme gerne deaktiviere. In diesem Fall wird SFTP nicht benötigt.
Global
Sie können SFTP auf verschiedene Arten für alle Benutzer deaktivieren.
Das fehlende Subsystem
Der von SSH verwendete SFTP-Dämon kann über das Subsystem
Schlüsselwort konfiguriert werden . Aus dem sshd_config(5)
Handbuch:
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.
Die letzte Zeile schlägt vor, dass es ausreichen sollte, kein Subsystem für "sftp" zu definieren.
Eine falsche Lüge
Sie können SFTP auch deaktivieren, indem Sie den von SSH verwendeten SFTP-Dämon auf einen nicht verwendbaren Wert einstellen. Konfigurieren Sie das Subsystem "sftp" beispielsweise so, dass /bin/false
:
Subsystem sftp /bin/false
Wenn etwas versucht, sich über SFTP anzumelden, versucht der SSH-Dämon, den "sftp-Dämon" zu erzeugen /bin/false
. Das /bin/false
Programm macht nur eine Sache, nämlich einen Fehlercode zurückzugeben. Der SFTP-Verbindungsversuch wird effektiv abgelehnt.
Pro Benutzer / Gruppe
Es ist auch möglich, SFTP pro Benutzer, Gruppe oder einige andere Kriterien zu deaktivieren.
Dies funktioniert nicht, wenn Ihr Benutzer eine reguläre Shell-Eingabeaufforderung erhalten soll. Es macht auch keinen Sinn, da Sie die meisten Dinge umgehen könnten, wenn Sie Shell-Zugriff haben.
Dies funktioniert nur, wenn Sie nur Zugriff auf ein bestimmtes Programm gewähren möchten.
Passend
Um eine Gruppe von Benutzern abzugleichen, können Sie SSH mit dem Match
Schlüsselwort konfigurieren . Aus dem sshd_config(5)
Handbuch:
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).
...
Einige Beispiele:
Match User eva
Entspricht dem Benutzer "eva"
Match User stephen,maria
Entspricht den Benutzern "stephen" und "maria"
Match Group wheel,adams,simpsons
Entspricht den Gruppen "Wheel", "Adams", "Simpsons"
Wenn Sie weitere Informationen wünschen, enthält das sshd_config(5)
Handbuch zahlreiche Informationen .
Befehl erzwungen
Normalerweise erhalten Sie die Anmeldeshell des Benutzers, wenn Sie eine Verbindung über SSH herstellen. SSH kann jedoch so konfiguriert werden, dass ein bestimmter Befehl erzwungen wird. Der Befehl wird für jede SSH-Verbindung, einschließlich SFTP, erzwungen, sodass Sie möglicherweise die Option haben, den gewünschten Befehl zu erzwingen.
Der zu erzwingende Befehl kann mit dem ForceCommand
Schlüsselwort konfiguriert werden . Aus dem
sshd_config(5)
Handbuch:
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”.
So können Sie den eingeschränkten Befehl erzwingen, den Sie verwenden möchten ForceCommand <your command>
. Beispielsweise:
Match User kim
ForceCommand echo 'successful login man, congrats'
Beispiel
In meinem Fall, in dem ich Git-Zugriff gewähren möchte, muss der Benutzer nur Zugriff auf haben git-shell
. In diesem Abschnitt wird SFTP für meine Git-Benutzer zusammen mit einigen Sicherheitsoptionen deaktiviert:
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