Beim Zuweisen einer sekundären Gruppenliste eines Benutzers mit:
# usermod -G <grouplist> <user>
Ist es möglich, diese Gruppenzuweisung zu erzwingen, ohne alle laufenden Sitzungen abzumelden?
Dies ist in Situationen sehr nützlich, in denen eine Screen- Sitzung mit vielen laufenden Shells vorhanden ist, da im Wesentlichen die gesamte Sitzung zerstört werden muss, damit die Gruppenzuweisung wirksam wird.
Ich glaube, ich kann die primäre Gruppe des Benutzers in einer laufenden Shell mit dem newgrp
Befehl ändern. Gibt es eine Alternative, die für sekundäre Gruppen funktionieren würde?
Idealerweise möchte ich, dass etwas in jeder Shell wirksam wird, ohne dass es manuell in jeder Shell ausgeführt wird. Andernfalls wird Screen möglicherweise gezwungen, in jeder Shell den gleichen Befehl auszuführen.
quelle
Antworten:
Schrecklich abgedreht, aber Sie könnten zwei Ebenen verwenden
newgrp
, um dies für eine bestimmte Gruppe zu erreichen:... gibt Ihnen die aktuelle primäre Gruppen-ID. Wir werden dies
orig_group
für die Zwecke dieses Beispiels nennen. Dann:... wechselt Sie zu dieser Gruppe als primäre und fügt sie der Liste der von
groups
oder zurückgegebenen Gruppen hinzuid -G
. Nun noch ein weiteres:... erhalten Sie eine Shell, in der Sie die neue Gruppe sehen können und die primäre die ursprüngliche ist.
Dies ist schrecklich und es wird immer nur eine Gruppe auf einmal hinzugefügt, aber es hat mir ein paar Mal geholfen, Gruppen hinzuzufügen, ohne mich / in meiner gesamten X-Sitzung abzumelden (z. B. um einem Benutzer eine Sicherung als Gruppe hinzuzufügen) damit sshfs funktioniert).
Bearbeiten: Hierfür müssen Sie auch kein Passwort eingeben
su
.quelle
newgrp $USER
stattnewgrp <orig_group>
. Das bedeutet, dass ich meine ursprüngliche primäre Gruppen-ID nicht finden musste. Dies ist sogar noch einfacher als diese Lösung.newgrp <new group name>
. Dies war Ubuntu 14.04newgrp
eine neue Shell erstellt. Wenn Sie Ihre Sitzung also vollständig beenden möchten, müssen Sie "exit exit exit" ausführen, um den vollständigen Ausgang zu erreichen (:In einer Shell können Sie den folgenden Befehl eingeben
id listet nun die neue Gruppe auf:
quelle
Dieser raffinierte Trick von diesem Link funktioniert großartig!
Ich dachte, ich würde es hier posten, da dies der erste Link ist, der in Google auftaucht, wenn ich vergesse, wie man das macht.
quelle
exec sudo su -l $USER
, um die Aufforderung zur Kennworteingabe zu vermeiden.NOPASSWD:
1. Eine Shell mit der neuen Gruppe erstellen, ohne sich aus- und wieder einzuloggen
Wenn Sie nur eine Gruppe hinzufügen, habe ich Folgendes verwendet:
Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber es befindet sich in einer Zeile und erfordert nicht, dass Sie Ihre primäre Gruppe manuell eingeben.
sg
ist newgrp, akzeptiert jedoch einen Befehl zur Ausführung mit der neuen Gruppen-ID. Diesexec
bedeutet, dass die neue Shell die vorhandene Shell ersetzt, sodass Sie sich nicht zweimal abmelden müssen.Im Gegensatz zur Verwendung von su müssen Sie Ihr Passwort nicht eingeben. Es aktualisiert auch nicht Ihre Umgebung (außer das Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. behalten.
2. Führen Sie den Befehl in allen Bildschirmfenstern einer Sitzung aus
Der
at
Befehl in Screen führt einen Befehl in den von Ihnen angegebenen Fenstern aus (beachten Sie, dass dies ein Screen-Befehl ist, kein Shell-Befehl).Mit dem folgenden Befehl können Sie den Befehl an alle vorhandenen Bildschirmsitzungen senden:
Beachten Sie, dass Sie die Backticks entziehen müssen, um
id
in der Screen-Sitzung ausgeführt zu werden, und das ^ M, um Screen zu veranlassen, am Ende Ihres Befehls die Eingabetaste zu drücken .Beachten Sie auch, dass der
stuff
Befehl des Bildschirms einfach den Befehlstext in Ihrem Namen eingibt. Daher kann etwas Seltsames passieren, wenn eines der Bildschirmfenster an einer Eingabeaufforderung einen halb geschriebenen Befehl enthält oder eine andere Anwendung als eine Shell ausführt (z. B. emacs, top). Wenn dies ein Problem ist, habe ich einige Ideen:Verwenden Sie Folgendes, um den Befehl in einem bestimmten Fenster (gekennzeichnet durch die Fensternummer) auszuführen:
quelle
Mit
newgrp
Befehl Problem für mich gelöst:Dieser Blog-Beitrag enthält ausführliche Erklärungen.
quelle
Gruppen werden normalerweise bei der Anmeldung aufgelistet. Ich kenne keine Möglichkeit, die erneute Aufzählung von Gruppen zu erzwingen, ohne sich abzumelden und wieder anzumelden.
Viele der hier abgegebenen Antworten scheinen eine Problemumgehung zu verwenden, die eine neue Shell mit einer neuen Umgebung aufruft (wie das erneute Anmelden). Die übergeordnete Shell und alle anderen ununterbrochen laufenden Programme erhalten die neue Gruppenmitgliedschaft im Allgemeinen erst dann, wenn sie von einer neuen Shell erneut aufgerufen werden, normalerweise nach einem sauberen Abmelden und Anmelden.
quelle
Du kannst das.
Fügen Sie so viele Gruppen hinzu, wie Sie möchten
usermod -G
. Führen Sie dann als Benutzer mit einer laufenden Sitzungnewgrp -
nur das Argument '-' aus.Dadurch wird die Gruppen-ID auf den Standardwert zurückgesetzt, es werden jedoch auch die sekundären Gruppen festgelegt. Sie können dies überprüfen, indem Sie in
groups
der aktuellen Sitzung vor und nach demusermod
und dem ausführennewgrp
.Dies muss von jeder offenen Sitzung ausgeführt werden - ich weiß nicht viel über Bildschirm. Wenn es jedoch möglich ist, alle offenen Sitzungen zu durchlaufen und auszuführen
newgrp
, sollten Sie gut sein. Sie müssen sich keine Sorgen machen, ob Sie die Gruppen oder die Gruppen-IDs kennen.Viel Glück für Sie.
quelle
newgrp -
startet einen neuen Shell-ProzessZusammenfassen:
Wenn Sie 'exec' verwenden, wird die vorhandene Shell durch die neue Shell ersetzt, die mit dem Befehl newgrp gestartet wurde. Wenn Sie also die neue Shell verlassen, werden Sie abgemeldet.
Das Finale
newgrp -
wird benötigt, um Ihre normale primäre Gruppe wiederherzustellen, sodass Dateien, die Sie später erstellen, diese als Gruppeneigentümer haben.Hinweis: Die Frage des ursprünglichen Posters lautete, wie neu hinzugefügte Gruppen in vorhandenen Prozessen sichtbar gemacht werden können. Die Befehle
gpasswd
und wirkenusermod
sich nicht auf vorhandene Prozesse aus. Neu hinzugefügte (oder gelöschte!) Gruppen erscheinen (verschwinden aus) Ihrem Konto, dh in den Dateien / etc / group und / etc / gshadow, aber die Berechtigungen für vorhandene Prozesse werden nicht geändert. Um Berechtigungen zu entfernen , müssen Sie alle laufenden Prozesse beenden.newgrp -
liest / etc / group nicht erneut und setzt die Gruppenliste zurück; Stattdessen werden scheinbar nur die zuvor mit dem Prozess verknüpften Gruppen verwendet.quelle
exec su - <username>
kann verwendet werden, um eine neue Anmeldeshell mit festgelegten Gruppen zu erhalten, aber das funktioniert in Skripten nicht, da eine neue Shell Befehle vom Terminal liest. Sie könnensu -c "command ..." <myusername>
Ihr Skript auch neu starten, der resultierende Prozess hat jedoch kein steuerndes Terminal. Daher tritt ein Fehler auf, wenn ein Bildschirmeditor oder ein anderer interaktiver Befehl ausgeführt wird.newgrp -
ersetzt nicht die "primäre Gruppe". Patrick Conheadys Antwort ist hier die beste, da sie die primäre Gruppe weder gabelt noch verändert.Ich hatte ähnliches Problem aber auch für nicht angemeldete Benutzer. Neustart von nscd nicht helfen, aber die Ausführung des Befehls tat
nscd -i group
. Das sollte nscd (Caching Daemon) anweisen, die Gruppendatei neu zu laden.quelle
Ich konnte den Befehl newgrp nicht zum Laufen bringen. Ich bin nicht sicher, ob dies von / etc / sudoers abhängt, aber ich muss normalerweise mein Passwort für sudo eingeben, und das hat funktioniert, ohne dass mein Passwort erforderlich ist:
quelle
Dies ist der Trick, den Sie haben,
sudo
und erspart Ihnen in einigen Fällen die erneute Eingabe Ihres Passworts:quelle