¿Un comando para enumerar todos los usuarios? ¿Y cómo agregar, eliminar, modificar usuarios?

856

Necesito un comando para enumerar todos los usuarios en la terminal. Y cómo agregar, eliminar, modificar usuarios desde la terminal.

Eso podría ayudar a administrar sus cuentas fácilmente por terminal.

nux
fuente
3
respuesta sedsed 's/:.*//' /etc/passwd
Avinash Raj
2
lista de usuarios:awk -F: '{ print $1 }' /etc/passwd
saviour123

Respuestas:

1143

Listar

Para enumerar todos los usuarios locales que puede usar:

cut -d: -f1 /etc/passwd

Para enumerar todos los usuarios capaces de autenticarse (de alguna manera), incluidos los no locales, consulte esta respuesta .

Algunos comandos de administración de usuarios más útiles (también limitados a usuarios locales ):

Para agregar

Para agregar un nuevo usuario puede usar:

sudo adduser new_username

o:

sudo useradd new_username

Ver también: ¿Cuál es la diferencia entre adduser y useradd?

Para eliminar / eliminar

Para eliminar / eliminar un usuario, primero puede usar:

sudo userdel username

Entonces es posible que desee eliminar el directorio de inicio de la cuenta de usuario eliminada:

sudo rm -r / home / nombre de usuario

¡Utilice con precaución el comando anterior!

Modificar

Para modificar el nombre de usuario de un usuario:

usermod -l new_username old_username

Para cambiar la contraseña de un usuario:

sudo passwd username

Para cambiar el shell de un usuario:

sudo chsh username

Para cambiar los detalles de un usuario (por ejemplo, nombre real):

sudo chfn username

Para agregar un usuario al sudogrupo:

adduser username sudo

o

usermod -aG sudo username

Y, por supuesto, consulta: man adduser, man useradd, man userdel... y así sucesivamente.

Radu Rădeanu
fuente
12
Radu olvidó mencionar sudo chfn <username>qué cambios en los detalles del usuario (por ejemplo, nombre real) Intenté agregar esto como un comentario, pero recibí un error al decirme que debo tener una reputación de +50 para hacerlo.
Mikaela
2
Creo que debe subrayarse que la respuesta correcta a la pregunta vinculada es askubuntu.com/a/381646/16395 --- de lo contrario, debe tener en cuenta las políticas de Ubuntu GID / UID a mano. La respuesta aceptada no es tan clara.
Rmano
sudo userdel DOMAIN \\ johndoe me da el error: "userdel: no se puede eliminar la entrada 'DOMAIN \ johndoe' de / etc / passwd - Busqué en / etc / passwd y ni siquiera están allí, probablemente porque es un" dominio "cuenta?
00fruX
1
@ 00fruX Sí ... Si está utilizando una base de datos de usuarios centralizada, tendrá que ocuparse de ella directamente.
Oli
87

Simplemente presione Ctrl+ Alt+ Ten su teclado para abrir Terminal. Cuando se abra, ejecute los siguientes comandos:

cat /etc/passwd

O

less /etc/passwd
more /etc/passwd

También puedes usar awk: awk

awk -F':' '{ print $1}' /etc/passwd
Mitch
fuente
¿Cómo agregar usuarios por comando?
nux
Puede usar el comando useradd .
Mitch
@nux Un poco tarde para la fiesta, pero por el uso de la línea de comandos adduser, useradddebe limitarse a los scripts donde el autor realmente sabe lo que está haciendo.
flindeberg
64

La forma más fácil de obtener este tipo de información es getent: consulte la página de manual paragetentIcono de página de manual ver el comando . Si bien ese comando proporciona el mismo resultado cat /etc/passwdque es útil recordar, porque le dará listas de varios elementos en el sistema operativo.

Para obtener una lista de todos los usuarios que escribe (como los usuarios se enumeran en /etc/passwd)

getent passwd

Para agregar un usuario newuser al sistema, escribiría

sudo adduser newuser

