Lors de l'affectation de la liste de groupes secondaires d'un utilisateur à l'aide de:
# usermod -G <grouplist> <user>
Est-il possible de forcer cette affectation de groupe à prendre effet sans se déconnecter de toutes les sessions en cours d'exécution?
Cela serait très utile dans le cas où une session Screen existe avec plusieurs shells en cours d'exécution, car la session entière doit essentiellement être détruite pour que l'attribution de groupe prenne effet.
Je pense que je peux changer le groupe principal de l'utilisateur dans un shell en cours d'exécution à l'aide de la newgrp
commande - existe-t-il une alternative qui fonctionnerait pour les groupes secondaires?
Idéalement, je voudrais quelque chose qui prend effet dans chaque shell sans être exécuté manuellement dans chaque, mais sans cela, peut-être une façon de forcer Screen à exécuter la même commande dans chaque.
Réponses:
Horriblement hacky, mais vous pouvez utiliser deux couches
newgrp
pour y parvenir pour un groupe particulier:... vous donnera l'ID du groupe principal actuel. Nous appellerons cela
orig_group
aux fins de cet exemple. Ensuite:... vous basculera vers ce groupe en tant que principal et l'ajoutera à la liste des groupes renvoyés par
groups
ouid -G
. Maintenant, un autre:... vous obtiendrez un shell dans lequel vous pouvez voir le nouveau groupe et le principal est l’original.
C’est horrible et ne vous ajoutera qu’un groupe à la fois, mais cela m’a aidé plusieurs fois à obtenir l’ajout de groupes sans fermeture de session / dans toute ma session X (par exemple, l’ajout d’un fusible en tant que groupe à un utilisateur). de sorte que sshfs fonctionnera).
Edit: Cela ne vous oblige pas à taper votre mot de passe non plus, ce qui
su
sera.la source
newgrp $USER
au lieu denewgrp <orig_group>
. Cela signifie que je n'avais pas à trouver mon ID de groupe principal d'origine, c'est donc encore plus simple que cette solution.newgrp <new group name>
. C'était Ubuntu 14.04newgrp
crée un nouveau shell, donc lorsque vous devez quitter complètement votre session, vous devez faire "exit exit exit" pour sortir complètement (:A partir d'un shell, vous pouvez lancer la commande suivante
id va maintenant lister le nouveau groupe:
la source
Cette astuce de ce lien fonctionne très bien!
Je me suis dit que je le posterais ici car chaque fois que j'oublie comment faire cela, c'est le premier lien qui apparaît dans Google.
la source
exec sudo su -l $USER
pour éviter d’être invité à entrer un mot de passe.NOPASSWD:
1. Obtenir un shell avec le nouveau groupe sans vous déconnecter et vous reconnecter
Si vous ajoutez seulement un groupe, j'ai utilisé ce qui suit:
Il s'agit d'une variante de l'astuce newgrp à deux couches de Legooolas, mais elle est sur une seule ligne et ne vous oblige pas à entrer manuellement votre groupe principal.
sg
est newgrp mais accepte une commande à exécuter avec le nouvel ID de groupe. Lesexec
moyens que la nouvelle coquille remplace la coque existante, de sorte que vous ne avez pas besoin de « déconnecter » deux fois.Contrairement à l'utilisation de su, vous n'avez pas besoin de saisir votre mot de passe. De plus, cela n’actualise pas votre environnement (autre que l’ajout du groupe), vous conservez donc votre répertoire de travail actuel, etc.
2. Exécution de la commande dans toutes les fenêtres d'écran d'une session
La
at
commande dans Screen exécute une commande dans toutes les fenêtres que vous spécifiez (notez qu'il s'agit d'une commande Screen, pas d'une commande shell).Vous pouvez utiliser la commande suivante pour envoyer la commande à toutes les sessions Screen existantes:
Notez la nécessité d'échapper aux jeux de hasard pour pouvoir
id
s'exécuter dans la session Screen et au ^ M pour que Screen frappe à «entrée» à la fin de votre commande.Notez également que la
stuff
commande de screen tape simplement le texte de la commande en votre nom. Par conséquent, quelque chose d'étrange peut se produire si l'une des fenêtres de l'écran a une commande à moitié écrite à l'invite de commande ou si elle exécute une application autre qu'un shell (par exemple, emacs, en haut). Si c'est un problème, j'ai quelques idées:Pour exécuter la commande dans une fenêtre spécifique (identifiée par le numéro de la fenêtre), utilisez les éléments suivants:
la source
L'utilisation de la
newgrp
commande a résolu le problème pour moi:Ce blog a une explication détaillée.
la source
Les groupes sont généralement énumérés lors de la connexion. À ma connaissance, il n’ya aucun moyen de le forcer à refaire l’énumération des groupes sans se déconnecter et y revenir.
Beaucoup de réponses votées ici semblent utiliser une solution de contournement qui invoque un nouveau shell avec un nouvel environnement (identique à la connexion à nouveau). Le shell parent et tous les autres programmes en cours d'exécution ne recevront généralement pas la nouvelle appartenance au groupe tant qu'ils n'auront pas été ré-invoqués à partir d'un nouveau shell, généralement après la déconnexion et la connexion.
la source
Tu peux le faire.
Ajoutez autant de groupes que vous voulez en utilisant
usermod -G
. Puis, comme l'utilisateur avec une session en cours d' exécution, exécuteznewgrp -
avec juste l'argument - « ».Cela réinitialise l'ID de groupe à la valeur par défaut, mais cela définira également les groupes secondaires. Vous pouvez le vérifier en exécutant à
groups
partir de la session en cours, avant et après leusermod
et lenewgrp
.Cela doit être exécuté à partir de chaque session ouverte - je ne connais pas grand chose à l'écran. Cependant, s'il est possible de parcourir toutes les sessions ouvertes et de l'exécuter
newgrp
, vous devriez être bon. Vous n'aurez pas à vous soucier de connaître les groupes ou les identifiants de groupe.Bonne chance à vous.
la source
newgrp -
lance un nouveau processus shellRésumer:
Utiliser 'exec' signifie remplacer le shell existant par le nouveau shell démarré par la commande newgrp (vous devez donc quitter le nouveau shell pour vous déconnecter).
La version finale
newgrp -
est nécessaire pour restaurer votre groupe principal normal. Par conséquent, les fichiers que vous créez ultérieurement ont pour propriétaire.Remarque: la question de l'affiche originale était de savoir comment rendre visibles les groupes nouvellement ajoutés dans les processus existants. Les commandes
gpasswd
etusermod
n'affectent pas les processus existants; les groupes nouvellement ajoutés (ou supprimés!) apparaissent dans (disparaissent) de votre compte, c'est-à-dire dans les fichiers / etc / group et / etc / gshadow, mais les autorisations pour les processus existants ne sont pas modifiées. Pour supprimer des autorisations, vous devez tuer tous les processus en cours d'exécution.newgrp -
ne relira pas / etc / group et ne réinitialisera pas la liste des groupes; au lieu de cela, il semble simplement utiliser les groupes précédemment associés au processus.la source
exec su - <username>
peut être utilisé pour obtenir un nouveau shell de connexion avec des groupes définis, mais cela ne fonctionnera pas dans les scripts, car un nouveau shell lira les commandes du terminal. Vous pouvez utilisersu -c "command ..." <myusername>
pour redémarrer votre script, mais le processus résultant n'a pas de terminal de contrôle et une erreur se produira si un éditeur d'écran ou une autre commande interactive est tenté.newgrp -
ne remplace pas le "groupe principal". La réponse de Patrick Conheady est la meilleure, car elle ne modifie ni ne modifie le groupe principal.J'ai eu le même problème, mais aussi pour les utilisateurs non connectés. Reprise de nscd n'a pas aidé, mais l' exécution de cette commande fait:
nscd -i group
. Cela devrait indiquer à nscd (démon de mise en cache) de recharger le fichier de groupes.la source
Je ne pouvais pas faire fonctionner la commande newgrp. Je ne sais pas si cela dépend de / etc / sudoers, mais je dois normalement taper mon mot de passe pour sudo, et cela a fonctionné sans avoir besoin de mon mot de passe:
la source
Si vous en possédez une
sudo
, cela vous évitera de saisir votre mot de passe dans certains cas:la source