Jak usunąć użytkownika z grupy?


342

Jakiego polecenia powinienem użyć do usunięcia użytkownika z grupy w Debianie?

Dodając użytkownika do grupy, można to zrobić za pomocą:

usermod -a -G group user

Nie udało mi się jednak znaleźć podobnego polecenia (akceptującego grupę i użytkownika jako argumenty) w celu usunięcia użytkownika z grupy. Najbliższe, jakie mogłem uzyskać, to:

usermod -G all,existing,groups,except,for,group user

Czy istnieje takie polecenie, jak w usermod OPTION group userprzypadku OPCJI, aby usermod(lub podobny program) usunąć użytkownika z grupy?


1
Dla użytkowników Fedory, którzy tu trafią, man usermod ujawnia w opcji -G komentarze, że lista wszystkich bieżących grup chce zostać zachowana JEST sposobem na usunięcie grupy. Brak opcji -R w Fedorze; musisz zastosować podejście Lekensteyna, którego on próbuje uniknąć.
Stephen

Odpowiedzi:


403

Możesz użyć gpasswd:

# gpasswd -d user group

wtedy nowa konfiguracja grupy zostanie przypisana przy następnym logowaniu, przynajmniej na Debianie. Jeśli użytkownik jest zalogowany, efekty polecenia nie są widoczne natychmiast.


9
Perfekcyjnie, dzięki! gpasswd -a user groupdodanie użytkownika do grupy wydaje się również przyjemniejsze, zwłaszcza jeśli literówka się popełniła i -aopcja została odrzucona.
Lekensteyn,

1
Nie działa dla mnie Otrzymuję dwie wiadomości: a) Usunięcie użytkownika z grupy. b) gpasswd: użytkownik nie jest członkiem grupy. Następnie uruchomienie „grupy członków” nie pokazuje żadnych zmian.
geoidesic

1
@geoidesic musisz się wylogować i zalogować ponownie, aby zobaczyć efekt
Wasif Hossain

1
Czy istnieje sposób, aby zmiana zaczęła obowiązywać bez konieczności ponownego logowania?
Andy Fusniak,

2
@geoidesic Mam te błędy na Centos 7. Odkryłem, że masz to, jeśli próbujesz usunąć użytkownika z domyślnej grupy. Spróbuj zmienić domyślną grupę, a usermod -g user usernastępnie spróbuj je usunąć.
PanPipes

175

W Debianie adduserpakiet zawiera deluserprogram, który usuwa użytkownika z grupy, jeśli podasz oba argumenty:

deluser user group

Jeśli Twoja dystrybucja nie ma adduser, możesz edytować /etc/groupi /etc/gshadowręcznie.

vigr
vigr -s

10
Nie znałem programów takich jak vigri vipw. Bardzo przydatne w przypadku, gdy strony są zbyt daleko :)
Lekensteyn,

3
Alternatywnie, po zmodyfikowaniu /etc/groupuruchom, grpconvaby zaktualizować /etc/gshadowzamiast go edytować.
Cyrille,

sudo deluser jenkins admin/ usr / sbin / deluser: Nie możesz usunąć użytkownika z jego grupy podstawowej.
Jonathan

@JonathanLeaders Każdy użytkownik musi należeć do co najmniej jednej grupy. Użyj usermodlub, vipwaby zmienić grupę podstawową użytkownika. To pytanie dotyczyło grup uzupełniających.
Gilles

Miły. Istnieje również prostsze adduser $user $grouppolecenie zamiast usermod -x -y -z -....
ygoe

65
usermod -G "" username

usuwa wszystkie drugorzędne / dodatkowe grupy z nazwy użytkownika , pozostawiając ich jako członków tylko ich podstawowej grupy. działało to w Solarisie 5.9


5
Testowane w CentOS 6.4; Pracuje.
aggregate1166877

1
Działa również w systemie Ubuntu 12.04.
aggregate1166877

I to wydaje się być najlepszym sposobem, aby wymusić grupy drugorzędne na dowolnej liście grup, z wyłączeniem wszystkich grup niepublicznych.
mędrzec

Testowane i działające w CentOS 7. Dzięki!
Tricky

14

To jest podejście „starej szkoły” ...

Większość systemów * nix przechowuje informacje o grupie w zwykłym pliku tekstowym /etc/group, gdzie

  • każda linia zawiera pola

    • Nazwa grupy
    • hasło
    • GID i
    • Lista użytkowników

    ograniczone przez :znak.

  • pole lista_użytkowników jest listą nazw użytkowników oddzielonych przecinkami.

