565 votes

Recharger les affectations de groupe d'un utilisateur Linux sans se déconnecter

Lors de l'affectation de la liste de groupes secondaires d'un utilisateur en utilisant :

# usermod -G <grouplist> <user>

est-il possible de forcer cette affectation de groupe à prendre effet sans déconnecter toutes les sessions en cours ?

Cela serait très utile dans la situation où une Écran existe avec de nombreux shells en cours d'exécution, car la session entière doit être détruite pour que l'affectation de groupe prenne effet.

Je pense que je peux changer le groupe primaire de l'utilisateur dans un Shell en cours d'exécution en utilisant la commande newgrp commande - existe-t-il une alternative qui fonctionnerait pour les groupes secondaires ?

Idéalement, je voudrais quelque chose qui prenne effet dans chaque Shell sans être exécuté manuellement dans chacun d'eux, mais à défaut, peut-être un moyen de forcer Screen à exécuter la même commande dans chacun.

0 votes

Je sais qu'au moins pour certains gestionnaires de fenêtres/sessions, il est possible de le faire de telle sorte que la session récupère le nouveau groupe et qu'il soit disponible pour tout nouveau processus lancé à partir des menus, des boutons du panneau ou autre. Je viens juste de venir ici pour retrouver cette information, donc je ne peux pas dire maintenant comment faire, et c'est probablement spécifique au gestionnaire de fenêtres.

21voto

Carsten S Points 612

Les groupes sont généralement énumérés à la connexion, il n'y a aucun moyen que je connaisse pour le forcer à refaire l'énumération des groupes sans se déconnecter et se reconnecter à nouveau.

Beaucoup de réponses votées ici semblent utiliser une solution de contournement qui invoque un nouveau Shell avec un environnement frais (même que se reconnecter). le Shell parent et tous les autres programmes en cours d'exécution continue ne recevront généralement pas la nouvelle appartenance au groupe jusqu'à ce qu'ils soient ré-invoqués à partir d'un Shell frais, généralement après une déconnexion et une connexion propres.

0 votes

Honnêtement, je suis presque sûr que ce n'est pas vrai - j'avais trouvé un moyen de le faire avant sur une boîte Linux. Cependant, je n'arrive pas à me rappeler quelle était la commande. Si je la trouve, je la posterai. Edit : Je viens de la trouver, je la poste comme réponse.

3 votes

Merci de le signaler, c'est aussi ce que j'ai compris. Toutes les autres réponses ici ouvrent simplement une nouvelle Shell, peu importe si elle remplace une Shell ouverte ou redémarre l'écran ou autre. Il n'y a pas de panacée magique pour émettre une commande ou un Shell et que chaque session en cours d'exécution, y compris votre session X, reflète les nouvelles appartenances de groupe.

13voto

lunchmeat317 Points 570

Vous pouvez le faire.

Ajoutez autant de groupes que vous le souhaitez en utilisant usermod -G . Ensuite, en tant qu'utilisateur avec une session en cours, exécutez newgrp - avec seulement l'argument '-'.

Cela réinitialise l'identifiant du groupe à la valeur par défaut, mais cela définit également les groupes secondaires. Vous pouvez le vérifier en exécutant groups de la session en cours, avant et après la usermod y el newgrp .

Cela doit être exécuté à partir de chaque session ouverte - je ne connais pas bien l'écran. Cependant, s'il est possible d'itérer sur toutes les sessions ouvertes et d'exécuter la fonction newgrp vous devriez être bien. Vous n'aurez pas à vous soucier de connaître les groupes ou les identifiants de groupe.

Bonne chance à vous.

14 votes

J'ai essayé sur un xterm dans une session X mais cela n'a pas fonctionné.

4 votes

J'ai essayé sur une session dans tmux et ça n'a pas marché non plus

3 votes

J'ai essayé sur Amazon linux 2, ça n'a pas marché.

5voto

retnikt Points 179

Si vous avez besoin de préserver vos variables d'environnement, essayez de exec sudo -E -u "$USER" "$SHELL" . exec remplace le Shell actuel par le nouveau, -E préserve l'environnement, -u "$USER" change l'utilisateur en vous-même, et $SHELL spécifie que le Shell est la commande à utiliser.

5voto

nyanpasu64 Points 271

Pour relancer le terminal tout en gardant les applications GUI en fonctionnement, essayez de exec su -p $USER . Cela préserve les variables d'environnement (y compris celles d'Xorg) mais recharge les groupes.

Vous pouvez également supprimer exec pour générer un sous-shell au lieu de remplacer le Shell actuel.

0 votes

Intéressant ! c'est l'une des rares ou la seule session, qui ne génère pas une nouvelle session.

4voto

jimav Points 51

Pour résumer :

exec newgrp <newlyaddedgroupname1>
exec newgrp <newlyaddedgroupname2>
...
exec newgrp -

Utiliser 'exec' signifie remplacer le Shell existant par le nouveau Shell démarré par la commande newgrp (donc sortir du nouveau Shell vous déconnecte).

La finale newgrp - est nécessaire pour restaurer votre groupe primaire normal, ainsi les fichiers que vous créerez plus tard auront ce groupe comme propriétaire.

Note : La question du posteur initial était de savoir comment rendre les groupes nouvellement ajoutés visibles dans les processus existants. Le site gpasswd y usermod n'affectent pas les processus existants ; les groupes nouvellement ajoutés (ou supprimés !) apparaissent (disparaissent) dans votre compte, c'est-à-dire dans les fichiers /etc/group et /etc/gshadow, mais les permissions des processus existants ne sont pas modifiées. Pour supprimer les permissions, vous devez tuer tous les processus en cours ; newgrp - ne relit pas /etc/group et ne réinitialise pas la liste des groupes ; au lieu de cela, il semble simplement utiliser les groupes précédemment associés au processus.

0 votes

Au fait, exec su - <username> peut être utilisé pour obtenir un nouveau login Shell avec les groupes définis, mais cela ne fonctionnera pas dans Shell car un nouveau Shell lira les commandes depuis le terminal. Vous pourriez utiliser su -c "command ..." <myusername> pour redémarrer votre script, mais le processus résultant n'a pas de terminal de contrôle et donc une erreur se produira si un éditeur d'écran ou une autre commande interactive est tentée.

0 votes

Pourquoi cela a-t-il été rétrogradé ? Quelqu'un peut-il expliquer ce qu'il y a de mal à cela, car c'est ce qui m'est venu à l'esprit et je pense que c'est ce que je préfère ?

0 votes

Gah, je l'ai voté avant de le tester. newgrp - fait no remplacer le "groupe primaire". La réponse de Patrick Conheady est la meilleure ici, car elle ne bifurque ni ne modifie le groupe primaire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X