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

Unix Discussion :

Ajouter un utilisateur dans un groupe sans se déloguer


Sujet :

Unix

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Ajouter un utilisateur dans un groupe sans se déloguer
    Bonjour,

    Je dispose d'une fonction qui permet d'ajouter l'utilisateur 'olivier' dans le groupe 'wsrc':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    check_usergroup() { 
    wgrp="wsrc"
    if ! id -Gn "$USER" | grep -q "$wgrp"; then
        while true; do
            echo -n "Add user $USER into $wgrp group? (y/n) [y] "
            read answer
            case $answer in
            ""|y|Y)
                   doas usermod -G $wgrp $USER/dev/null 2&1
                   doas su -l $USER
                   if [ $? -eq 0 ]; then
                       echo "›› User $USER added."
                   else
                       echo "›› Unable to add User $USER into '$wgrp' group!"
                   fi
                   return 1
                   ;;
              n|N)
                   echo "GoodBye!"
                   return 1
                   ;;
                *)
                  echo "$answer: is not allowed!"
                  ;;
            esac
        done
      fi
    }
    La difficulté que je rencontre est la suivante, la commande 'doas su -l $USER' crée automatiquement un sous-shell et je ne parviens pas à le quitter.

    Auriez-vous un exemple à me donner s'il vous plaît ?

    En vous remerciant par avance
    .Olivier

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 258
    Points : 13 510
    Points
    13 510
    Par défaut
    Bonjour

    Quel est l'objectif ?
    Qu'est-ce que "doas" ?
    sudo ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Bonjour

    L'objectif est le suivant:

    • Ajouter l'utilisateur 'olivier' au groupe 'wsrc' (C'est OK)
    • Utiliser la commande 'doas su -l $USER' afin que les modifications prennent effet instantanément sans besoin de se délogguer et de se relogguer (C'est OK)
    • Passer à la fonction suivante.


    PS: 'doas' est l'équivalent de 'sudo'

    Le soucis c'est que la commande 'su -l $USER' met bien à jour les informations mais ouvre un sous-shell que je voudrais bien pouvoir quitter afin de poursuivre le traitement avec la fonction suivante.
    .Olivier

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 258
    Points : 13 510
    Points
    13 510
    Par défaut
    Pardon de répondre à une question par des questions.
    En plus, on en est au même point. J'aurais dû être plus clair.

    la commande 'su -l $USER' (...) que je voudrais bien pouvoir quitter
    Mais il ne faut pas la lancer.
    Simplement.

    afin que les modifications prennent effet instantanément
    Elles prennent effet instantanément.
    Quels sont les symptômes qui t'indiquent le contraire ?

    la commande 'su -l $USER' met bien à jour les informations
    Lesquelles ?

    As-tu un bout de code dans ton .kshrc (ou .*shrc, etc) qui s'exécute en temps normal et qui ne s'exécute pas lors de l'ajout à un groupe (ce qui est normal) ?

    D'autre part, c'est bizarre, tu vérifies l'appartenance à un groupe d'une façon, puis tu ajoutes, puis tu vérifies l'appartenance à un groupe d'une autre façon. Pourquoi ne fais-tu pas, 2 fois, la même méthode ?

    D'ailleurs, attention à ton grep : si il y a un groupe "machin" et un groupe "machinchouette", appartenir au groupe "machin" dira qu'on appartient au groupe "machinchouette", ce qui est possiblement faux.
    Il faudrait ajouter des début-de-mot, fin-de-mot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id -Gn "$USER" | grep -q "\<$wgrp\>"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ id -Gn flodelarab |grep -q "o";echo $?
    0
    $ id -Gn flodelarab |grep -q "z";echo $?
    1
    $ id -Gn flodelarab |grep -q "\<o\>";echo $?
    1
    $ id -Gn flodelarab |grep -q "\<sudo\>";echo $?
    0
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Tout d'abord, merci pour tes informations

    Voici les deux fonctions utilisées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    check_usergroup() {  wgrp="wsrc"
     if ! id -Gn "$USER" | grep -q "$wgrp"; then
         while true; do
             echo -n "Add user $USER into $wgrp group? (y/n) [y] "
             read answer
             case $answer in
             ""|y|Y)
                    doas usermod -G $wgrp $USER/dev/null 2&1
                 if [ $? -eq 0 ]; then
                    echo "›› User $USER added."
                    echo "›› User logout required!"
                else
                    echo "›› Unable to add User $USER into '$wgrp' group!"
                    fi
                return 1
                ;;
            n|N)
                echo "GoodBye!"
                return 1
                ;;
              *)
                echo "$answer: is not allowed!"
                ;;
             esac
         done
     fi
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    get_base() {
     check_usergroup
     if [ $? -eq 0 ]; then
         bdir="/usr"
         while true; do
             echo -n "Get base system? (y/n) [y] "
             read answer
             case $answer in
             ""|y|Y)
                check_cvserver
                cd $bdir && cvs checkout -rOPENBSD_6_3 -P src
                if [ $? -eq 0 ]; then
                    echo "›› Base system fetched."
                else
                    echo "›› Unable to fetch base system!"
                fi
                return 0
                ;;
                n|N)
                    echo "GoodBye!"
                break
                ;;
                  *)
                echo "$answer: is not allowed!"
                ;;
             esac
         done
     fi
    }
    explications:

    Pour télécharger les fichiers sources d'OpenBSD via le fonction 'get_base', il faut que l'utilisateur 'olivier' soit dans le groupe 'wsrc' vérifié puis ajouté si nécessaire via la fonction 'check_usergroup'.

    La commande 'doas usermod -G $wgrp $USER › /dev/null 2›&1' ajoute bien l'utilisateur 'olivier' dans le groupe 'wsrc'. Cependant lors de l'exécution de la fonction 'get_base', cela génère une erreur car si j'éxecute la commande 'id -Gn olivier', j'obtiens ceci:
    Je ne suis pas définitivement dans le groupe 'wsrc'. Je dois me délogguer et me relogguer.
    En revanche, si j'utilise la commande 'doas su -l $USER', un sous-shell est utilisé mais la commande 'id -Gn olivier' me retourne bien "olivier wheel wsrc" mais pour fermer ce sous-shell, je dois utilisé la commande 'exit' afin de revenir au shell initial.

    L'objectif c'est de récupérer le PID du sous-shell et de le clôturer
    .Olivier

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 258
    Points : 13 510
    Points
    13 510
    Par défaut
    Si tu fais doas, j'imagine que c'est parce que tu es connecté en tant qu'olivier. N'est-ce pas ?
    C'est ça qui ne va pas. La modification d'un compte doit être faite avec le compte déloggué.

    L'objectif c'est de récupérer le PID du sous-shell et de le clôturer
    Surtout pas. Que c'est crasseux.

    As-tu essayé ceci ?
    ou
    Cette commande simule la connexion.

    D'autre part,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doas usermod -G $wgrp $USER/dev/null 2&1
    C'est un peu téméraire.
    Tu ne sais pas si ton script marche et tu bâillonnes déjà la sortie d'erreur.
    Je sais bien que créer des fichiers qui nécessiteront de la maintenance est casse-pieds, mais tu devrais rediriger les erreurs dans un fichier de log et pas la poubelle.
    Ton système pourrait te hurler que tu n'a pas le droit, que tu ne l'entendrais pas.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Coucou,

    Je vais rester sur le méthode traditionnelle (Je m'ajoute dans le groupe, je me déconnecte et je me reconnecte)

    J'ai vérifié et la commande 'doas' ne dispose pas comme 'sudo' de l'option '-i'.

    Merci pour tes remarques et suggestions
    .Olivier

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

Discussions similaires

  1. Quel est la syntaxe exact pour ajouter un utilisateurs dans plusieurs groupes
    Par pierrot10 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/02/2014, 13h32
  2. [Débutant] Ajout d'utilisateur dans un groupe Active directory en VB.Net
    Par vindkald dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/03/2013, 10h24
  3. Ajouter un utilisateur dans un groupe local
    Par xxhardevil dans le forum VB.NET
    Réponses: 0
    Dernier message: 01/09/2009, 09h06
  4. LDAP : Ajouté un utilisateur dans un group ?
    Par troxsa dans le forum VBScript
    Réponses: 3
    Dernier message: 16/06/2009, 17h08
  5. Réponses: 3
    Dernier message: 11/03/2009, 14h47

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