Załóżmy teraz, że chcesz usunąć użytkownika o nazwie thisuser z grupy o nazwie thatgroup. Zacznij od utworzenia kopii zapasowej /etc/group, a następnie użyj edytora preferencji z uprawnieniami su do edycji pliku /etc/group i usunięcia thisuserodwołania z pozycji thatgroupwiersza, np.

oryginalna linia wygląda mniej więcej tak:

thatgroup:x:1274:someuser,thisuser,anotheruser

po edycji należy pozostawić tak:

thatgroup:x:1274:someuser,anotheruser

Podobnie jak w przypadku wszystkich innych odpowiedzi, nie wpłynie to na bieżącą sesję użytkownika, jeśli taka istnieje (tj. Jeśli użytkownik jest aktualnie zalogowany). Zmiana zacznie obowiązywać przy następnym logowaniu użytkownika.


1
vigrzostał już wspomniany do /etc/groupręcznej edycji . Moje strony podręcznika mówią, że nazwy użytkowników są oddzielone przecinkami, a nie dwukropkami. Ponowne uruchomienie nie jest konieczne, wystarczy ponownie się zalogować (lub użyć newgrp).
Lekensteyn,

Aby pomóc użytkownikom niebędącym Debianem odwiedzającym te brzegi, szukającym wskazówek ... może to wystarczyć dla Debiana zgodnie z zakresem pytania OP, ale jeśli używałeś tego w systemie operacyjnym * BSD, musisz zmodyfikować plik tekstowy tutaj, jak wspomniano, a następnie wydaj pwd_mkdb -p /etc/master.passwd, aby faktycznie użyć tej listy.
danno

3

Możesz użyć poniższego polecenia w dystrybucjach SUSE (i najwyraźniej żadnych innych ).

usermod -R grupa  nazwa_użytkownika

gdzie groupjest grupa, z której chcesz usunąć użytkownika i user_nameużytkownik, którego chcesz usunąć z grupy. Na przykład,

usermod -R root imnottheroot

1
Jaki pakiet zawiera plik binarny usermod? Proszę o sprawdzenie wersji, ponieważ moja z shadow-utils-4.1.4.3 nie zapewnia opcji -R.
myroslav

3
Mój pakiet shadow 4.1.5.1-5 (Arch Linux) ma -Ropcję, ale to oznacza coś innego. To chyba nie Linux.
Lekensteyn,

3
Nie jestem pewien, czy to zadziała. Strona podręcznika mówi -R: „-R, --roro CHROOT_DIR Zastosuj zmiany w katalogu CHROOT_DIR i użyj plików konfiguracyjnych z katalogu CHROOT_DIR.”
MikeKusold

2
Jedyną rzeczą, jaką mogłem znaleźć, była ta strona wyroczni, ale wciąż nie chodzi o to samo, więc ta odpowiedź powinna zostać usunięta.
Kyrias

sudo usermod -R admin jenkinsusermod: niepoprawna ścieżka chroot 'admin'
Jonathan

1

Rozważać:

  • Nazwa Użytkownika: abc2
  • Nazwa grupy: newgroup11

  • Zadanie: usunięcie użytkownika abc2z grupynewgroup11

[root@home1 ~]# groups abc2
abc2 : abc2
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# groups abc2
abc2 : abc2 newgroup11
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# usermod -G abc2 abc2
[root@home1 ~]# groups abc2
abc2 : abc2

** Prosimy o poprawienie mnie, jeśli się mylę. **


1
To „działa”, ale tylko dlatego, że masz jedną grupę drugorzędną. usermod -G newgroup11 abc2umieści cię w grupie drugorzędnej newgroup11. Ponieważ podstawową grupą jest abc2, skończysz w obu grupach. usermod -g abc2 abc2powoduje newgroup11usunięcie z grup drugorzędnych, ponieważ nie jest już wspomniany. Tak więc dla trzech lub więcej różnych grup ta metoda nie będzie działać. Zobacz inne odpowiedzi dotyczące gpasswdlepszego polecenia.
Lekensteyn,

1

Możesz usunąć użytkownika z grupy, wykonując komendę usermod bez opcji -a. Przykład, wykonując „usermod -G group1 nazwa użytkownika” doda użytkownika do grupy 1 i usunie go z innych grup, w których się znajduje. Pamiętaj, że możesz trzymać użytkownika w różnych grupach, wymieniając nazwy grup oddzielone przecinkami.


1
Informacje te zostały już przedstawione wiele razy.
Scott