para crear un usuario que tenga todas las configuraciones predeterminadas aplicadas.

Bonus: Para añadir cualquier usuario (por ejemplo anyuser ) a un grupo (por ejemplo, CD-ROM ) escriba

sudo adduser anyuser cdrom

Elimina un usuario (por ejemplo, obsoleto ) con

sudo deluser obsolete

Si también desea eliminar su directorio de inicio / correos, escriba

sudo deluser --remove-home obsolete

Y

sudo deluser --remove-all-files obsolete

eliminará el usuario y todos los archivos de este usuario en todo el sistema.

Guntbert
fuente
8
Es útil recordar que getent no solo imprime la salida de los usuarios en / etc / passwd, sino todos los usuarios en todos los backends de userdb configurados en un sistema dado, ya sea / etc / passwd o LDAP, etc.
Marcin Kaminski
@MarcinKaminski tiene razón, también imprime la configuración de los usuarios en sistemas SSO que tienen acceso al servidor. esta respuesta es la mejor, getent passwdsiendo el comando correcto
ulkas
@MarcinKaminski de todos los backends enumerables de userdb
jrw32982
43

También puedes usar compgen GNU bash incorporado :

compgen -u

Will listará a todos los usuarios.

Ravexina
fuente
2
Más corto y trabajando! Debería ser el aceptado en mi opinión.
Nam G VU
27

Esto debería hacer que, en la mayoría de las situaciones normales , todos los usuarios normales (que no sean del sistema, no sean extraños, etc.):

awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd

Esto funciona por:

  • leyendo desde /etc/passwd
  • utilizando :como delimitador
  • Si el tercer campo (el número de ID de usuario) es mayor que 1000 y no 65534, se imprime el primer campo (el nombre de usuario del usuario).

Esto se debe a que en muchos sistemas Linux, los nombres de usuario superiores a 1000 están reservados para usuarios sin privilegios (se podría decir que son normales). Alguna información sobre esto aquí :

Una identificación de usuario (UID) es un entero positivo único asignado por un sistema operativo tipo Unix a cada usuario. Cada usuario se identifica con el sistema mediante su UID, y los nombres de usuario generalmente se usan solo como una interfaz para humanos.

Los UID se almacenan, junto con sus nombres de usuario correspondientes y otra información específica del usuario, en el archivo / etc / passwd ...

El tercer campo contiene el UID, y el cuarto campo contiene el ID de grupo (GID), que por defecto es igual al UID para todos los usuarios comunes.

En los núcleos Linux 2.4 y superiores, los UID son enteros de 32 bits sin signo que pueden representar valores de cero a 4,294,967,296. Sin embargo, es aconsejable usar valores de hasta 65.534 para mantener la compatibilidad con sistemas que usan núcleos o sistemas de archivos más antiguos que solo pueden acomodar UID de 16 bits.

El UID de 0 tiene una función especial: siempre es la cuenta raíz (es decir, el usuario administrativo omnipotente). Aunque el nombre de usuario se puede cambiar en esta cuenta y se pueden crear cuentas adicionales con el mismo UID, ninguna acción es acertada desde el punto de vista de la seguridad.

El UID 65534 se reserva comúnmente para nadie, un usuario sin privilegios del sistema, a diferencia de un usuario normal (es decir, no privilegiado). Este UID se usa a menudo para personas que acceden al sistema de forma remota a través de FTP (protocolo de transferencia de archivos) o HTTP (protocolo de transferencia de hipertexto).

Los UID 1 a 99 están tradicionalmente reservados para usuarios especiales del sistema (a veces llamados pseudousuarios), como wheel, daemon, lp, operator, news, mail, etc. Estos usuarios son administradores que no necesitan poderes de root totales, pero que realizan algunas tareas administrativas y, por lo tanto, necesitan más privilegios que los otorgados a los usuarios comunes.

