IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Changement d'utilisateur sans saisie du password


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut Changement d'utilisateur sans saisie du password
    Bonjour à tous !

    Voila, je ne suis pas très fort en commande linux et google n'a pas vraiment été mon ami sur ce coup là !

    J'essais de créer un script.sh qui à pour but d'automatiser un ensemble d'instructions.
    Je bloque à une étape, je veux : depuis l'utilisateur "userAAA" lancer un script python appartenant à "userBBB".
    J'arrive très bien à récupérer l'info qui m’intéresse de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a=$(su - userBBB -c nombreRecords.py | awk 'NR==6{print $3}')
    le seul soucis c'est qu'il faut que je saisisse le password de "userBBB"... et cela ne correspond pas du tout à mon contexte d'automatisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Password:
    test_bench:userAAA> echo $a
    13
    N'y a t-il pas de moyen de fournir le password en paramètre (une option de sudo, su, ssh...) ?
    ou bien dans mon script.sh de faire en sorte qu'il tape le password à ma place ?

    Je précise que dans ce contexte, l'utilisateur "userAAA" connais le password de "userBBB". Le seul hic réside dans le fait de devoir le taper manuellement.
    Je précise également travailler sous redHat.

    Dernière précision, je ne souhaite pas modifier les droits de "userAAA", je suis plutôt à la recherche d'une commande linux me permettant d'exécuter le fichier.py de "userBBB" simplement, sans modification de droits, installations etc...
    Toutes les solutions que j'ai trouvé sur internet n'ont pas été très utiles dans mon contexte.


    Merci infiniment à ceux qui pourront m'aider !!

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Bonjour,

    si tu as les droits administrateur, modifie /etc/sudoers (cf. man sudoers)pour que l'utilisateur A ait les droits sur le script de l'utilisateur B, sans demande du mot de passe.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Merci de ta réponse.

    Oui effectivement j'avais entendu parlé de cette solution, mais n’existe t-il pas d'autre moyens ?
    car si possible j'aimerais que si je déploie mon script sur un autre banc de test, aucunes manip ne soient nécessaire mis à part lancer mon script.

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur Systèmes et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur Systèmes et Réseaux

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Je t'invite à regarder ce lien : http://www.developpez.net/forums/d91...mande-su-bash/

    N'oublie pas que mettre un mot de passe root ou autre dans un script n'est pas du tout sécuritaire.


    si tu as les droits administrateur, modifie /etc/sudoers (cf. man sudoers)pour que l'utilisateur A ait les droits sur le script de l'utilisateur B, sans demande du mot de passe.
    N_BaH a la meilleur solution concernant ton problème.

    Je sais qu'il y a possibilité de passer des mdp dans un passwd par exemple :

    passwd "$userBBB" <<EOF
    $TONMDP
    $TONMDP
    EOF

    Mais pour "su" je ne connais pas d'autre solution que celle proposée par N_BaH.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    si tu as les droits administrateur, modifie /etc/sudoers (cf. man sudoers)pour que l'utilisateur A ait les droits sur le script de l'utilisateur B, sans demande du mot de passe.
    Vu que c'est la solution que vous me recommandez je vais essayer de la mettre en place.
    Petite question : une fois que j'aurais réussi a attribué les droits de "userA" sur le fichier de "userB", pour exécuter le script il ne sera plus nécessaire de passer par la commande : su -l matcher -c MchCountEB.py ? si j'ai aussi les droit sur ce fichier je pourrais le lancer directement en temps que "userA" ?

  6. #6
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Salut joks93440,


    Il y a effectivement une autre alternative qu'est l'utilisation des flag Unix du SGF et précisément le Setuid, cependant cette technique ne pouvant être appliqué à des
    scripts pour une raison évidente de sécurité, on peut passer par un Wrapper en C qui lui sera executer par l'OS sous les droits de l'userBBB dans ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
     
    int main()
    {
       system( "/bin/python /path/to/tonscript.py" );
       return 0;
    }
    Tu compile se code, puis tu lui affecte les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chown userBBB wrapper
    chown 4770  wrapper   # Mise en  place du Suid
    et enfin pour pouvoir executer "tonscript.py" sous les droits de l'userBBB il suffit d'invoquer "wrapper"


    Bonne journée

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Merci pour ton message, effectivement ca pourrait être pas mal !

    Alors je compile le code sous USER A et ensuite je change les droit pour autoriser l'user B c'est bien ca ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Désolé pour le flood...
    Mais j'ai essayé et malheureusement cela soulève d'autres problèmes... car effectivement je peux désormais lancer le script python depuis l'user A, mais celui-ci fait appel à tout un tat d'autres scripts et d’accès à des BDD que seul l'user B peut utiliser... donc le wrapper tombe à l'eau.

    Au travail on m'a parlé d'une clée ssh mais ca ne me parle pas du tout, quelqu'un voit de quoi il s'agit ?

  9. #9
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    J'ai pas trés bien saisi le probléme si le script Python (l'interpreteur Python en fait) s'execute maintenant avec les droits de l'utilisateur voulu,
    quel est le probléme ?
    Ce qui t'intéresse est la récupération des données en provenance de se script uniquement non ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Ethan 0x21 Voir le message
    J'ai pas trés bien saisi le probléme si le script Python (l'interpreteur Python en fait) s'execute maintenant avec les droits de l'utilisateur voulu,
    quel est le probléme ?
    Ce qui t'intéresse est la récupération des données en provenance de se script uniquement non ?
    oui le script.py s’exécute mais je me retrouve avec des erreurs de ce types :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "/path/to/script.py", line 680, in <module>
        import MchSqlplus
    ImportError: No module named MchSqlplus

  11. #11
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    En effet le Suid change simplement l'UID rattaché au processus mais ne définis pas l'environement de base (un shell complet),
    il existe une commande disponible parfois par defaut (je ne sais pas sous RedHat étant un inconditionnel de Debian) qui permet d'automatiser des saisies texte en fonction de la sortie écran.

    Ce programme s'appel "expect" est fonctionne de la maniére suivante dans ton cas par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/usr/bin/expect
    spawn su userBBB-
    expect "Mot de passe :"
    send "password\n"
    expect "userBBB@"
    send "<Ta commande de recuperation d'information dans le contexte de UserBBB>"
    Cela te permettra d'executer le script python sous l'UID de UserBBB ET dans son environement complet avec toutes les dépendances vis à vis des librairies

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Oui c'est exactement pour ce genre de commande que j'ai décidé d’interroger developpez.net !
    malheureusement ça n'a pas l'aire de fonctionner

    j'ai testé ce script : test2.sh (en utilisateur userA) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    su - userB
    expect "Password:" #j'ai copié/collé exactement ce qu'affiche la commande précédente
    send "monPassword\n"
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test_bench:userA> ./test2.sh
    Password: #ici le script bloque tant que je n'ai aps saisi de password
    une fois que j'ai saisi un password (erroné) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    su: incorrect password
    couldn't read file "Password:": no such file or directory
    ./test2.sh: line 3: send: command not found
    ps : si je saisi manuellement le bon password et bien je bascule simplement en temps qu'userB, et lorsque je reviens en userA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    couldn't read file "Password:": no such file or directory
    ./test2.sh: line 3: send: command not found #pourtant redHat connais bien cette commande car il m'affiche des truc si je fait un 'man send'
    penses-tu comprendre le problème ? Ça serait vraiment cool car cela répondrait EXACTEMENT à ce que j’essaye de faire, c'est à dire un script qui ne nécessite aucune modifications sur l'environnement, et sans wrapper qui plus est !

  13. #13
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Quel est le Shebang de test2.sh ? cette erreur vient d'un mauvais shebang, il faut que ce soit "expect" et non "bash" spécifié (cf mon précédent extrait de code) pour définir le moteur d'execution du script comme étant expect et non bash, de même vérifie sur ta RedHat l'emplacement du binaire "expect" ( locate expect ) car je ne sait pas si sous ce dernier s'il est au même emplacement que Debian (/usr/bin/expect).

    La commande send dont le man te renvois une infos est en fait une fonction de programmation documenté dans man pour la librairie sockets en C, "send" est une commande interne à expect elle n'existe donc pas dans bash.

  14. #14
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/expect -f
     
    spawn su - userBBB
    expect "assword:"
    send -- "passwordBBB\r"
    expect ""
    send -- "nombreRecords.py\r"
    send -- "exit\r"
    expect eof
    ɹǝsn *sıɹɐlos*

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/expect -f
     
    spawn su - userBBB
    expect "assword:"
    send -- "passwordBBB\r"
    expect ""
    send -- "nombreRecords.py\r"
    send -- "exit\r"
    expect eof

    CELA FONCTIONNE PARFAITEMENT !!!!

    Merci a tous ceux qui m'ont aidé, particulièrement merci a Ethan 0x21 pour l"idée et a jlliagre pour son code opérationnel !

    J'ai bien fait de faire appel au forum ^^

    j'vais pouvoir partir plus tôt du boulot aujourd'hui :p Bon noel a tous !!!



    Dernière petite question toute rikikikiki : y a t-il un moyen de récupérer le resultat dans une variable de l'user A comme je le faisait avant ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbrRefBase=$(su - userB -c monScript.py | awk 'NR==6{print $3}')
    Sinon j'ai trouvé une manière mais elle n'est pas terrible... je redirige la sortie dans un fichier texte : ./test2.sh >test.txt et d'ensuite utiliser awk dessu ^^.

    pas moyen de faire quelque chose qui ressemble à ca : a=$(./test2.sh | awk 'NR==6{print $3}') ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/02/2008, 21h05
  2. Un script pour changer le password d'un utilisateur sans droit root.
    Par black.myst dans le forum Administration système
    Réponses: 2
    Dernier message: 03/02/2007, 16h30
  3. [html] zone de texte sans saisie possible
    Par Silvia12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 01/08/2005, 17h37
  4. Réponses: 7
    Dernier message: 23/07/2005, 13h50
  5. [PostgresSQL]Pb accés des utilisateurs sans mot de passe
    Par woodwai dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/05/2003, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo