Il est possible d'activer SSH et de désactiver SFTP à la fois globalement et par utilisateur / groupe.
Personnellement, j'en ai besoin parce que je veux donner accès à certains dépôts git via SSH, et j'aime désactiver les systèmes qui ne sont pas nécessaires. Dans ce cas, SFTP n'est pas nécessaire.
Globalement
Vous pouvez désactiver SFTP pour tous les utilisateurs de plusieurs manières.
Le sous-système manquant
Le démon SFTP utilisé par SSH peut être configuré via le Subsystem
mot clé. Du sshd_config(5)
manuel:
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.
La dernière ligne suggère qu'il devrait suffire de ne définir aucun sous-système pour "sftp".
Un faux mensonge
Vous pouvez également désactiver SFTP en définissant le démon SFTP utilisé par SSH sur quelque chose d'inutilisable. Par exemple, configurez le sous-système "sftp" pour /bin/false
:
Subsystem sftp /bin/false
Lorsque quelque chose tentait de se connecter via SFTP, le démon SSH tentait de générer le "démon sftp" /bin/false
. Le /bin/false
programme ne fait qu'une chose, c'est de renvoyer un code d'erreur. La tentative de connexion SFTP est effectivement refusée.
Par utilisateur / groupe
Il est également possible de désactiver SFTP par utilisateur, groupe ou quelques autres critères.
Cela ne fonctionne pas si vous souhaitez que votre utilisateur reçoive une invite shell standard. Cela n'a pas non plus de sens, car vous pourriez contourner la plupart des choses si vous avez accès au shell.
Cela ne fonctionnera que si vous ne souhaitez donner accès qu'à un programme spécifique.
Correspondant à
Pour faire correspondre un ensemble d'utilisateurs, vous pouvez configurer SSH avec le Match
mot clé. Du sshd_config(5)
manuel:
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).
...
Quelques exemples:
Match User eva
correspond à l'utilisateur "eva"
Match User stephen,maria
correspond aux utilisateurs "stephen" et "maria"
Match Group wheel,adams,simpsons
correspond aux groupes "roue", "adams", "simpsons"
Si vous voulez plus d'informations, il y a des charges dans le sshd_config(5)
manuel.
Commande forcée
Normalement, vous obtenez le shell de connexion de l'utilisateur lorsque vous vous connectez via SSH, mais SSH peut être configuré pour forcer une certaine commande. La commande est forcée pour toute connexion SSH, y compris SFTP, et vous pouvez donc avoir la possibilité de forcer la commande souhaitée.
La commande à forcer peut être configurée avec le ForceCommand
mot - clé. Du
sshd_config(5)
manuel:
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”.
Vous pouvez donc forcer la commande contrainte que vous souhaitez utiliser ForceCommand <your command>
. Par exemple:
Match User kim
ForceCommand echo 'successful login man, congrats'
Exemple
Dans mon cas où je veux donner un accès à git, j'ai seulement besoin que l'utilisateur y ait accès git-shell
. C'est la section qui désactive SFTP pour mes utilisateurs git, avec quelques options de sécurité:
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