Forum général.général Limiter les commandes à une clé ssh

Posté par (page perso) .
Tags : aucun
1
9
mar.
2009

Je me souviens d'avoir vu passé ici qu'il était possible d'associer un
jeu limité de commandes à une paire de clé ssh. Mon idée est
d'utiliser une clé sans mot de passe qui n'autorise à exécuter que mon
script de sauvegarde par rsync.

Comme je ne retrouve pas l'info quelqu'un pourrait m'aider ?
  • # rssh

    Posté par (page perso) . Évalué à 1.

    Bonjour,

    Je te conseille de regarder du coté de rssh.

    Nicolas.
    • [^] # Re: rssh

      Posté par . Évalué à 1.

      Il y a aussi rrsync
  • # Match User + ForceCommand

    Posté par (page perso) . Évalué à 4.

    Tu peux utiliser les directives Match User pour avoir une configuration particulière selon un utilisateur et après utiliser la directive ForceCommand pour brider l'utilisation possible.
  • # authprogs

    Posté par . Évalué à 2.

    Bonjour,

    Il y a quelque temps j'avais trouvé authprogs, un script perl qui permet de limiter par utilisateur les commandes utilisables lors d'une connexion ssh.

    Le script et la documentation sont là : http://www.hackinglinuxexposed.com/tools/authprogs/src/authp(...)


    Guilhelm
  • # command=

    Posté par (page perso) . Évalué à 6.

    Dans le fichier authorized_keys, placer un command="" avant la clef. Cette commande sera executée automatiquement à la connexion, puis la connexion s'arrete une fois la commande terminée.

    On lit dans man sshd :

    "This option might be useful to restrict certain public keys to perform just a specific operation. An example might be a key that permits remote backups but nothing else. "

    ça me semble etre exactement ton cas !

    exemple :

    ---- authorized_keys ----
    command="ls" ssh-rsa AAAB3NzaC1yc2EAAAABIwAAAQEA7qpkG [...]
    • [^] # Re: command=

      Posté par (page perso) . Évalué à 1.

      Avec les refs données plus haut j'étais effectivement tombé la dessus ! Et c'est effectivement mon cas. D'autant plus que je n'ai pas les droit root sur les machines (petit script perso). Ce sera sans doute ma première implémentation même si je n'imaginais pas cette forme au départ. Merci en tout cas...
  • # clef shh a usage unique ( pour executer un nb restreint de commande )

    Posté par . Évalué à 2.

    Utilisation de clef à usage unique


    Sur la machine initiatrice de la communication, il faut générer une paire de clefs, dans
    le répertoire '.ssh' de l'utilisateur.


    cd ~/.ssh
    ssh-keygen -t dsa -f clef_perso

    Veillez à ne laisser que les droits 600 ( rw------- ) pour la clef privée.
    Sur la machine destination de la communication, il faut ajouter la clef publique ~/.ssh/clef_perso.pub obtenue
    précédement au fichier ~/.ssh/authorized_keys

    ou ~/.ssh/authorized_keys2 précédée de :
    command="/qqpart/.ssh/le_script_a_executer",no-port-forwarding,no-X11-forwarding,no-agent-forwarding
    ou
    from="une.addresse.ip.emettrice,une.autre.adresse.ip",command="/qqpart/.ssh/le_script_generique_de_validation_de_commande.sh"
    ou un mélange des deux


    Un script de validation de commande pour faire des rsync
    ou des scp peut prendre la forme :

    #!/bin/bash
    #
    case "$SSH_ORIGINAL_COMMAND" in
    *\&*)
    echo "Refuse"
    ;;
    *\(*)
    echo "Refuse"
    ;;
    *\{*)
    echo "Refuse"
    ;;
    *\;*)
    echo "Refuse"
    ;;
    *\<*)
    echo "Refuse"
    ;;
    *\`*)
    echo "Refuse"
    ;;
    rsync\ --server*)
    $SSH_ORIGINAL_COMMAND
    ;;
    scp\ -f\ /chemin/fichier_a_copier)
    $SSH_ORIGINAL_COMMAND
    ;;
    ls\ /usrtmp)
    $SSH_ORIGINAL_COMMAND
    ;;
    *)
    echo "Refuse"
    ;;
    esac


    Dans le script ci-dessus on a autorisé l'utilisation de rsync , la copie d'un fichier et une commande "ls" bidon.
    Les BackSlash servent à quotter les espaces.
    Le fichier authorized_keys aura les droits 600 (rw-------) , et le fichier de validation 700 (rwx------)


    Pour faire une commande ssh ou scp ou rsync utilisant ces clefs à usage unique il suffit d'utiliser l'option -i.

    ssh usager_distant@machine_distante -i /home_de_l_usager_local/.ssh/clef_perso commande_ou_script
    scp -i /home_de_l_usager_local/.ssh/clef_perso /chemin/fichier_local usager_distant@machine_distante:/chemin/.
    rsync -arv -e "ssh -i /home_de_l_usager_local/.ssh/clef_perso" /chemin/repertoire/source/local/ usager_distant@machine_distante:/repertoire/distant/

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.