¿Cómo elimino a un usuario de un grupo?


343

¿Qué comando debo usar para eliminar a un usuario de un grupo en Debian?

Al agregar un usuario a un grupo, se puede hacer con:

usermod -a -G group user

Sin embargo, no pude encontrar un comando similar (aceptando un grupo y un usuario como argumentos) para eliminar al usuario del grupo. Lo más cerca que pude llegar es:

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

¿Hay un comando como usermod OPTION group usercon OPTION una opción para hacer que usermod(o un programa similar) elimine al usuario del grupo?


1
Para los usuarios de Fedora que terminan aquí, man usermod revela en los comentarios de la opción -G que una lista de todos los grupos actuales desea retener ES la forma de eliminar un grupo. Sin opción -R con Fedora; debes usar el enfoque de Lekensteyn que intenta evitar.
Stephen

Respuestas:


404

Puedes usar gpasswd:

# gpasswd -d user group

entonces la nueva configuración del grupo se asignará en el próximo inicio de sesión, al menos en Debian. Si el usuario ha iniciado sesión, los efectos del comando no se ven de inmediato.


99
¡Perfecto gracias! gpasswd -a user grouppara agregar al usuario al grupo también parece más agradable, especialmente si se ha cometido un error tipográfico y se elimina la -aopción.
Lekensteyn

1
No funciona para mi Recibo dos mensajes: a) Eliminar usuario del grupo. b) gpasswd: el usuario no es miembro del grupo. Posteriormente, ejecutar "grupo de miembros" no muestra ningún cambio.
geodésico

1
@geoidesic necesita cerrar sesión y volver a iniciar sesión para ver el efecto
Wasif Hossain

1
¿Hay alguna manera de hacer que el cambio surta efecto sin tener que volver a iniciar sesión?
Andy Fusniak

2
@geoidesic Recibí estos errores en Centos 7. Descubrí que tienes esto, si estabas tratando de eliminar al usuario de su grupo predeterminado. Intente cambiar el grupo predeterminado con usermod -g user userluego intente eliminarlos.
PanPipes

175

En Debian, el adduserpaquete contiene un deluserprograma que elimina a un usuario de un grupo si pasa ambos como argumentos:

deluser user group

Si su distribución no tiene adduser, puede editar /etc/groupy /etc/gshadowmanualmente.

vigr
vigr -s

10
No sabía de programas como vigry vipw. Muy útil en caso de que las páginas del manual estén demasiado lejos :)
Lekensteyn

3
Alternativamente, después de modificar /etc/groupejecutar grpconvpara actualizar en /etc/gshadowlugar de editarlo.
Cyrille

sudo deluser jenkins admin/ usr / sbin / deluser: no puede eliminar al usuario de su grupo principal.
Jonathan

@ JonathanLeaders Cada usuario debe estar en al menos un grupo. Use usermodo vipwpara cambiar el grupo primario del usuario. Esta pregunta era sobre grupos suplementarios.
Gilles

Agradable. También está el adduser $user $groupcomando más simple en lugar del usermod -x -y -z -....
ygoe

65
usermod -G "" username

elimina todos los grupos secundarios / suplementarios del nombre de usuario , dejándolos como miembros de solo su grupo primario. esto funcionó en Solaris 5.9


55
Probado en CentOS 6.4; trabajos.
agregado1166877

1
También funciona en Ubuntu 12.04.
agregado1166877

Y esta parece ser la mejor manera de forzar a los grupos secundarios a cualquier lista de grupos, excluyendo todos los grupos no listados.
sabio

Probado y trabajando en CentOS 7. ¡Gracias!
Tricky el

14

Este es el enfoque de la "vieja escuela" ...

La mayoría de los sistemas * nix mantienen la información del grupo en un archivo de texto plano /etc/group, donde

  • cada línea contiene los campos

    • Nombre del grupo
    • contraseña
    • GID y
    • Lista de usuarios

    delimitado por el :personaje

  • El campo user_list es una lista de nombres de usuario, separados por comas.

Ahora suponga que desea eliminar un usuario llamado thisuser de un grupo llamado thatgroup. Comience haciendo una copia de seguridad /etc/group, luego use el editor de su preferencia con privilegios su para editar el archivo /etc/group y eliminar la thisuserreferencia de la thatgroupentrada de línea, por ejemplo,

La línea original es algo como esto:

thatgroup:x:1274:someuser,thisuser,anotheruser

Después de la edición se debe dejar así:

thatgroup:x:1274:someuser,anotheruser

Al igual que con todas las otras respuestas, esto no afectará las sesiones actuales del usuario, si las hay (es decir, si el usuario está actualmente conectado). El cambio tendrá efecto la próxima vez que el usuario inicie sesión.


1
vigrya se mencionó para editar /etc/groupmanualmente. Mis páginas del manual dicen que los nombres de usuario están separados por comas, no por dos puntos. No es necesario reiniciar, solo necesita volver a iniciar sesión (o usar newgrp).
Lekensteyn

Para ayudar a cualquier usuario que no sea Debian que llegue a estas costas en busca de pistas ... esto puede ser suficiente para Debian según el alcance de la pregunta de OP, pero si estuviera usando esto para un * BSD OS, necesitaría modificar el archivo de texto sin formato aquí como se mencionó, luego emita un pwd_mkdb -p /etc/master.passwd para realmente poner esa lista en uso.
danno

3

Puede usar el siguiente comando en las distribuciones de SUSE (y, aparentemente, no en otras ).

usermod -R group  nombre_usuario

dónde groupestá el grupo del que desea eliminar al usuario y user_nameel usuario que desea eliminar del grupo. Por ejemplo,

