Contenido del artículo
- 1 Crear usuario en linux
- 1.1 Opciones del comando useradd
- 1.2 Creación de un usuario linux básico
- 1.3 Crear usuario linux especificando contraseña y directorio home por defecto
- 1.4 Crear usuario linux especificando shell y creación de directorio por defecto
- 1.5 Crear usuario linux especificando comentarios
- 1.6 Crear usuario temporal en linux
- 2 Borrar usuario en Linux
- 3 Modificar un usuario en linux.
- 4 Crear grupo de usuarios
- 5 Modificar grupo de usuarios
- 6 Borrar grupo de usuarios
Vamos a ver las tres cuestiones más básicas de la administración de usuarios:
useradd
Crear usuariouserdel
Borrar usuariousermod
Modificar usuario
Crear usuario en linux
useradd
es el comando utilizado por linux para crear un usuario. También podría utilizarse el comando AddUser
como alternativa. La diferencia entre uno y otro, es que el comando useradd
es el comando nativo de linux para este propósito mientras que el comando AddUser
es un script perl que hace uso del comando useradd
.
La creación de un usuario en Linux afecta básicamente a tres ficheros que ya hemos visto en el post sobre el sistema de usuarios linux:
- /etc/passwd
- /etc/group
- /etc/shadow
Opciones del comando useradd
En la siguiente tabla, muestro algunas de las opciones más interesantes de este comando. Debemos de tener en cuenta que estas opciones pueden utilizar valores por defecto en caso de no ser especificados. Estos valores por defecto los tendremos en /etc/login.defs
y /etc/default/useradd
PARÁMETRO | FUNCIÓN |
---|---|
-c | Añade comentarios al usuario |
-d | El usuario será creado usando el valor HOME_DIR como valor para el directorio por defecto tras el login |
-e | Fecha en la que el usuario será deshabiliado |
-g | Asigna el grupo principal al usuario conforme al GID que especifiquemos. Si no se especifica y la variable USERGROUPS_ENAB está habilitada en /etc/login.defs, se creará un grupo automáticamente con el mismo nombre que el usuario |
-G | Lista de grupos secundarios al que pertenecerá el nuevo usuario. Separada por «,». |
-k | Especifica el esqueleto del directorio home del usuario. Si no se especifica, se aplica la configuración por defecto definida en la variable SKEL en /etc/default/useradd o por defecto el contenido de /etc/skel |
-m | Crea el home del usuario si no existe y añade el esqueleto conforme a las especificaciónes por defecto o conforme al parámetro -k |
-M | No crea el home del usuario aunque así este especificado en la variable CREATE_HOME de /etc/login.defs |
-N | No crea un grupo para el usuario aunque así esté especificado en la variable USERGROUPS_ENAB de /etc/login.defs |
-p | Especifica la contraseña del usuario. Si no se especifica, el usuario será creado sin contraseña |
-r | Crea el usuario como cuenta de sistema, con las especificaciones propias de ese tipo de usuario |
-s | Especifica el tipo de shell que tendrá el usuario por defecto |
-u | Especifica el valor del UID del usuario creado |
-U | Crea un grupo con el mismo nombre que el usuario y asigna el grupo al usuario |
Creación de un usuario linux básico
Vamos a ver mediante la creación de un usuario sin especificar muchas opciones, cual es el comportamiento del comando por defecto.
Primero vamos a ver cuales son las especificaciones que tenemos como punto de partida en los archivos de configuración por defecto:
- /etc/login.defs
- /etc/default/useradd
- /etc/skel
Contenido de las variables más relevantes de login.defs en materia de creación de usuarios:
root@monitor# cat /etc/login.defs # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 # # Min/max values for automatic uid selection in useradd # UID_MIN 1000 UID_MAX 60000 # # Min/max values for automatic gid selection in groupadd # GID_MIN 1000 GID_MAX 60000 DEFAULT_HOME yes USERGROUPS_ENAB yes
Contenido de las variables más relevantes de /etc/default/useradd:
root@monitor# cat /etc/default/useradd # Default values for useradd(8) SHELL=/bin/sh # GROUP=100 # HOME=/home # INACTIVE=-1 # EXPIRE= # SKEL=/etc/skel # CREATE_MAIL_SPOOL=yes
Contenido del directorio /etc/skel:
root@monitor skel# ls -lha total 20K drwxr-xr-x 2 root root 4,0K mar 11 16:54 . drwxr-xr-x 73 root root 4,0K mar 14 10:45 .. -rw-r--r-- 1 root root 220 may 15 2017 .bash_logout -rw-r--r-- 1 root root 3,5K may 15 2017 .bashrc -rw-r--r-- 1 root root 675 may 15 2017 .profile
Creamos el usuario «usrdemo» y verificamos con antelación el contenido de los ficheros /etc/passwd, /etc/shadow, /etc/group. Lo podemos hacer con los siguientes comandos y veremos que no arrojan ningún resultado por no hay contenido que se corresponda con el filtro:
# cat /etc/passwd | grep usrdemo # # cat /etc/shadow | grep usrdemo # # cat /etc/group | grep usrdemo
Utilizamos el comado useradd usrdemo
y comprobamos que:
- Se ha creado un grupo con el nombre del usuario con GID 1001
- Se ha creado una entrada en shadow para almacenar una contraseña que no ha sido definida (Ver contenido de segundo campo «!»)
- Se ha creado un usuario con su propio grupo asignado
- Ha sido creado sin directorio home
# useradd usrdemo # cat /etc/passwd | grep usrdemo usrdemo:x:1001:1001::/home/usrdemo: # cat /etc/shadow | grep usrdemo usrdemo:!:17969:0:99999:7::: # cat /etc/group | grep usrdemo usrdemo:x:1001: # cd /home/usrdemo bash: cd: /home/usrdemo: No existe el fichero o el directorio
Crear usuario linux especificando contraseña y directorio home por defecto
Introducimos el comando useradd -p temporal -m usrdemo
y vemos los resultados. Observamos que:
- Se han creado los grupos, el usuario y el directorio home con el contenido de la estructura SKEL.
- ¡La contraseña de usuario no está encriptada!
- No tiene una shell asignada por defecto. Esto es un bug conocido pendiente de resolver.
# useradd usrdemo -p temporal -m # cat /etc/passwd | grep usrdemo usrdemo:x:1001:1001::/home/usrdemo: # cat /etc/shadow | grep usrdemo usrdemo:temporal:17969:0:99999:7::: # cat /etc/group | grep usrdemo usrdemo:x:1001: # cd /home/usrdemo # ls -lha total 20K drwxr-xr-x 2 usrdemo usrdemo 4,0K mar 14 12:15 . drwxr-xr-x 5 root root 4,0K mar 14 12:15 .. -rw-r--r-- 1 usrdemo usrdemo 220 may 15 2017 .bash_logout -rw-r--r-- 1 usrdemo usrdemo 3,5K may 15 2017 .bashrc -rw-r--r-- 1 usrdemo usrdemo 675 may 15 2017 .profile
La opción -p de useradd, es una entrada de texto plano. No encripta automáticamente la cadena que hayas introducido. Por eso es mejor crear el usuario sin contraseña y posteriormente asignársela mediante el comando passwd
# passwd usrdemo Introduzca la nueva contraseña de UNIX: Vuelva a escribir la nueva contraseña de UNIX: passwd: contraseña actualizada correctamente # # cat /etc/shadow | grep usrdemo usrdemo:$6$B8NtEtd7$vHn1L859PbkQVNoVSG71FtrZRye0E7r5jWoXdOC.ogmgGZR5ohxP6oE6BI9DqsJPeYOFUP53PeZ5aBP1JXrLu/:17969:0:99999:7:::
Crear usuario linux especificando shell y creación de directorio por defecto
# useradd usrdemo -m -s /bin/sh # cat /etc/passwd | grep usrdemo usrdemo:x:1001:1001::/home/usrdemo:/bin/sh # cat /etc/shadow | grep usrdemo usrdemo:!:17969:0:99999:7::: # cat /etc/group | grep usrdemo usrdemo:x:1001: # passwd usrdemo Introduzca la nueva contraseña de UNIX: Vuelva a escribir la nueva contraseña de UNIX: passwd: contraseña actualizada correctamente # # cat /etc/shadow | grep usrdemo usrdemo:$6$ynSYyfu2$p0WPdWhWb52q9DF11hU5gO5aPcSCS4hXEGjIyhlS1jeXKImgAIr6kByqOXtkfyNuPf6djntBvlT1PnhnrnZB.1:17969:0:99999:7::: # # cd /home/usrdemo/ # ls -lha total 20K drwxr-xr-x 2 usrdemo usrdemo 4,0K mar 14 12:51 . drwxr-xr-x 5 root root 4,0K mar 14 12:51 .. -rw-r--r-- 1 usrdemo usrdemo 220 may 15 2017 .bash_logout -rw-r--r-- 1 usrdemo usrdemo 3,5K may 15 2017 .bashrc -rw-r--r-- 1 usrdemo usrdemo 675 may 15 2017 .profile
Crear usuario linux especificando comentarios
Cuidado con introducir acentos en esta descripción!
# useradd -m -s /bin/bash -c "Usuario para demostracion" usrdemo # # cat /etc/passwd | grep usrdemo usrdemo:x:1001:1001:Usuario para demostracion:/home/usrdemo:/bin/bash
Crear usuario temporal en linux
Utilizaremos la opción -e para especificar con el formato YYYYMMDD la fecha en la que el usuario será deshabilitado
# useradd -m -s /bin/bash -c "Usuario para demostracion" -e 20190315 usrdemo # # cat /etc/passwd | grep usrdemo usrdemo:x:1001:1001:Usuario para demostracion:/home/usrdemo:/bin/bash # cat /etc/shadow | grep usrdemo usrdemo:!:17969:0:99999:7::20190315:
Borrar usuario en Linux
Para borrar un usuario utilizaremos el comando userdel
que dispone de las siguientes opciones:
Opciones del comando userdel
PARÁMETRO | FUNCIÓN |
---|---|
-f | Fuerza el borrado de todos los archivos del usuario |
-r | Elimina el directorio personal del usuario y su buzón de correo |
-Z | Borra cualquier mapeo del usuario SELinux |
# cd /home/usrdemo/ # pwd /home/usrdemo # cd / # # userdel -r usrdemo userdel: usrdemo mail spool (/var/mail/usrdemo) not found # # cd /home/usrdemo bash: cd: /home/usrdemo: No existe el fichero o el directorio root@monitor > /# cat /etc/passwd | grep usrdemo
Modificar un usuario en linux.
Para modificar un usuario utilizaremos el comando usermod
que dispone de las siguientes opciones básicas:
Opciones del comando usermod
PARÁMETRO | FUNCIÓN |
---|---|
-c | Nuevo valor del campo de comentarios |
-d | Nuevo directorio home del usuario |
-e | Nueva fecha de caducidad del usuario |
-f | Establece el tiempo de inactividad después de que caduque la cuenta |
-g | Nuevo grupo (GID) asignado al usuario |
-G | Redefine la lista de Grupos a los que pertenece el usuario |
-l | Redefine el nombre del usuario |
-L | Bloquea la cuenta del usuario |
-m | Mueve los contenidos del directorio home al nuevo directorio home (Usar con la opción -d) |
-p | Redefine el password del usuario |
-s | Redefine la shell por defecto para el usuario |
-u | Fuerza el uso de un nuevo UID para la cuenta |
-U | Desbloquea la cuenta del usuario |
-v | Añade un rango de UIDs subordinados al usuario |
-V | Elimina un rango de UIDs subordinados al usuario |
-w | Añade un rango de GIDs subordinados al usuario |
-W | Elimina un rango de GIDs subordinados al usuario |
Cambiar el login de un usuario linux
En algún momento podríamos tener la necesidad de modificar el nombre de login de un usuario por lo que usaremos la opción -l
para indicar el nuevo nombre. Tal y como vemos en el ejemplo, podemos observar algunas cosas a tener en cuenta:
- El nombre de login del usuario ha cambiado
- El nombre del grupo del usuario NO ha cambiado
- La entrada en /shadow de la contraseña NO ha desaparecido por lo que se conserva
# cat /etc/passwd | grep usrdemo usrdemo:x:1001:1001::/home/usrdemo:/bin/bash # # cat /etc/shadow | grep usrdemo usrdemo:!:17969:0:99999:7::: # # cat /etc/group | grep usrdemo usrdemo:x:1001: # # usermod usrdemo -l usuariodemo # # cat /etc/passwd | grep usrdemo usuariodemo:x:1001:1001::/home/usrdemo:/bin/bash # # cat /etc/shadow | grep usariodemo usuariodemo:!:17969:0:99999:7::: # # cat /etc/group | grep usrdemo usrdemo:x:1001:
Cambiar el directorio home de un usuario linux
Podría darse la necesidad de reestructurar nuestro disco y por alguna razón tener que cambiar a los usuarios de directorio home. Para realizar esta acción, utilizaremos las opciones -d
y -m
Estas dos opciones van juntas porque como hemos visto, una de ellas sirve para crear el nuevo home y la otra para mover el contenido del antiguo home al nuevo.
Siguiendo el ejemplo de cambio usrdemo a usuariodemo, ahora vemos como el cambio de directorio home se ha realizado y el movimiento del contenido de los archivos también.
# cat /etc/passwd | grep usrdemo usuariodemo:x:1001:1001::/home/usrdemo:/bin/bash # # usermod -d /home/usuariodemo -m usuariodemo # # cd /home/usrdemo bash: cd: /home/usrdemo: No existe el fichero o el directorio # cd /home/usuariodemo/ # # ls -lh total 0 -rw-r--r-- 1 root root 0 mar 14 17:21 archivo.txt
Crear grupo de usuarios
Para la creación de grupos de usuario, utilizaremos el comando groupadd
Opciones del comando groupadd
PARÁMETRO | FUNCIÓN |
---|---|
-f | Fuerza el parámetro -g salvo que el GID ya esté en uso |
-g | Indica el nuevo GID del grupo |
-o | Permite crear grupos con GID no único |
-p | Define una contraseña para el grupo |
-s | Crea un grupo de sistema |
Procedemos a la creación del grupo «ventas» asignándole un GID y una contraseña. Como podemos observar, se ha creado con el GID especificado y con la contraseña sin encriptar, tal y como sucedía anteriormente con las contraseñas de usuarios.
# groupadd ventas -g 1020 -p temporal # cat /etc/group | grep ventas ventas:x:1020: # cat /etc/gshadow | grep ventas ventas:temporal::
También debemos tener en cuenta que la asignación de GID / UID es autoincremental del GID / UID más alto que figure en el sistema respectivamente. Esto quiere decir que podemos desperdiciar GID / UID si lo forzamos en el momento de la creación y asignamos un número muy alto.
Forzar los GID / UID implica tener un mayor control al margen del sistema de los ID que se van asignando.
Modificar grupo de usuarios
Para la modificación de grupos de usuario, utilizaremos el comando groupmod
Opciones del comando groupmod
PARÁMETRO | FUNCIÓN |
---|---|
-g | Cambia el GID del grupo |
-n | Cambia el nombre del grupo |
-o | Permite utilizar un GID duplicado |
-p | Modifica la contraseña del grupo |
Como la contraseña del grupo no está cifrada, lo primero que vamos a hacer es volver a crear la contraseña del grupo de usuarios linux mediante el comando gpasswd
# cat /etc/gshadow | grep ventas ventas:temporal:: # gpasswd ventas Cambiando la contraseña para el grupo ventas Nueva contraseña: Vuelva a introducir la nueva contraseña: # # cat /etc/gshadow | grep ventas ventas:$6$ud.FL/LT5IWflR$hOivgcsOdsRPv97TUJOSGcnD0nUTov129VVcQPY0RtPOHVnFHwHQEiKsfBPQr68q1Bu.zFFz/zy5VB5YOcibe0::
Cambiar el nombre del grupo linux
# groupmod ventas -n comercial # cat /etc/group | grep comercial comercial:x:1020: # cat /etc/gshadow | grep comercial comercial:$6$ud.FL/LT5IWflR$hOivgcsOdsRPv97TUJOSGcnD0nUTov129VVcQPY0RtPOHVnFHwHQEiKsfBPQr68q1Bu.zFFz/zy5VB5YOcibe0::
Cambiar el GID del grupo de usuarios linux
# cat /etc/group | grep comercial comercial:x:1020: # groupmod comercial -g 1001 # # cat /etc/group | grep comercial comercial:x:1001:
Borrar grupo de usuarios
Para la eliminación de grupos de usuario, utilizaremos el comando groupdel
Opciones del comando groupdel
PARÁMETRO | FUNCIÓN |
---|---|
-f | Borra el grupo aunque sea el grupo primario de un usuario |
# groupdel comercial # cat /etc/group | grep comercial # cat /etc/gshadow | grep comercial