Algunas distribuciones de Linux (es decir, versiones) comienzan los UID para usuarios no privilegiados en 100. Otros, como Red Hat, los comienzan en 500, y otros, como Debian, los comienzan en 1000. Debido a las diferencias entre las distribuciones, el manual La intervención puede ser necesaria si se utilizan múltiples distribuciones en una red de una organización.

Además, puede ser conveniente reservar un bloque de UID para usuarios locales, como 1000 a 9999, y otro bloque para usuarios remotos (es decir, usuarios de otras partes de la red), como 10000 a 65534. Lo importante es decidir en un esquema y adherirse a él.

Una de las ventajas de esta práctica de reservar bloques de números para tipos particulares de usuarios es que hace que sea más conveniente buscar en los registros del sistema actividades sospechosas de los usuarios.

Contrariamente a la creencia popular, no es necesario que cada entrada en el campo UID sea única. Sin embargo, los UID no únicos pueden causar problemas de seguridad y, por lo tanto, los UID deben mantenerse únicos en toda la organización. Del mismo modo, se debe evitar el reciclaje de UID de antiguos usuarios durante el mayor tiempo posible.

Wilf
fuente
1
Casi una respuesta perfecta, pero IMO es más limpio de usar en getentlugar de leer directamente /etc/passwdy buscar UID_MIN/ en UID_MAXlugar de codificar los valores:getent passwd | awk -F: "{if (\$3 >= $(awk '/^UID_MIN/ {print $2}' /etc/login.defs) && \$3 <= $(awk '/^UID_MAX/ {print $2}' /etc/login.defs)) print \$1}"
Max Truxa
17

lista de todos los usuarios que pueden iniciar sesión (no hay usuarios del sistema como: bin, deamon, mail, sys, etc.)

awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow

agregar nuevo usuario

sudo adduser new_username

o

sudo useradd new_username

eliminar / eliminar nombre de usuario

sudo userdel username

Si desea eliminar el directorio de inicio (predeterminado el directorio / inicio / nombre de usuario)

sudo deluser --remove-home username

o

sudo rm -r /path/to/user_home_dir

Si desea eliminar todos los archivos del sistema de este usuario (no solo el inicio es obligatorio)

sudo deluser --remove-all-files
Vesteras de Donovan
fuente
1
Quizás deberías explicar la diferencia entre addusery useradd. An también agrega el sudoprefijo al primer comando. El archivo de sombra de contraseña solo se puede leer como root.
s3lph
1
awk -F':' '$2 ~ "\$" {print $1}' /etc/shadowme mostró a todos los usuarios, incluidos bin, daemon, etc. y lanzó esta advertencia: secuencia de escape \$' treated as plain $ 'Encontré esta publicación stackoverflow.com/a/25867768/847954 y agregué una barra invertida más y funcionó bien:awk -F':' '$2 ~ "\\$" {print $1}' /etc/shadow
jeff musk
8

Ok, aquí hay un truco que te ayudará a resolver esto. El terminal tiene finalización automática si escribe user y presiona la tecla Tab dos veces, enumerará todos los comandos que existen con el usuario como los primeros 4 caracteres.

user (tab tab)

me da las opciones posibles useradd userdel usermod users users-admin
si quieres saber más sobre un comando google it o escribe man man useradd da useradd - crea un nuevo usuario o actualiza la información predeterminada del nuevo usuario ...

para enumerar usuarios, debes ir con lo que dijo Mitch

Espero que eso me ayude a amar completar pestañas en bash me evita recordar cosas.

usuario239243
fuente
6

Para averiguar los usuarios que tienen directorios de inicio en la carpeta / home de la máquina, ejecute los siguientes comandos

cd /home
ls 

Luego puede ver los usuarios que tienen autorización para iniciar sesión en el servidor. Si queremos examinar los archivos de cualquier usuario, debe ser el usuario raíz.

anvesh
fuente
8
Esto solo muestra el contenido de /home. Si bien Ubuntu coloca los directorios de usuarios allí de forma predeterminada, no es obligatorio.
David Foerster
ls /hometambién puede contener directorios de usuarios de usuarios eliminados.
Suraj