usermod -R root imnottheroot

1
¿Qué paquete proporciona su usermod binario? Estoy pidiendo averiguar la versión, ya que la mía de shadow-utils-4.1.4.3 no proporciona la opción -R.
myroslav

3
Mi paquete shadow 4.1.5.1-5 (Arch Linux) tiene una -Ropción, pero eso significa algo más. No es Linux, supongo.
Lekensteyn

3
No estoy seguro de que esto funcione. La página de manual dice que -Res: "-R, --root CHROOT_DIR Aplique los cambios en el directorio CHROOT_DIR y use los archivos de configuración del directorio CHROOT_DIR".
MikeKusold

2
Las únicas cosas relacionadas que pude encontrar fue esta página de manual de Oracle, pero todavía no se trata de lo mismo, por lo que esta respuesta debería eliminarse.
kyrias

sudo usermod -R admin jenkinsusermod: ruta de administrador chroot no válida 'admin'
Jonathan

1

Considerar:

  • nombre de usuario: abc2
  • Nombre del grupo: newgroup11

  • Tarea: Eliminar usuario abc2del gruponewgroup11

[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

** Por favor, corrígeme si me equivoco. ** **


1
Esto "funciona", pero solo porque tiene un solo grupo secundario. usermod -G newgroup11 abc2te pondrá en el grupo secundario newgroup11. Como el grupo primario es abc2, terminarás en ambos grupos. usermod -g abc2 abc2resulta en newgroup11ser eliminado de los grupos secundarios porque ya no se menciona. Entonces, para tres o más grupos diferentes, este método no funcionará. Vea las otras respuestas involucradas gpasswdpara un mejor comando.
Lekensteyn

1

Puede eliminar usuarios del grupo ejecutando el comando usermod sin la opción -a. Ejemplo, al ejecutar "usermod -G group1 username" se agregará el usuario al grupo1 y se eliminará de cualquier otro grupo donde se encuentre. Recuerde, puede mantener al usuario en varios grupos enumerando los nombres de los grupos, separados por comas.


1
Esta información ya se ha presentado varias veces.
Scott

0

Para continuar usando usermod en una distribución (como Fedora) que no tiene una opción de eliminación, donde user = bob y group = deletethisgroup, el comando sería:

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

Las canalizaciones (1) obtienen todas las entradas de grupo a las que pertenece el usuario, (2) eliminan la que necesita ser eliminada, (3) devuelve la primera columna (nombre del grupo), reemplaza la nueva línea con una coma y elimina la coma final.

Por supuesto, podría poner todo eso en una secuencia de comandos bash que lleve al usuario y al grupo a eliminarse como parámetros. awk podría usarse para acortar el final, pero quería apegarme a grep, cut, tr y sed.


Según esta página de manual , también gpasswd -d bob deletethisgroupestá disponible. ¿Alguna razón por la que no lo estás usando?
Lekensteyn

No todos quieren configurar contraseñas grupales. Solo estaba ofreciendo una solución usando el comando al que hacía referencia la pregunta en una distribución particular. en Fedora / RHEL / Centos con gpasswd -d, el usuario eliminado aún puede unirse al grupo si tiene acceso a la contraseña. En realidad, aumenta el acceso grupal en lugar de no permitirlo.
Stephen

Entendí que la utilidad se llama gpasswdporque está estrechamente relacionada con /etc/passwd, pero en su lugar administra grupos. A diferencia del passwdcomando simple que solo controla las contraseñas, gpasswdtambién se puede usar para administrar la membresía de un grupo. No se requiere una contraseña de grupo si es root o administrador de grupo.
Lekensteyn

¿Leíste el manual de gpasswd? Para Fedora / RHEL / CentOS, si lee el manual, se indica que el comando "se usa para administrar / etc / group y / etc / gshadow". En realidad no tiene ningún efecto en / etc / passwd. El manual también establece que "las contraseñas de grupo son un problema de seguridad inherente, ya que a más de una persona se le permite conocer la contraseña". En realidad no administra la membresía de un grupo, abre el grupo a CUALQUIER usuario con la contraseña. No se requiere una contraseña de grupo si ya es MIEMBRO del grupo.
Stephen

Estrechamente relacionado estaba en el sentido de nombres y propósitos similares, no implicaba que el archivo / etc / passwd sea realmente administrado por gpasswd. Tenga en cuenta que la "página de manual" en mi primer comentario apunta a la página de manual de gpasswd para Fedora 13. Al usar gpasswd $grouppuede establecer la contraseña del grupo que causa el problema de seguridad que mencionó. Sin embargo también puede no tener una contraseña y utilizar gpasswd -d $user $grouppara eliminar un usuario como se describe en el primer comentario y respuesta aceptada. Tenga en cuenta que este comando no solicita una contraseña de grupo ni la modifica ni la requiere.
Lekensteyn

0

Suponga que username = student y groupname = research , por lo tanto, para eliminar al studentusuario del researchgrupo, debe hacer lo siguiente:

gpasswd -d student research

¿Por qué repetir algo, que estuvo aquí 6 años antes? ¡Está marcado como respuesta aceptada!
Betlista

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

Una solución si está utilizando CSH, por cualquier razón.


-1

Para eliminar a un usuario de un grupo, gpasswd es la mejor utilidad para esta IMO.

Ejemplo de comando:

sudo gpasswd -d group user

* Información de ayuda *

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
Los argumentos de grupo y usuario se intercambian. Además, esto es exactamente lo que propuso la respuesta aceptada, ¿esta publicación no es realmente útil?
Lekensteyn el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.