Re: Sudo
Salut,
Le 01/09/2010 10:11, Le Cerdocyon a écrit :
Sur un de nos serveurs un compte utilisateur (james) spécifique peut
lancer des commandes liées à une application.
Il n'y à que lui qui peut lancer cette commande puisqu'il à tout de
correctement positionné dans ses variables d'environnements.
Pour une tache précise d'exploitation, j'ai besoin de créer un compte
utilisateur qui pourra se connecter en ssh sur ce serveur et qui pourrait
exécuter une commande lié à l'utilsateur james.
Côté client (donc sur chaque client :-/), créer une clef ssh avec une
passphrase vide et un nom spécial (pas id_rsa, plutôt genre james_cmd).
Côté serveur installer la partie publique de cette clef dans
~james/.ssh/authorized_keys en rajoutant en début de ligne une option
"command" :
command="/usr/local/bin/super-commande.sh" ssh-rsa.....
Sans doute rajouter d'autres options genre no-pty, no-port-forwarding, etc...
Puis à nouveau côté client :
ssh -i ~/.ssh/james_cmd james@serveur /usr/local/bin/super-commande.sh
Ça devrait faire exactement ce que tu veux. En revanche c'est pas très
facile à mettre en œuvre si il y a beaucoup de monde. On peut bien sûr
simplifier en recopiant la paire clef publique/privée générée pour le
premier compte dans les .ssh des autres utilisateurs, on peut encore
simplifier l'appel en encapsulant l'appel via ssh dans un alias, ou dans les
.ssh/config, etc. mais au total il faut intervenir sur le compte de chaque
utilisateur...
Je ne veut pas que les exploitants se connecte avec le compte james.
Ils se connecteront avec ce compte, mais sans avoir besoin d'en connaître le
mot de passe et sans pouvoir faire autre chose que
"/usr/local/bin/super-commande.sh" (essaie, c'est marrant...).
Si il y a plus d'une commande à lancer, alors tu peux faire
command="/usr/local/bin/james-restricted-ssh" et dans ce script parser
$SSH_ORIGINAL_COMMAND pour gicler les trucs dangereux avec un script genre :
msg="Command not allowed with this key"
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo $msg
;;
*\(*)
echo $msg
;;
*\{*)
echo $msg
;;
*\;*)
echo $msg
;;
*\<*)
echo $msg
;;
*\`*)
echo $msg
;;
*\|*)
echo $msg
;;
james-compute*)
$SSH_ORIGINAL_COMMAND
;;
james-display*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo $msg
;;
esac
etc, etc...
HTH
phep
Reply to:
- Follow-Ups:
- Re: Sudo
- From: "Jean-Yves F. Barbier" <12ukwn@gmail.com>
- References:
- Sudo
- From: Le Cerdocyon <le.cerdocyon@gmail.com>