2011-04-17 19:50:06 +0000 2011-04-17 19:50:06 +0000
377
377

Gruppenzuweisungen eines Linux-Benutzers neu laden, ohne sich abzumelden

Wenn Sie die sekundäre Gruppenliste eines Benutzers mit Hilfe von:

# usermod -G <grouplist> <user>

zuweisen, können Sie erzwingen, dass diese Gruppenzuweisung wirksam wird, ohne alle laufenden Sitzungen abzumelden?

Dies wäre sehr nützlich in der Situation, in der eine Screen -Sitzung mit vielen laufenden Shells existiert, da die gesamte Sitzung im Wesentlichen 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 Befehl newgrp ändern - gibt es eine Alternative, die auch für sekundäre Gruppen funktioniert?

Idealerweise würde ich mir etwas wünschen, das in jeder Shell wirksam wird, ohne in jeder manuell ausgeführt zu werden, aber wenn das nicht möglich ist, dann vielleicht eine Möglichkeit, Screen zu zwingen, in jeder den gleichen Befehl auszuführen.

Antworten (12)

400
400
400
2011-11-06 15:28:07 +0000

Von innerhalb einer Shell können Sie den folgenden Befehl eingeben:

su - $USER

id listet nun die neue Gruppe auf:

id
221
221
221
2011-10-10 17:36:48 +0000

Schrecklich hackig, aber Sie könnten zwei Schichten von newgrp verwenden, um dies für eine bestimmte Gruppe zu erreichen:

id -g

…gibt Ihnen die aktuelle Primärgruppen-ID. Wir nennen dies orig_group für die Zwecke dieses Beispiels. Dann:

newgrp <new group name>

…werden Sie zu dieser Gruppe als Primärgruppe wechseln und sie der Liste der von groups oder id -G zurückgegebenen Gruppen hinzufügen. Nun, ein weiteres:

newgrp <orig_group>

…bringt Ihnen eine Shell, in der Sie die neue Gruppe sehen können und die Primärgruppe die ursprüngliche ist.

