Il est possible d'activer SFTP globalement et de désactiver SFTP uniquement pour certains utilisateurs.
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 souhaitez uniquement donner accès à un programme spécifique.
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.
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
owner
d'accès sortant. Cela suppose que vous allez être testé par une équipe rouge. Si tout le monde accédant à votre système obéit toujours aux règles et n'a jamais de mauvaise intention, alors mon approche serait lourde et trop complexe.