Limiter les machines autorisées à utiliser la clef
Pour limiter les machines autorisées à d'authentifier à l'aide d'une clef
particulière, il suffit d'ajouter l'option from=
devant la clef SSH concernée
dans le fichier ~/.ssh/authorized_keys
. Lorsque cette option est utilisée,
une connexion dont l'adresse source n'est pas désignée par celle-ci ne sera pas
autorisée, même si la clef SSH présentée est valable.
Cette option doit fournir une liste
de motifs qui désignent les adressse IP des machines autorisées à utiliser
cette clef. Ces adresses peuvent être désignées par des motifs de noms DNS
(obtenus par le champ DNS PTR de l'adresse source, c'est à dire le DNS
inverse), uniquement si le daemon OpenSSH a été configuré avec la directive
UseDNS yes
(ce qui n'est pas le cas par défaut ; voir encadré ci-dessous).
Par exemple, la ligne suivante autorise les machines d'adresse 192.168.0.[0-9], ou du domaine example.com à se connecter, à l'exception des machines du sous-domaine *.dialup.example.com :
from="192.168.0.?,!*.dialup.example.com,*.example.com" ssh-rsa AAAAB3Nza...LiPk== user@host.example.com
Les motifs autorisés dans cette option sont décrits en détail dans la section PATTERNS de la page de manuel ssh_config(5) (en anglais).
Comme indiqué ci-dessus, pour pouvoir utiliser des noms DNS dans l'option
from=
comme dans l'exemple, le daemon OpenSSH doit avoir été configuré
explicitement avec une directive UseDNS yes
dans le fichier
/etc/ssh/sshd_config
. Cette option UseDNS
vaut no
par défaut en raison du
risque de sécurité que l'utilisation du DNS peut représenter (ne la modifiez
que si vous en comprenez les conséquences).
La directive UseDNS
est décrite dans la page de manuel
sshd_config(5)
(en anglais). Pour savoir si UseDNS
vaut yes
ou no
dans votre
configuration OpenSSH, vous pouvez utiliser la commande sudo sshd -T | grep usedns
.
Forcer l'exécution d'une commande
L'option command=
permet quant à elle de préciser une commande à exécuter à la
place de la commande fournie par la machine distante.
La commande originale fournie par le client ssh sur la machine initiant la
connexion n'est exécutée, mais est passée à la commande forcée dans la variable
d'environnement SSH_ORIGINAL_COMMAND
.
Exemple:
command="/usr/local/bin/my_wrapper_script.sh user" ssh-rsa AAAAC3...51R== user@host.example.org
Cette fonctionnalité est très pratique modifier les commandes d'exécution à distance ou les vérifier avant d'autoriser leur exécution sur la machine. Elle permet par exempe de limiter les accès rsync à un répertoire.
Modifier l'environnement
L'option environment=
définit des variables dans l'environnement de la
commande exécutée lors de la connexion.
Pour pouvoir l'utiliser, il faut d'abord avoir autorisé la modificication de
l'environnement, qui est interdit par défaut par la directive
PermitUserEnvironment
dans le fichier de configuration du daemon OpenSSH
(voir le manuel
sshd_config(5)),
car cela peut avoir des conséquences sur la sécurité du processus exécuté (à
autoriser avec prudence, donc).
Plusieurs options environment=
peuvent être précisées :
environment="MYVAR1=value1",environment="MYVAR2=value2" ssh-rsa AAAAC3...51R== user@host.example.org
Interdire les redirections
Les options no-agent-forwarding
, no-port-forwarding
, et no-X11-forwarding
permettent respectivement d'interdire l'utilisation de redirections d'agent
SSH, de ports TCP, ou d'écran X11. Ces options peuvent notamment compléter des
options comme command
, par exemple, pour s'assurer que la connexion ne sera
pas utilisée pour autre chose que l'exécution de la commande forcée :
command="dump /home",no-X11-forwarding,no-port-forwarding ssh-rsa AAAAC3...51R== user@host.example.org
Limiter les redirections de port
Il est également possible de limiter la redirection de ports TCP rendue
possible via l'option -L
du client OpenSSH à une machine et un port
particuliers. Aucun motif n'est accepté, mais la commande peut être répétée :
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa AAAAB5...21S== user@host.example.org