0

Aby kontynuować używanie usermod w dystrybucji (takiej jak Fedora), która nie ma opcji usuwania, gdzie user = bob i group = deletethisgroup, komenda wyglądałaby następująco:

usermod -G `cat /etc/group |  grep bob | grep -v deletethisgroup | cut -d ':' -f 1 | tr '\n' ',' | sed 's/,$//'` bob

Potoki (1) pobierają wszystkie wpisy grup, do których należy użytkownik, (2) wyjmują ten, który należy usunąć, (3) zwraca pierwszą kolumnę (nazwę grupy), zastępuje nowy wiersz przecinkiem i usuwa przecinek końcowy.

Oczywiście można to wszystko umieścić w skrypcie bash, który przyjmuje parametry użytkownika i grupy do usunięcia. awk może być użyty do skrócenia końca, ale chciałem trzymać się grep, cut, tr i sed.


Według tej strony podręcznika , również gpasswd -d bob deletethisgroupjest dostępna. Jest jakiś powód, dla którego go nie używasz?
Lekensteyn

Nie wszyscy chcą konfigurować hasła grupowe. Właśnie oferowałem rozwiązanie za pomocą polecenia, do którego odnosiło się pytanie dotyczące konkretnej dystrybucji. w Fedorze / RHEL / Centos z gpasswd -d usunięty użytkownik może nadal dołączyć do grupy, jeśli ma dostęp do hasła. W rzeczywistości zwiększa dostęp do grupy, a nie uniemożliwia.
Stephen

Zrozumiałem, że nazwa narzędzia to nazwa, gpasswdponieważ jest blisko spokrewniona /etc/passwd, ale zamiast tego zarządza grupami. W przeciwieństwie do zwykłego passwdpolecenia, które kontroluje tylko hasła, gpasswdmoże być również użyte do zarządzania członkostwem w grupie. Hasło grupy nie jest wymagane, jeśli jesteś rootem lub administratorem grupy.
Lekensteyn

Czy przeczytałeś instrukcję gpasswd? W przypadku Fedory / RHEL / CentOS, jeśli czytasz instrukcję, jest powiedziane, że polecenie „służy do administrowania / etc / group i / etc / gshadow”. W rzeczywistości nie ma to wpływu na / etc / passwd. Podręcznik stwierdza również: „Hasła grupowe są nieodłącznym problemem bezpieczeństwa, ponieważ hasło może znać więcej niż jedna osoba”. W rzeczywistości nie zarządza członkostwem w grupie, otwiera grupę dla KAŻDEGO użytkownika z hasłem. Hasło grupy nie jest wymagane, jeśli jesteś już członkiem grupy.
Stephen

Blisko spokrewnione było w znaczeniu podobnych nazw i celów, nie sugerowałem, że plik / etc / passwd jest faktycznie zarządzany przez gpasswd. Zauważ, że „strona podręcznika” w moim pierwszym komentarzu wskazuje na stronę podręcznika gpasswd dla Fedory 13. Za pomocą gpasswd $groupmożesz ustawić hasło grupy, które powoduje wspomniany problem bezpieczeństwa. Jednak można również nie ma hasła i użyć gpasswd -d $user $groupaby usunąć użytkownika, jak opisano w pierwszym komentarzu i zaakceptowanych odpowiedź. Zauważ, że to polecenie nie monituje o hasło grupy, nie modyfikuje go ani nie wymaga.
Lekensteyn

0

Załóżmy, że nazwa użytkownika = uczeń i nazwa grupy = badanie , dlatego aby usunąć studentużytkownika z researchgrupy, wykonaj następujące czynności:

gpasswd -d student research

Po co powtarzać coś, co było tutaj 6 lat wcześniej? Jest oznaczony jako zaakceptowana odpowiedź!
Betlista

-1
pw groupmod "groupname|gid" -d "username|uid"

Rozwiązanie, jeśli używasz CSH, z jakiegokolwiek powodu.


-1

Aby usunąć użytkownika z grupy, gpasswd jest najlepszym narzędziem dla tego IMO.

Przykład polecenia:

sudo gpasswd -d group user

* Informacje o pomocy *

Usage: gpasswd [option] GROUP

Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -Q, --root CHROOT_DIR         directory to chroot into
  -r, --delete-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.

1
Argumenty grupy i użytkownika są zamieniane. Jest to dokładnie to, co zaproponowała zaakceptowana odpowiedź, ten post nie jest naprawdę pomocny?
Lekensteyn,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.