Dies ist schrecklich und bringt Ihnen immer nur eine Gruppe auf einmal hinzu, aber es hat mir ein paar Mal geholfen, Gruppen hinzuzufügen, ohne mich in meiner gesamten X-Sitzung abzumelden (e.

Bearbeiten : Dazu müssen Sie auch nicht Ihr Passwort eingeben, was su tun wird.

168
168
168
2013-06-18 16:27:30 +0000

Dieser raffinierte Trick von this link funktioniert großartig!

exec su -l $USER

Ich dachte mir, ich veröffentliche ihn hier, denn jedes Mal, wenn ich vergesse, wie man das macht, ist dies der erste Link, der bei Google auftaucht.

35
35
35
2014-12-17 21:33:21 +0000

1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet:

exec sg <new group name> newgrp `id -gn`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

sg ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. exec bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal “abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl at in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp ### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen 

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet: 

exec sg newgrp id -gn “`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

id ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. stuff bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal "abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl &007 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

id -gn### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet:

exec sg <new group name> newgrp `id -gn`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal “abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

^M" “`

Beachten Sie, dass Sie die Backticks umgehen müssen, damit &007 in der Screen-Sitzung ausgeführt wird, und das ^M, damit Screen am Ende Ihres Befehls auf ‘Enter’ drückt.

Beachten Sie auch, dass der Befehl [ &007 ]&003 in Screen einfach den Befehlstext in Ihrem Namen eingibt. Daher kann etwas Seltsames passieren, wenn eines der Bildschirmfenster einen halb geschriebenen Befehl an einer Eingabeaufforderung hat oder eine andere Anwendung als eine Shell (z.B. emacs, oben) läuft. Falls dies ein Problem ist, habe ich einige Ideen:

  • Um jeden halbgeschriebenen Befehl loszuwerden, können Sie ”^C" an den Anfang des Befehls setzen.
  • Um zu vermeiden, daß der Befehl in einem Emacs-Fenster usw. ausgeführt wird, könnten Sie `at’ bitten, nach Fenstertitel usw. zu filtern (im obigen Beispiel benutze ich “#”, was auf alle Fenster zutrifft, aber Sie können nach Fenstertitel, Benutzer usw. filtern).

Um den Befehl in einem bestimmten Fenster (identifiziert durch die Fensternummer) auszuführen, benutzen Sie folgendes:

screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp ### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen 

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet: 

exec sg newgrp id -gn “`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal "abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp ### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen 

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet: 

exec sg newgrp id -gn “`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal "abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

id -gn### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet:

exec sg <new group name> newgrp `id -gn`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal “abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

^M" “`

Beachten Sie, dass Sie die Backticks umgehen müssen, damit &007 in der Screen-Sitzung ausgeführt wird, und das ^M, damit Screen am Ende Ihres Befehls auf ‘Enter’ drückt.

Beachten Sie auch, dass der Befehl [ &007 ]&003 in Screen einfach den Befehlstext in Ihrem Namen eingibt. Daher kann etwas Seltsames passieren, wenn eines der Bildschirmfenster einen halb geschriebenen Befehl an einer Eingabeaufforderung hat oder eine andere Anwendung als eine Shell (z.B. emacs, oben) läuft. Falls dies ein Problem ist, habe ich einige Ideen:

  • Um jeden halbgeschriebenen Befehl loszuwerden, können Sie ”^C" an den Anfang des Befehls setzen.
  • Um zu vermeiden, daß der Befehl in einem Emacs-Fenster usw. ausgeführt wird, könnten Sie `at’ bitten, nach Fenstertitel usw. zu filtern (im obigen Beispiel benutze ich “#”, was auf alle Fenster zutrifft, aber Sie können nach Fenstertitel, Benutzer usw. filtern).

Um den Befehl in einem bestimmten Fenster (identifiziert durch die Fensternummer) auszuführen, benutzen Sie folgendes:

id -gn### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet:

exec sg <new group name> newgrp `id -gn`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal “abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp ### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen 

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet: 

exec sg newgrp id -gn “`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal "abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

id -gn### 1. Eine Shell mit der neuen Gruppe erhalten, ohne sich aus- und wieder einzuloggen

Wenn Sie nur eine Gruppe hinzufügen, habe ich folgendes verwendet:

exec sg <new group name> newgrp `id -gn`

Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber er ist in einer Zeile und erfordert nicht, daß Sie Ihre Primärgruppe manuell eingeben müssen.

&007 ist newgrp, akzeptiert aber einen Befehl, der mit der neuen Gruppen-ID ausgeführt wird. &007 bedeutet, dass die neue Shell die bestehende Shell ersetzt, so dass Sie sich nicht zweimal “abmelden” müssen.

Anders als bei su brauchen Sie Ihr Passwort nicht einzugeben. Es aktualisiert auch nicht Ihre Umgebung (abgesehen vom Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. beibehalten.

2. Ausführen des Befehls in allen Screen-Fenstern in einer Sitzung

Der Befehl [ &007 ]&003 in Screen führt einen Befehl in allen von Ihnen angegebenen Fenstern aus (beachten Sie, dass es sich hierbei um einen Screen-Befehl und nicht um einen Shell-Befehl handelt).

Sie können den folgenden Befehl verwenden, um den Befehl an alle vorhandenen Screen-Sitzungen zu senden:

^M" “`

Beachten Sie, dass Sie die Backticks umgehen müssen, damit &007 in der Screen-Sitzung ausgeführt wird, und das ^M, damit Screen am Ende Ihres Befehls auf ‘Enter’ drückt.

Beachten Sie auch, dass der Befehl [ &007 ]&003 in Screen einfach den Befehlstext in Ihrem Namen eingibt. Daher kann etwas Seltsames passieren, wenn eines der Bildschirmfenster einen halb geschriebenen Befehl an einer Eingabeaufforderung hat oder eine andere Anwendung als eine Shell (z.B. emacs, oben) läuft. Falls dies ein Problem ist, habe ich einige Ideen:

  • Um jeden halbgeschriebenen Befehl loszuwerden, können Sie ”^C" an den Anfang des Befehls setzen.
  • Um zu vermeiden, daß der Befehl in einem Emacs-Fenster usw. ausgeführt wird, könnten Sie `at’ bitten, nach Fenstertitel usw. zu filtern (im obigen Beispiel benutze ich “#”, was auf alle Fenster zutrifft, aber Sie können nach Fenstertitel, Benutzer usw. filtern).

Um den Befehl in einem bestimmten Fenster (identifiziert durch die Fensternummer) auszuführen, benutzen Sie folgendes:

^M" “`

18
18
18
2016-10-07 04:53:42 +0000

Die Verwendung des Befehls newgrp hat das Problem für mich gelöst:

newgrp <GroupName>

Dieser Blog-Beitrag hat eine detaillierte Erklärung.

12
12
12
2012-01-30 16:17:03 +0000

Sie können dies tun.

Fügen Sie mit usermod -G so viele Gruppen hinzu, wie Sie möchten. Führen Sie dann als Benutzer mit einer laufenden Sitzung newgrp - nur mit dem Argument ‘-’ aus.

Dadurch wird die Gruppen-ID wieder auf den Standardwert zurückgesetzt, aber es werden auch die sekundären Gruppen gesetzt. Sie können dies überprüfen, indem Sie groups von der aktuellen Sitzung aus ausführen, vor und nach der usermod und der newgrp.

Dies muss von jeder offenen Sitzung aus ausgeführt werden - ich weiß nicht viel über Bildschirm. Wenn es jedoch möglich ist, über alle offenen Sitzungen zu iterieren und newgrp auszuführen, sollten Sie gut sein. Sie müssen sich keine Sorgen machen, ob Sie die Gruppen oder die Gruppen-IDs kennen.

Ich wünsche Ihnen viel Glück.

11
11
11
2011-04-25 17:56:34 +0000

Gruppen werden normalerweise bei der Anmeldung aufgezählt, es gibt keine mir bekannte Möglichkeit, eine erneute Gruppenaufzählung zu erzwingen, ohne sich auszuloggen und wieder einzuloggen.

Viele Antworten, über die hier abgestimmt wird, scheinen eine Umgehung zu verwenden, die eine neue Shell mit frischer Umgebung aufruft (genauso wie das erneute Einloggen). die übergeordnete Shell und alle anderen kontinuierlich laufenden Programme erhalten die neue Gruppenmitgliedschaft im allgemeinen erst dann, wenn sie von einer frischen Shell aus wieder aufgerufen werden, normalerweise nach sauberem Ausloggen und Einloggen.

4
4
4
2017-02-10 23:21:38 +0000

Um es zusammenzufassen:

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

Die Verwendung von ‘exec’ bedeutet, die bestehende Shell durch die neue Shell zu ersetzen, die mit dem Befehl newgrp gestartet wird (so dass das Verlassen der neuen Shell Sie abmeldet).

Das abschließende newgrp - wird benötigt, um Ihre normale Primärgruppe wiederherzustellen, so dass Dateien, die Sie später erstellen, diese als Gruppeneigentümer haben.

Hinweis: Die Frage des ursprünglichen Posters war, wie neu hinzugefügte Gruppen in bestehenden Prozessen sichtbar gemacht werden können. Die Befehle gpasswd und usermod wirken sich nicht auf bestehende Prozesse aus; neu hinzugefügte (oder gelöschte!) Gruppen erscheinen in (verschwinden aus) Ihrem Konto, d.h. in den Dateien /etc/group und /etc/gshadow, aber die Berechtigungen für bestehende Prozesse werden nicht geändert. Um Berechtigungen zu entfernen müssen Sie alle laufenden Prozesse beenden; newgrp - wird /etc/group nicht erneut lesen und die Gruppenliste zurücksetzen; stattdessen scheint es nur die Gruppen zu verwenden, die vorher mit dem Prozess verbunden waren.

1
1
1
2018-04-28 13:30:22 +0000

Ich konnte den Befehl newgrp nicht zum Funktionieren bringen. Ich bin mir nicht sicher, ob das von /etc/sudoers abhängt, aber normalerweise muss ich mein Passwort für sudo eingeben, und das hat auch ohne Passwort funktioniert:

[leo60228@leonix:~]$ groups
users wheel

[leo60228@leonix:~]$ sudo echo hi
[sudo] password for leo60228:
hi

[leo60228@leonix:~]$ sudo -k # reset sudo timeout

[leo60228@leonix:~]$ exec sudo -i -u $(whoami) # no password necessary

[leo60228@leonix:~]$ groups
users wheel docker
0
0
0
2014-08-06 14:03:21 +0000

Dieser Trick funktioniert, wenn Sie sudo haben, und er kann Ihnen in einigen Fällen die erneute Eingabe Ihres Passworts ersparen:

sudo su $USER
0
0
0
2019-10-21 22:03:04 +0000

Ich musste dies in einem Shell-Skript tun (Skript fügt den aktuellen Benutzer zu einer Gruppe hinzu, führt spätere Befehle aus, die diese Gruppenzugehörigkeit erfordern). Der Befehl newgrp ist insofern brüchig, als er nur eine neue Shell ausführen kann und nicht einen willkürlichen Befehl (ich möchte das aktuelle Shell-Skript mit den ursprünglichen Befehlszeilen-Args erneut ausführen).

Hier ist meine Lösung, die viele Bash-ismen verwendet: (beachten Sie, dass das umgebende Skript eine Art Zweig benötigt, um diese Funktion nur dann auszuführen, wenn die erforderliche Gruppe derzeit nicht aktiv ist):

(beachten Sie: Das Skript impliziert, dass es sudo adduser $user docker ausgeführt hat, was bedeutet, dass es auch einfach überall sudo docker anstelle von docker ausführen könnte, aber das war in diesem Fall unerwünscht):

# save these for later
ORIGINAL_ARGS=("$@")

# This function is a little insane. The problem is this: user running
# this script is not a member of docker group, but used 'sudo' to add
# themselves to group. Without logging out and back in, the only way
# to gain access to that group is via the 'newgrp' command, which
# unfortunately starts a new shell rather than an arbitrary command...
#
# Also, we're going to newgrp twice: first to add the new group and
# again to restore the original group (but the new group remains in
# the 'groups' output).
#
# So this horrendous hack dups stdin to fd3 for later. Then runs
# 'newgrp' piping in a script that runs 'newgrp' a second time, piping
# in another script that restores stdin from fd3 and execs the
# original command...
restart-newgrp-newgrp() {
  # dup original stdin to fd3
  exec 3<&0

  local group="$1"
  local command="$0"
  local arg
  for arg in "${ORIGINAL_ARGS[@]}"; do
    printf -v command "%s %q" "$command" "$arg"
  done

  # restore original stdin from fd3; also replace any single-quote in
  # command with '"'"' to embed it in a single-quoted string
  local script
  printf -v script "exec newgrp %q <<<'exec <&3-; exec %s'" "$(id -gn)" "${command///\"\"}"

  exec newgrp "$group" <<<"$script"
}
0
0
0
2014-11-13 16:07:46 +0000

Ich hatte ein ähnliches Problem, aber auch für nicht angemeldete Benutzer. Der Neustart des nscd hat nicht geholfen, aber die Ausführung dieses Befehls hat geholfen: nscd -i group. Das sollte nscd (Caching-Daemon) anweisen, die Gruppendatei neu zu laden.