COMANDOS PARA LA GESTION DE
USUARIOS Y GRUPOS EN LINUX
Introducción a usuarios Linux
whoami
El comando whoami te dice tu nombre de usuario.
[paul@centos8 ~]$ whoami
paul
[paul@centos8 ~]$
who
El comando who te da información de quién está conectado al sistema.
[paul@centos8 ~]$ who
root pts/0 2014-10-10 23:07 (10.104.33.101)
paul pts/1 2014-10-10 23:30 (10.104.33.101)
laura pts/2 2014-10-10 23:34 (10.104.33.96)
tania pts/3 2014-10-10 23:39 (10.104.33.91)
[paul@centos8 ~]$
who am i
Con who am i el comando who mostrará solo la línea que apunta a su sesión actual.
[paul@centos8 ~]$ who am i
paul pts/1 2014-10-10 23:30 (10.104.33.101)
[paul@centos8 ~]$
w
El comando w te muestra quién está conectado y qué está haciendo.
[paul@centos8 ~]$ w
23:34:07 up 31 min, 2 users, load average: 0.00, 0.01, 0.02
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 23:07 15.00s 0.01s 0.01s top
paul pts/1 23:30 7.00s 0.00s 0.00s w
[paul@centos8 ~]$
id
El comando id le dará su identificación de usuario, la identificación del grupo principal y
una lista de los grupos a los que pertenece.
[root@centos8 ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su para otro usuario
El comando su permite que un usuario ejecute un shell como otro usuario.
laura@debian7:~$ su tania
Password:
tania@debian7:/home/laura$
su para root
Sí, también puede hacer su para convertirse en root, cuando conoce la contraseña de
root.
laura@debian7:~$ su root
Password:
root@debian7:/home/laura#
su como root
Debe conocer la contraseña del usuario que desea sustituir, a menos que haya iniciado
sesión como root. El usuario root puede convertirse en cualquier usuario existente sin
conocer la contraseña de ese usuario.
root@debian7:~# id
uid=0(root) gid=0(root) groups=0(root)
root@debian7:~# su - valentina
valentina@debian7:~$
su -
Cuando no se proporciona ningún nombre de usuario a su o su -, el comando asumirá
que root es el objetivo.
tania@debian7:~$ su -
Password:
root@debian7:~#
Gestión de usuarios
/etc/passwd
La base de datos de usuarios locales en Linux (y en la mayoría de Unixes) es /etc/passwd.
[root@RHEL5 ~]# tail /etc/passwd
inge:x:518:524:art dealer:/home/inge:/bin/ksh
ann:x:519:525:flute player:/home/ann:/bin/bash
frederik:x:520:526:rubius poet:/home/frederik:/bin/bash
steven:x:521:527:roman emperor:/home/steven:/bin/bash
pascale:x:522:528:artist:/home/pascale:/bin/ksh
geert:x:524:530:kernel developer:/home/geert:/bin/bash
wim:x:525:531:master damuti:/home/wim:/bin/bash
sandra:x:526:532:radish stresser:/home/sandra:/bin/bash
annelies:x:527:533:sword fighter:/home/annelies:/bin/bash
laura:x:528:534:art dealer:/home/laura:/bin/ksh
Como puede ver, este archivo contiene siete columnas separadas por dos puntos. Las
columnas contienen el nombre de usuario, una x, la identificación del usuario, la
identificación del grupo principal, una descripción, el nombre del directorio de inicio y
el shell de inicio de sesión.
root
El usuario root, también llamado superusuario, es la cuenta más poderosa en su sistema
Linux. Este usuario puede hacer casi cualquier cosa, incluida la creación de otros
usuarios. El usuario root siempre tiene ID de usuario 0 (independientemente del nombre
de la cuenta).
[root@RHEL5 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
useradd
Puede agregar usuarios con el comando useradd. El siguiente ejemplo muestra cómo
agregar un usuario llamado yanina (último parámetro) y al mismo tiempo forzar la
creación del directorio de inicio (-m), establecer el nombre del directorio de inicio (-d) y
establecer una descripción (-c).
[root@RHEL5 ~]# useradd -m -d /home/yanina -c "yanina wickmayer" yanina
[root@RHEL5 ~]# tail -1 /etc/passwd
yanina:x:529:529:yanina wickmayer:/home/yanina:/bin/bash
El usuario llamado yanina recibió el ID de usuario 529 y el ID de grupo principal 529.
/etc/default/useradd
Tanto Red Hat Enterprise Linux como Debian/Ubuntu tienen un archivo llamado
/etc/default/useradd que contiene algunas opciones de usuario predeterminadas.
Además de usar cat para mostrar este archivo, también puede usar useradd -D.
[root@RHEL4 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
userdel
Puede eliminar el usuario yanina con userdel. La opción -r de userdel también eliminará
el directorio de inicio.
[root@RHEL5 ~]# userdel -r yanina
usermod
Puede modificar las propiedades de un usuario con el comando usermod. En este
ejemplo se utiliza usermod para cambiar la descripción del usuario harry.
[root@RHEL4 ~]# tail -1 /etc/passwd
harry:x:516:520:harry potter:/home/harry:/bin/bash
[root@RHEL4 ~]# usermod -c 'wizard' harry
[root@RHEL4 ~]# tail -1 /etc/passwd
harry:x:516:520:wizard:/home/harry:/bin/bash
creando directorios /home
La forma más fácil de crear un directorio de inicio es proporcionar la opción -m con
useradd (es probablemente establecido como una opción predeterminada en Linux).
Una forma menos fácil es crear un directorio de inicio manualmente con mkdir, lo que
también requiere configurar el propietario y los permisos en el directorio con chmod y
chown.
[root@RHEL5 ~]# mkdir /home/laura
[root@RHEL5 ~]# chown laura:laura /home/laura
[root@RHEL5 ~]# chmod 700 /home/laura
[root@RHEL5 ~]# ls -ld /home/laura/
drwx------ 2 laura laura 4096 Jun 24 15:17 /home/laura/
/etc/skel/
Cuando se utiliza useradd la opción -m, el directorio /etc/skel/ se copia en el directorio
de inicio recién creado. El directorio /etc/skel/ contiene algunos archivos (normalmente
ocultos) que contienen la configuración del perfil y los valores predeterminados para las
aplicaciones. De esta manera /etc/skel/ sirve como directorio de inicio predeterminado
y como perfil de usuario predeterminado.
[root@RHEL5 ~]# ls -la /etc/skel/
total 48
drwxr-xr-x 2 root root 4096 Apr 1 00:11 .
drwxr-xr-x 97 root root 12288 Jun 24 15:36 ..
-rw-r--r-- 1 root root 24 Jul 12 2006 .bash_logout
-rw-r--r-- 1 root root 176 Jul 12 2006 .bash_profile
-rw-r--r-- 1 root root 124 Jul 12 2006 .bashrc
Eliminando directorios /home
La opción -r de userdel se asegurará de que el directorio de inicio se elimine junto con
la cuenta de usuario.
[root@RHEL5 ~]# ls -ld /home/wim/
drwx------ 2 wim wim 4096 Jun 24 15:19 /home/wim/
[root@RHEL5 ~]# userdel -r wim
[root@RHEL5 ~]# ls -ld /home/wim/
ls: /home/wim/: No such file or directory
iniciando shell
El archivo /etc/passwd especifica el inicio se sesión shell para el usuario. En la siguiente
captura de pantalla puede ver que los usuarios annelies iniciarán sesión con el shell
/bin/bash, y el usuario laura con el shell /bin/ksh.
[root@RHEL5 ~]# tail -2 /etc/passwd
annelies:x:527:533:sword fighter:/home/annelies:/bin/bash
laura:x:528:534:art dealer:/home/laura:/bin/ksh
You can use the usermod command to change the shell for a user.
[root@RHEL5 ~]# usermod -s /bin/bash laura
[root@RHEL5 ~]# tail -1 /etc/passwd
laura:x:528:534:art dealer:/home/laura:/bin/bash
Contraseñas de usuarios
passwd
Las contraseñas de los usuarios se pueden establecer con el comando passwd. Los
usuarios deberán proporcionar su contraseña anterior antes de ingresar dos veces la
nueva.
[tania@centos8 ~]$ passwd
Changing password for user tania.
Changing password for tania.
(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 8 characters
New password:
BAD PASSWORD: The password is a palindrome
New password:
BAD PASSWORD: The password is too similar to the old one
passwd: Have exhausted maximum number of retries for service
Como puede ver, la herramienta passwd hará una verificación básica para evitar que los
usuarios usen contraseñas demasiado simples. El usuario root no tiene que seguir estas
reglas (aunque habrá una advertencia). El usuario root tampoco tiene que proporcionar
la contraseña anterior antes de introducir la nueva contraseña dos veces.
root@debian7:~# passwd tania
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
archivo shadow
Las contraseñas de usuario se cifran y se mantienen en /etc/shadow. El archivo
/etc/shadow es de sólo lectura y sólo puede ser leído por root. Sin embargo, también es
posible que los usuarios cambien su contraseña. Por ahora, tendrá que saber que los
usuarios pueden cambiar su contraseña con el comando /usr/bin/passwd.
[root@centos8 ~]# tail -4 /etc/shadow
paul:$6$ikp2Xta5BT.Tml.p$2TZjNnOYNNQKpwLJqoGJbVsZG5/Fti8ovBRd.VzRbiDSl7TEq\
IaSMH.TeBKnTS/SjlMruW8qffC0JNORW.BTW1:16338:0:99999:7:::
tania:$6$8Z/zovxj$9qvoqT8i9KIrmN.k4EQwAF5ryz5yzNwEvYjAa9L5XVXQu.z4DlpvMREH\
eQpQzvRnqFdKkVj17H5ST.c79HDZw0:16356:0:99999:7:::
laura:$6$glDuTY5e$/NYYWLxfHgZFWeoujaXSMcR.Mz.lGOxtcxFocFVJNb98nbTPhWFXfKWG\
SyYh1WCv6763Wq54.w24Yr3uAZBOm/:16356:0:99999:7:::
valentina:$6$jrZa6PVI$1uQgqR6En9mZB6mKJ3LXRB4CnFko6LRhbh.v4iqUk9MVreui1lv7\
GxHOUDSKA0N55ZRNhGHa6T2ouFnVno/0o1:16356:0:99999:7:::
[root@centos8 ~]#
El archivo / etc/shadow contiene nueve columnas separadas por dos puntos. Los nueve
campos contienen (de izquierda a derecha) el nombre de usuario, la contraseña cifrada
(tenga en cuenta que solo inge y laura tienen una contraseña cifrada), el día en que se
cambió la contraseña por última vez (el día 1 es el 1 de enero de 1970), el número de
días que la contraseña debe dejarse sin cambios, el día de caducidad de la contraseña,
el número de días de advertencia antes de la caducidad de la contraseña, número de
días después del vencimiento antes de deshabilitar la cuenta y el día en que se
deshabilitó la cuenta (nuevamente, desde 1970). El último campo aún no tiene
significado. Todas las contraseñas en la captura de pantalla anterior son hashes de
hunter2.
cifrado de contraseña con passwd
Las contraseñas se almacenan en un formato cifrado. Este cifrado se realiza mediante la
función crypt. La forma más fácil (y recomendada) de agregar un usuario con una
contraseña al sistema es agregar el usuario con el comando useradd -m user y, a
continuación, establecer la contraseña del usuario con passwd.
[root@RHEL4 ~]# useradd -m xavier
[root@RHEL4 ~]# passwd xavier
Changing password for user xavier.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@RHEL4 ~]#
cifrado de contraseña con openssl
Otra forma de crear usuarios con una contraseña es usar la opción -p de useradd, pero
que
requiere una contraseña cifrada. Puede generar esta contraseña cifrada con el comando
openssl passwd. El comando openssl passwd generará varios hashes distintos para la
misma contraseña, para ello utiliza salt.
paul@rhel65:~$ openssl passwd hunter2
86jcUNlnGDFpY
paul@rhel65:~$ openssl passwd hunter2
Yj7mDO9OAnvq6
paul@rhel65:~$ openssl passwd hunter2
YqDcJeGoDbzKA
paul@rhel65:~$
Este salt se puede elegir y es visible como los dos primeros caracteres del hash.
paul@rhel65:~$ openssl passwd -salt 42 hunter2
42ZrbtP1Ze8G.
paul@rhel65:~$ openssl passwd -salt 42 hunter2
42ZrbtP1Ze8G.
paul@rhel65:~$ openssl passwd -salt 42 hunter2
42ZrbtP1Ze8G.
paul@rhel65:~$
En este ejemplo se muestra cómo crear un usuario con contraseña.
root@rhel65:~# useradd -m -p $(openssl passwd hunter2) mohamed
¡Tenga en cuenta que este comando pone la contraseña en su historial de comandos!
chage
El comando chage se puede utilizar para establecer una fecha de caducidad para una
cuenta de usuario (-E), establecer una antigüedad mínima (-m) y máxima (-M) de la
contraseña, una fecha de caducidad de la contraseña y establezca el número de días de
advertencia antes de la fecha de caducidad de la contraseña. Gran parte de esta
funcionalidad también está disponible desde el comando passwd. La opción -l de chage
mostrará esta configuración para un usuario.
root@rhel65:~# chage -l paul
Last password change : Mar 27, 2014
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
root@rhel65:~#
deshabilitando una contraseña
Las contraseñas en /etc/shadow no pueden comenzar con un signo de exclamación.
Cuando el segundo campo en /etc/passwd comienza con un signo de exclamación,
entonces no se puede usar la contraseña.
El uso de esta característica a menudo se denomina bloquear, deshabilitar o suspender
una cuenta de usuario. Además de vi (o vipw) también puedes lograr esto con usermod.
El primer comando en la siguiente captura de pantalla mostrará la contraseña hash de
laura en /etc/shadow. El siguiente comando deshabilita la contraseña de laura, lo que
hace imposible que Laura se autentique usando esta contraseña.
root@debian7:~# grep laura /etc/shadow | cut -c1-70
laura:$6$JYj4JZqp$stwwWACp3OtE1R2aZuE87j.nbW.puDkNUYVk7mCHfCVMa3CoDUJV
root@debian7:~# usermod -L laura
Como puede ver a continuación, el hash de la contraseña simplemente está precedido
por un signo de exclamación.
root@debian7:~# grep laura /etc/shadow | cut -c1-70
laura:!$6$JYj4JZqp$stwwWACp3OtE1R2aZuE87j.nbW.puDkNUYVk7mCHfCVMa3CoDUJ
root@debian7:~#
El usuario root (y los usuarios con derechos sudo en su) aún podrán ingresar a la cuenta
de laura (porque la contraseña no es necesaria aquí). ¡También tenga en cuenta que
Laura aún podrá iniciar sesión si ha configurado ssh sin contraseña!
root@debian7:~# su - laura
laura@debian7:~$
Puedes desbloquear la cuenta de nuevo con usermod -U.
root@debian7:~# usermod -U laura
root@debian7:~# grep laura /etc/shadow | cut -c1-70
laura:$6$JYj4JZqp$stwwWACp3OtE1R2aZuE87j.nbW.puDkNUYVk7mCHfCVMa3CoDUJV
Tenga cuidado con las pequeñas diferencias en las opciones de línea de comandos de
passwd, usermod y useradd en diferentes distribuciones de Linux. Verifique los archivos
locales cuando use características como "deshabilitar, suspender o bloquear" las
cuentas de usuario y sus contraseñas.
editando archivos locales
Si aún desea editar manualmente /etc/passwd o /etc/shadow, después de conocer
estos para la administración de contraseñas, entonces use vipw en lugar de vi (m)
directamente. La herramienta vipw hará el bloqueo adecuado del archivo.
[root@RHEL5 ~]# vipw /etc/passwd
vipw: the password file is busy (/etc/ptmp present)
Gestión de grupos
groupadd
Los grupos se pueden crear con el comando groupadd . El siguiente ejemplo muestra la
creación de cinco grupos (vacíos).
root@laika:~# groupadd tennis
root@laika:~# groupadd football
root@laika:~# groupadd snooker
root@laika:~# groupadd formula1
root@laika:~# groupadd salsa
group file
Los usuarios pueden ser miembros de varios grupos. La pertenencia al grupo se define
mediante el archivo / etc/group .
root@laika:~# tail -5 /etc/group
tennis:x:1006:
football:x:1007:
snooker:x:1008:
formula1:x:1009:
salsa:x:1010:
root@laika:~#
El primer campo es el nombre del grupo. El segundo campo es la contraseña (cifrada)
del grupo (puede estar vacía). El tercer campo es la identificación del grupo o GID. El
cuarto campo es la lista de miembros, estos grupos no tienen miembros.
groups
Un usuario puede escribir el comando groups para ver una lista de grupos a los que
pertenece el usuario.
[harry@RHEL4b ~]$ groups
harry sports
[harry@RHEL4b ~]$
usermod
La pertenencia a grupos se puede modificar con el comando useradd o usermod .
root@laika:~# usermod -a -G tennis inge
root@laika:~# usermod -a -G tennis katrien
root@laika:~# usermod -a -G salsa katrien
root@laika:~# usermod -a -G snooker sandra
root@laika:~# usermod -a -G formula1 annelies
root@laika:~# tail -5 /etc/group
tennis:x:1006:inge,katrien
football:x:1007:
snooker:x:1008:sandra
formula1:x:1009:annelies
salsa:x:1010:katrien
root@laika:~#
Tenga cuidado al usar usermod para agregar usuarios a grupos. De forma
predeterminada, el comando usermod eliminará al usuario de cada grupo del que es
miembro si el grupo no aparece en el comando. El uso del modificador -a (anexar) evita
este comportamiento.
groupmod
Puede cambiar el nombre del grupo con el comando groupmod .
root@laika:~# groupmod -n darts snooker
root@laika:~# tail -5 /etc/group
tennis:x:1006:inge,katrien
football:x:1007:
formula1:x:1009:annelies
salsa:x:1010:katrien
darts:x:1008:sandra
groupdel
Puede eliminar permanentemente un grupo con el comando groupdel .
root@laika:~# groupdel tennis
root@laika:~#
Puede delegar el control de la pertenencia a grupos a otro usuario con el comando
gpasswd . En el siguiente ejemplo, delegamos permisos para agregar y eliminar
miembros del grupo a serena para el grupo deportivo. Luego le damos una serena y
agregamos a Harry al grupo deportivo.
[root@RHEL4b ~]# gpasswd -A serena sports
[root@RHEL4b ~]# su - serena
[serena@RHEL4b ~]$ id harry
uid=516(harry) gid=520(harry) groups=520(harry)
[serena@RHEL4b ~]$ gpasswd -a harry sports
Adding user harry to group sports
[serena@RHEL4b ~]$ id harry
uid=516(harry) gid=520(harry) groups=520(harry),522(sports)
[serena@RHEL4b ~]$ tail -1 /etc/group
sports:x:522:serena,venus,harry
[serena@RHEL4b ~]$
Los administradores de grupo no tienen que ser miembros del grupo. Pueden eliminarse
a sí mismos de un grupo, pero esto no influye en su capacidad para agregar o eliminar
miembros.
[serena@RHEL4b ~]$ gpasswd -d serena sports
Removing user serena from group sports
[serena@RHEL4b ~]$ exit
La información sobre los administradores de grupo se guarda en el archivo
/etc/gshadow.
[root@RHEL4b ~]# tail -1 /etc/gshadow
sports:!:serena:venus,harry
[root@RHEL4b ~]#
Para quitar todos los administradores de grupo de un grupo, utilice el comando gpasswd
para establecer una lista de administradores vacía.
[root@RHEL4b ~]# gpasswd -A "" sports
newgrp
Puede iniciar un shell secundario con un nuevo grupo primario temporal mediante el
comando newgrp.
root@rhel65:~# mkdir prigroup
root@rhel65:~# cd prigroup/
root@rhel65:~/prigroup# touch standard.txt
root@rhel65:~/prigroup# ls -l
total 0
-rw-r--r--. 1 root root 0 Apr 13 17:49 standard.txt
root@rhel65:~/prigroup# echo $SHLVL
1
root@rhel65:~/prigroup# newgrp tennis
root@rhel65:~/prigroup# echo $SHLVL
2
root@rhel65:~/prigroup# touch newgrp.txt
root@rhel65:~/prigroup# ls -l
total 0
-rw-r--r--. 1 root tennis 0 Apr 13 17:49 newgrp.txt
-rw-r--r--. 1 root root 0 Apr 13 17:49 standard.txt
root@rhel65:~/prigroup# exit
exit
root@rhel65:~/prigroup#