Une compilation de documentations   { en , fr }

Les options associées aux clefs ssh dans authorized_keys

Étiquette:
Créé en:
Dernière modification:
Auteur:
Xavier Béguin

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