Come rimuovo un utente da un gruppo?


343

Quale comando dovrei usare per rimuovere un utente da un gruppo in Debian?

Quando si aggiunge un utente a un gruppo, si può fare con:

usermod -a -G group user

Tuttavia, non sono riuscito a trovare un comando simile (accettando un gruppo e un utente come argomenti) per rimuovere l'utente dal gruppo. Il più vicino che potrei ottenere è:

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

Esiste un comando come usermod OPTION group usercon OPTION un'opzione per fare in modo che usermod(o un programma simile) rimuova l'utente dal gruppo?


1
Per gli utenti Fedora che finiscono qui, man usodod rivela nei commenti dell'opzione -G che un elenco di tutti i gruppi attuali desidera essere mantenuto È il modo di eliminare un gruppo. Nessuna opzione -R con Fedora; devi usare l'approccio di Lekensteyn che sta cercando di evitare.
Stephen,

Risposte:


404

Puoi usare gpasswd:

# gpasswd -d user group

quindi la nuova configurazione di gruppo verrà assegnata al prossimo accesso, almeno su Debian. Se l'utente ha effettuato l'accesso, gli effetti del comando non vengono visualizzati immediatamente.


9
Perfetto grazie! gpasswd -a user groupper aggiungere l'utente al gruppo sembra anche più bello, specialmente se un errore di battitura ha fatto e l' -aopzione viene eliminata.
Lekensteyn,

1
Non funziona per me. Ricevo due messaggi: a) Rimozione dell'utente dal gruppo. b) gpasswd: l'utente non è un membro del gruppo. Successivamente l'esecuzione di "gruppo di membri" non mostra alcuna modifica.
geoidesic,

1
@geoidesic è necessario disconnettersi e accedere nuovamente per vedere l'effetto
Wasif Hossain,

1
C'è un modo per rendere effettive le modifiche senza dover ripetere il login?
Andy Fusniak,

2
@geoidesic Ho riscontrato questi errori su Centos 7. Ho trovato questo, se stavi cercando di rimuovere l'utente dal loro gruppo predefinito. Prova a cambiare il gruppo predefinito con usermod -g user userquindi prova a rimuoverli.
PanPipes

175

Su Debian, il adduserpacchetto contiene un deluserprogramma che rimuove un utente da un gruppo se si passano entrambi come argomenti:

deluser user group

Se la tua distribuzione non ha adduser, puoi modificare /etc/groupe /etc/gshadowmanualmente.

vigr
vigr -s

10
Non conoscevo programmi come vigre vipw. Molto utile nel caso in cui le manpage siano troppo lontane :)
Lekensteyn,

3
In alternativa, dopo aver modificato, /etc/groupeseguire grpconvper aggiornare /etc/gshadowanziché modificarlo.
Cyrille,

sudo deluser jenkins admin/ usr / sbin / deluser: non puoi rimuovere l'utente dal suo gruppo principale.
Jonathan,

@JonathanLeaders Ogni utente deve far parte di almeno un gruppo. Utilizzare usermodo vipwper modificare il gruppo principale dell'utente. Questa domanda riguardava gruppi supplementari.
Gilles,

Bello. C'è anche il adduser $user $groupcomando più semplice invece di usermod -x -y -z -....
giovedì

65
usermod -G "" username

rimuove tutti i gruppi secondari / supplementari dal nome utente , lasciandoli come membri del solo gruppo primario. questo ha funzionato in Solaris 5.9


5
Testato in CentOS 6.4; lavori.
aggregate1166877,

1
Funziona anche con Ubuntu 12.04.
aggregate1166877,

E questo sembra essere il modo migliore per forzare i gruppi secondari a qualsiasi elenco di gruppi, esclusi tutti i gruppi non elencati.
saggio

Testato e funzionante in CentOS 7. Grazie!
Tricky

14

Questo è l'approccio della "vecchia scuola" ...

