[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: