Podczas przypisywania listy grup drugorzędnych użytkownika za pomocą:
# usermod -G <grouplist> <user>
czy można wymusić, aby to przypisanie grupy zaczęło obowiązywać bez wylogowywania się z wszystkich uruchomionych sesji?
Byłoby to bardzo przydatne w sytuacji, gdy istnieje sesja Screen z wieloma uruchomionymi powłokami, ponieważ zasadniczo cała sesja musi zostać zniszczona, aby przypisanie do grupy stało się skuteczne.
Myślę, że mogę zmienić grupę podstawową użytkownika w działającej powłoce za pomocą newgrp
polecenia - czy istnieje jakaś alternatywa, która działałaby dla grup drugorzędnych?
Idealnie chciałbym mieć coś, co zadziałałoby w każdej powłoce bez uruchamiania w każdej z nich ręcznie, ale w przeciwnym razie, może jakiś sposób zmuszenia Screena do wykonania tego samego polecenia w każdej z nich.
źródło
Odpowiedzi:
Okropnie hacky, ale możesz użyć dwóch warstw,
newgrp
aby osiągnąć to dla konkretnej grupy:... poda bieżący identyfikator grupy podstawowej. Nazwiemy to
orig_group
na potrzeby tego przykładu. Następnie:... przełączy Cię do tej grupy jako podstawowej i doda ją do listy grup zwróconych przez
groups
lubid -G
. Teraz kolejne:... dostaniesz powłokę, w której możesz zobaczyć nową grupę, a podstawową jest ta oryginalna.
Jest to okropne i powoduje, że dodawana jest tylko jedna grupa na raz, ale pomogło mi to kilka razy, aby dodać grupy bez wylogowania / w całej mojej sesji X (np. Aby dodać bezpiecznik jako grupę do użytkownika aby sshfs działał).
Edycja: Nie wymaga to również wpisania hasła, co
su
spowoduje.źródło
newgrp $USER
zamiastnewgrp <orig_group>
. Oznacza to, że nie musiałem znajdować oryginalnego identyfikatora grupy podstawowej, więc jest to nawet łatwiejsze niż to rozwiązanie.newgrp <new group name>
. To był Ubuntu 14.04newgrp
tworzy nową powłokę, więc kiedy musisz całkowicie wyjść z sesji, musisz zrobić „exit exit exit”, aby się wydostać (:Z poziomu powłoki możesz wydać następujące polecenie
id wyświetli teraz nową grupę:
źródło
Ta fajna sztuczka z tego linku działa świetnie!
Pomyślałem, że opublikuję go tutaj, ponieważ za każdym razem, gdy zapominam, jak to zrobić, jest to pierwszy link, który pojawia się w Google.
źródło
exec sudo su -l $USER
aby uniknąć monitowania o hasło.NOPASSWD:
1. Uzyskiwanie powłoki z nową grupą bez wylogowania i ponownego zalogowania
Jeśli dodajesz tylko jedną grupę, użyłem następujących:
Jest to odmiana dwuwarstwowej sztuczki newgrp Legooolas, ale jest w jednym wierszu i nie wymaga ręcznego wprowadzania grupy podstawowej.
sg
jest newgrp, ale przyjmuje polecenie wykonania z nowym identyfikatorem grupy. Teexec
środki, że nowa powłoka zastępuje istniejącą powłokę, dzięki czemu nie trzeba „wylogowania” dwukrotnie.W przeciwieństwie do su, nie musisz wpisywać swojego hasła. Nie odświeża również twojego środowiska (oprócz dodawania grupy), więc zachowujesz swój bieżący katalog roboczy itp.
2. Wykonanie polecenia we wszystkich oknach ekranu w sesji
at
Komenda w ekran uruchamia polecenie w cokolwiek okna można określić (zauważ, że jest to polecenie ekranu, a nie polecenie powłoki).Możesz użyć następującego polecenia, aby wysłać polecenie do wszystkich istniejących sesji Screen:
Zwróć uwagę na potrzebę ucieczki przed backstickami, aby
id
uruchomić w sesji Screen, oraz ^ M, aby Screen uderzył „enter” na końcu twojego polecenia.Zauważ też, że
stuff
polecenie screena po prostu wpisuje tekst polecenia w twoim imieniu. Dlatego może się zdarzyć coś dziwnego, jeśli jedno z okien ekranowych ma w połowie napisane polecenie w wierszu polecenia lub uruchamia aplikację inną niż powłoka (np. Emacs, top). Jeśli to jest problem, mam kilka pomysłów:Aby uruchomić polecenie w określonym oknie (oznaczonym numerem okna), użyj następujących poleceń:
źródło
Za pomocą
newgrp
polecenia rozwiązał problem dla mnie:Ten post na blogu zawiera szczegółowe wyjaśnienia.
źródło
Grupy są zwykle wyliczane przy logowaniu, nie ma sposobu, aby zmusić je do ponownego wykonania wyliczenia grup bez wylogowania i ponownego zalogowania.
Wydaje się, że w wielu głosowaniach tutaj zastosowano obejście, które wywołuje nową powłokę ze świeżym środowiskiem (tak samo jak ponowne logowanie). powłoka nadrzędna i wszystkie inne stale działające programy na ogół nie otrzymają nowego członkostwa w grupie, dopóki nie zostaną ponownie wywołane ze świeżej powłoki, zwykle po czystym wylogowaniu i zalogowaniu.
źródło
Możesz to zrobić.
Dodaj tyle grup, ile chcesz
usermod -G
. Następnie jako użytkownik z uruchomioną sesją uruchomnewgrp -
tylko argument „-”.Powoduje to ponowne ustawienie identyfikatora grupy na wartość domyślną, ale spowoduje także ustawienie grup pomocniczych. Możesz to sprawdzić, uruchamiając
groups
z bieżącej sesji, przed i pousermod
oraznewgrp
.To musi być uruchamiane z każdej otwartej sesji - niewiele wiem o ekranie. Jeśli jednak można iterować wszystkie otwarte sesje i biegać
newgrp
, powinieneś być dobry. Nie musisz się martwić o znajomość grup lub identyfikatorów grup.Powodzenia.
źródło
newgrp -
rozpoczyna nowy proces powłokiPodsumowując:
Użycie „exec” oznacza zastąpienie istniejącej powłoki nową powłoką uruchomioną przez komendę newgrp (więc wyjście z nowej powłoki powoduje wylogowanie).
Wersja ostateczna
newgrp -
jest potrzebna do przywrócenia normalnej grupy podstawowej, więc pliki, które później utworzysz, będą miały tego właściciela.Uwaga: pytanie oryginalnego plakatu brzmiało, jak sprawić, by nowo dodane grupy były widoczne w istniejących procesach.
gpasswd
Iusermod
polecenia nie wpływa na istniejące procesy; nowo dodane (lub usunięte!) grupy pojawiają się w (znikają) z twojego konta, tj. w plikach / etc / group i / etc / gshadow, ale uprawnienia dla istniejących procesów nie są zmieniane. Aby usunąć uprawnienia, musisz zabić wszystkie uruchomione procesy;newgrp -
nie odczyta ponownie pliku / etc / group i nie zresetuje listy grup; zamiast tego wydaje się po prostu korzystać z grup wcześniej powiązanych z procesem.źródło
exec su - <username>
można go użyć do uzyskania nowej powłoki logowania z ustawionymi grupami, ale to nie zadziała w skryptach, ponieważ nowa powłoka odczyta polecenia z terminala. Możesz użyćsu -c "command ..." <myusername>
do zrestartowania skryptu, ale wynikowy proces nie ma kontrolującego terminala, więc wystąpi błąd, jeśli spróbujesz użyć edytora ekranu lub innego interaktywnego polecenia.newgrp -
czy nie zastąpić „pierwotną grupę”. Odpowiedź Patricka Conheady'ego jest tutaj najlepsza, ponieważ nie rozwidla ani nie zmienia grupy podstawowej.Miałem podobny problem, ale także dla niezalogowanych użytkowników. Restart nscd nie pomogło, ale wykonanie tego polecenia nie:
nscd -i group
. To powinno poinstruować nscd (demona buforowania), aby ponownie załadował plik grup.źródło
Nie mogłem uruchomić polecenia newgrp. Nie jestem pewien, czy zależy to od / etc / sudoers, ale zwykle muszę wpisać hasło do sudo, i działało to bez wymagania hasła:
źródło
To załatwia
sudo
sprawę, jeśli masz, i może uchronić Cię przed ponownym wprowadzeniem hasła w niektórych przypadkach:źródło