La maggior parte dei sistemi * nix mantiene le informazioni di gruppo in un file di testo semplice /etc/group, dove

  • ogni riga contiene i campi

    • nome del gruppo
    • parola d'ordine
    • GID e
    • lista degli utenti

    delimitato dal :personaggio.

  • il campo elenco_utente è un elenco di nomi utente, separati da virgole.

Supponiamo ora di voler rimuovere un utente chiamato thisuser da un gruppo denominato thatgroup. Inizia eseguendo il backup /etc/group, quindi utilizza l'editor delle tue preferenze con i privilegi su per modificare il file /etc/group e rimuovere il thisuserriferimento dalla thatgroupvoce di riga, ad es.

la linea originale è qualcosa del genere:

thatgroup:x:1274:someuser,thisuser,anotheruser

dopo la modifica dovrebbe essere lasciato in questo modo:

thatgroup:x:1274:someuser,anotheruser

Come per tutte le altre risposte, ciò non influirà sulle sessioni correnti dell'utente, se presenti (ovvero, se l'utente è attualmente connesso). La modifica avrà effetto al successivo accesso dell'utente.


1
vigrè già stato menzionato per la modifica /etc/groupmanuale. Le mie pagine di manuale dicono che i nomi degli utenti sono separati da virgole, non da due punti. Il riavvio non è necessario, è sufficiente accedere nuovamente (o utilizzare newgrp).
Lekensteyn,

Per aiutare gli utenti non Debian a colpire queste coste alla ricerca di indizi ... questo potrebbe essere sufficiente per Debian secondo l'ambito della domanda di OP, ma se lo si stesse usando per un sistema operativo * BSD, sarebbe necessario modificare il file di testo normale qui come detto, quindi emettere un pwd_mkdb -p /etc/master.passwd per mettere effettivamente in uso tale elenco.
danno

3

È possibile utilizzare il comando seguente sulle distribuzioni SUSE (e, a quanto pare, nessun altro ).

usermod -R group  nome_utente

dove si grouptrova il gruppo da cui si desidera rimuovere l'utente e user_namel'utente che si desidera rimuovere dal gruppo. Per esempio,

usermod -R root imnottheroot

1
Quale pacchetto fornisce il tuo binario usermod? Sto chiedendo di scoprire la versione, poiché la mia da shadow-utils-4.1.4.3 non fornisce l'opzione -R.
miroslav,

3
Il mio pacchetto shadow 4.1.5.1-5 (Arch Linux) ha -Run'opzione, ma questo significa qualcos'altro. Non è Linux, immagino.
Lekensteyn,

3
Non sono sicuro che funzionerà. La manpage sta dicendo che -Rè: "-R, --root CHROOT_DIR Applica le modifiche nella directory CHROOT_DIR e usa i file di configurazione dalla directory CHROOT_DIR."
MikeKusold

2
L'unica cosa che ho trovato è stata questa manpage di Oracle, ma non è ancora la stessa cosa, quindi questa risposta potrebbe essere rimossa.
kyrias,

sudo usermod -R admin jenkinsusermod: percorso chroot 'admin' non valido
Jonathan

1

Tener conto di:

  • nome utente: abc2
  • nome del gruppo: newgroup11

  • Attività: rimozione dell'utente abc2dal grupponewgroup11

[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

** Gentilmente correggimi se sbaglio. **


1
Questo "funziona", ma solo perché hai un singolo gruppo secondario. usermod -G newgroup11 abc2ti metterà nel gruppo secondario newgroup11. Poiché il gruppo primario è abc2, finirai in entrambi i gruppi. usermod -g abc2 abc2risulta newgroup11essere rimosso dai gruppi secondari perché non è più menzionato. Quindi, per tre o più gruppi diversi, questo metodo non funzionerà. Vedi le altre risposte che coinvolgono gpasswdper un comando migliore.
Lekensteyn,

1

È possibile rimuovere l'utente dal gruppo eseguendo il comando usermod senza l'opzione -a. Ad esempio, eseguendo "usermod -G nomeutente gruppo1" si aggiungerà l'utente al gruppo1 e lo si rimuoverà da tutti gli altri gruppi in cui si trova. Ricorda, puoi mantenere l'utente in vari gruppi elencando i nomi dei gruppi, separati da una virgola.


1
Questa informazione è stata già presentata più volte.
Scott,

0

Per continuare a usare usermod in una distro (come Fedora) che non ha un'opzione di rimozione, dove user = bob e group = deletethisgroup, il comando sarebbe:

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

Le pipe (1) ottengono tutte le voci di gruppo a cui appartiene l'utente, (2) eliminano quella che deve essere rimossa, (3) restituisce la prima colonna (nome del gruppo), sostituisce la nuova riga con la virgola e rimuove la virgola finale.

Ovviamente, potresti inserire tutto ciò in uno script bash che richiede all'utente e al gruppo di essere cancellati come parametri. awk poteva essere usato per accorciare la fine ma volevo attenermi a grep, cut, tr e sed.


Secondo questa pagina man , gpasswd -d bob deletethisgroupè disponibile anche. Qualche motivo per cui non lo stai usando?
Lekensteyn,

Non tutti vogliono impostare password di gruppo. Stavo solo offrendo una soluzione usando il comando a cui faceva riferimento la domanda su una particolare distribuzione. in Fedora / RHEL / Centos con gpasswd -d l'utente rimosso può comunque unirsi al gruppo se ha accesso alla password. In realtà aumenta l'accesso al gruppo invece di non consentirlo.
Stephen,

Ho capito che l'utilità prende il nome gpasswdperché è strettamente correlata /etc/passwd, ma gestisce invece i gruppi. A differenza del semplice passwdcomando che controlla solo le password, gpasswdpuò anche essere usato per gestire l'appartenenza a un gruppo. Non è richiesta una password di gruppo se si è root o un amministratore di gruppo.
Lekensteyn,

Hai letto il manuale di gpasswd? Per Fedora / RHEL / CentOS, se leggi il manuale, si afferma che il comando "è usato per amministrare / etc / group e / etc / gshadow". In realtà non ha alcun effetto su / etc / passwd. Il manuale afferma inoltre "Le password di gruppo sono un problema di sicurezza intrinseco poiché è consentito a più di una persona conoscere la password". In realtà non gestisce l'appartenenza a un gruppo, apre il gruppo a QUALSIASI utente con la password. Non è richiesta una password di gruppo se si è già MEMBRI del gruppo.
Stephen,

Strettamente correlato era nel senso di nomi e scopi simili, non implicavo che il file / etc / passwd sia effettivamente gestito da gpasswd. Nota che "man page" nel mio primo commento punta alla pagina di manuale di gpasswd per Fedora 13. Usando gpasswd $grouppuoi impostare la password del gruppo che causa il problema di sicurezza che hai citato. Tuttavia, non è inoltre possibile disporre di una password e utilizzare gpasswd -d $user $groupper eliminare un utente come descritto nel primo commento e nella risposta accettata. Si noti che questo comando non richiede una password di gruppo né la modifica o la richiede.
Lekensteyn,

0

Supponi che username = student e groupname = research , quindi per rimuovere l' studentutente dal researchgruppo devi fare quanto segue:

gpasswd -d student research

Perché ripetere qualcosa, che era qui 6 anni prima? È contrassegnato come risposta accettata!
Betlista,

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

Una soluzione se si utilizza CSH, per qualsiasi motivo.


-1

Per rimuovere un utente da un gruppo gpasswd è la migliore utility per questo IMO.

Esempio di comando:

sudo gpasswd -d group user

* Informazioni sulla guida *

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
Gli argomenti di gruppo e utente vengono scambiati. Inoltre, questo è esattamente ciò che la risposta accettata ha proposto, questo post non è davvero utile?
Lekensteyn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.