Por: Carlos A. Leal S.
Basado en: https://www.linuxtotal.com.mx/index.php?cont=info_admon_008
Linux es un sistema multi-usuario, donde la administración de usuarios (añadir, modificar, eliminar, asignar permisos) se convierte en algo importante y un elemento básico de seguridad.
Tipos de usuarios
En Linux a cada usuario se le asigna un número de identificación, en inglés User ID o simplemente UID. Todos los usuarios también pertenecen a grupos, cada grupo se identifica con un número único de grupo, Group ID, GID. Todos los usuarios pueden pertenecer a más grupos. En algunas distribuciones de Linux, cuando se crea un usuario, también se crea un grupo único para ese usuario.
Aunque sujeto a cierta polémica, es posible identificar tres tipos de usuarios en Linux:
Usuario root
- También llamado superusuario o administrador.
- Su UID (User ID) es 0 (cero).
- Es la única cuenta de usuario con privilegios sobre todo el sistema.
- Acceso total a todos los archivos y directorios con independencia de propietarios y permisos.
- Controla la administración de cuentas de usuarios.
- Ejecuta tareas de mantenimiento del sistema.
- Puede detener el sistema.
- Instala software en el sistema.
- Puede modificar o reconfigurar el kernel, controladores, etc.
Usuarios especiales – Cuentas del sistema
- Ejemplos: bin, daemon, adm, lp, sync, shutdown, mail, operator, squid, apache, etc.
- Por motivos de seguridad no tiene todos los privilegios del usuario root, pero pueden asumen algunos privilegios de root.
- No tienen contraseñas, son cuentas que no están diseñadas para iniciar sesión.
- También se les conoce como cuentas de «no inicio de sesión» (nologin).
- Se crean (generalmente) automáticamente al momento de la instalación
- Generalmente se les asigna un UID entre 1 y 100 (según lo definido en /etc/login.defs).
Usuarios normales
- Se usan para usuarios individuales (personas)
- Cada usuario dispone de un directorio de trabajo, ubicado generalmente en /home.
- Cada usuario puede personalizar su entorno de trabajo.
- Tienen solo privilegios completos en su directorio de trabajo o HOME.
- En las distros actuales de Linux se les asigna generalmente un UID superior a 500.
/etc/passwd
Sin importar el tipo de usuario, todas las cuentas se encuentran definidas en el archivo de configuración ‘passwd’, ubicado dentro del directorio /etc. Este archivo es de texto tipo ASCII, se crea al momento de la instalación con el usuario root y las cuentas especiales, más las cuentas de usuarios normales que se hayan indicado al momento de la instalación.
El contenido del archivo /etc/passwd, es similar al siguiente
root:x:0:0:root:/root:/bin/bash games:x:12:100:games:/usr/games:/sbin/nologin loboalfa:x:1000:1000:Carlos A. Leal S.:/home/loboalfa:/bin/bash
/etc/passwd | |
Campo 1 | Es el nombre del usuario, identificador de inicio de sesión (login). Tiene que ser único. |
Campo 2 | La ‘x’ indica la contraseña encriptada del usuario, además también indica que se está haciendo uso del archivo /etc/shadow, si no se hace uso de este archivo, este campo se vería algo así como: ‘ghy675gjuXCc12r5gt78uuu6R’. |
Campo 3 | Número de identificación del usuario (UID). Tiene que ser único. 0 para root, generalmente las cuentas o usuarios especiales se numeran del 1 al 100 y las de usuario normal del 101 en delante, en las distribuciones mas recientes esta numeración comienza a partir del 500. |
Campo 4 | Numeración de identificación del grupo (GID). El que aparece es el número de grupo principal del usuario, pero puede pertenecer a otros, esto se configura en /etc/groups. |
Campo 5 | Comentarios o el nombre completo del usuario. |
Campo 6 | Directorio de trabajo (Home) donde se sitúa al usuario después del inicio de sesión. |
Campo 7 | Shell que va a utilizar el usuario de forma predeterminada. |
/etc/shadow
Hace mucho tiempo, las contraseñas cifradas se almacenaban en el mismo /etc/passwd. El problema es que ‘passwd’ es un archivo que puede ser leído por cualquier usuario del sistema, aunque solo puede ser modificado por root. Esto genera un problema de seguridad. El archivo ‘shadow’, resuelve el problema ya que solo puede ser leido por root. y se considera como como una extensión de ‘passwd’ porque almacena la contraseña encriptada, y otros campos de control de contraseñas.
El contenido de /etc/shadow es similar al siguiente
root:$6vLN8pNIinlOkXbT2fwns3bzZzhuR6GM6MQQKVw0x/sweQ./::0:99999:7::: games:*:17110:0:99999:7::: loboalfa:8PXkS04rr1yExVhkanfo/hNpJWh3itqubpx2Y/::0:99999:7:::
La información de cada usuario está dividida en 9 campos delimitados cada uno por ‘:’ dos puntos.
/etc/shadow | |
Campo 1 |
Nombre de la cuenta del usuario. |
Campo 2 |
Contraseña cifrada o encriptada, un ‘*’ indica cuenta de ‘nologin’. |
Campo 3 |
Días transcurridos desde el 1/ene/1970 hasta la fecha en que la contraseña fue cambiada por última vez. |
Campo 4 |
Número de días que deben transcurrir hasta que la contraseña se pueda volver a cambiar. |
Campo 5 |
Número de días tras los cuales hay que cambiar la contraseña. (-1 significa nunca). A partir de este dato se obtiene la fecha de expiración de la contraseña. |
Campo 6 |
Número de días antes de la expiración de la contraseña en que se le avisará al usuario al inicio de la sesión. |
Campo 7 |
Días después de la expiración en que la contraseña se inhabilitara, si es que no se cambio. |
Campo 8 |
Fecha de caducidad de la cuenta. Se expresa en días transcurridos desde el 1/Enero/1970 (epoch). |
Campo 9 |
Reservado. |
/etc/group
Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del sistema, contiene una línea para cada usuario con tres o cuatro campos por usuario:
El contenido del archivo /etc/group es similar a esto:
root:x:0: games:x:20: loboalfa:x:1000:loboalfa
- El campo 1 indica el usuario.
- El campo 2 ‘x’ indica la contraseña del grupo, que no existe, si hubiera se mostraría un ‘hash’ encriptado.
- El campo 3 es el Group ID (GID) o identificación del grupo.
- El campo 4 es opcional e indica la lista de grupos a los que pertenece el usuario
Añadir usuarios con useradd
useradd o adduser es el comando que permite añadir nuevos usuarios al sistema desde la línea de comandos. Sus opciones más comunes o importantes son las siguientes:
- -c añade un comentario al momento de crear al usuario, campo 5 de /etc/passwd
- -d directorio de trabajo o home del usuario, campo 6 de /etc/passwd
- -e fecha de expiración de la cuenta, formato AAAA-MM-DD, campo 8 de /etc/shadow
- -g número de grupo principal del usuario (GID), campo 4 de /etc/passwd
- -G otros grupos a los que puede pertenecer el usuario, separados por comas.
- -r crea una cuenta del sistema o especial, su UID será menor al definido en /etc/login.defs en la variable UID_MIN, además no se crea el directorio de inicio.
- -s shell por defecto del usuario cuando ingrese al sistema. Si no se especifica, bash, es el que queda establecido.
- -u UID del usuario, si no se indica esta opción, automáticamente se establece el siguiente número disponible a partir del último usuario creado.
En el caso de Centos 7, ya vienen pre-configuradas las opciones necesarias, por lo tanto no se necesita agregar ninguna opción, para agregar un usuario llamado juan simplemente:
useradd juan
Se creará el usuario y su grupo, así como las entradas correspondientes en /etc/passwd, /etc/shadow y /etc/group. También se creará el directorio de inicio o de trabajo: /home/juan y demás archivos de configuración.
Una versión más completa de este comando podría ser:
useradd -c "Juan Perez Hernandez" juan
Para los que aman las complicaciones
useradd -c «Juan Perez Hernandez» -gusers -d/home/juan/ -m juan
Solo falta agregar la contraseña se hace con passwd
passwd juan
Se debe escribir la contraseña dos veces y listo.
Modificar usuarios con usermod
Como su nombre lo indica, usermod permite modificar o actualizar un usuario o cuenta ya existente. Sus opciones más comunes o importantes son las siguientes:
- -c añade o modifica el comentario, campo 5 de /etc/passwd
- -d modifica el directorio de trabajo o home del usuario, campo 6 de /etc/passwd
- -e cambia o establece la fecha de expiración de la cuenta, formato AAAA-MM-DD, campo 8 de /etc/shadow
- -g cambia el número de grupo principal del usuario (GID), campo 4 de /etc/passwd
- -G establece otros grupos a los que puede pertenecer el usuario, separados por comas.
- -l cambia el login o nombre del usuario, campo 1 de /etc/passwd y de /etc/shadow
- -L bloque la cuenta del usuario, no permitiendolé que ingrese al sistema. No borra ni cambia nada del usuario, solo lo deshabilita.
- -s cambia el shell por defecto del usuario cuando ingrese al sistema.
- -u cambia el UID del usuario.
- -U desbloquea una cuenta previamente bloqueada con la opción -L.
Si quiseramos cambiar el nombre de usuario de ‘juan’ a ‘juanc’
:usermod -l juanc juan
Eliminar usuarios con userdel
Como su nombre lo indica, userdel elimina una cuenta del sistema, userdel puede ser invocado de tres maneras:
userdel sergio
Sin opciones elimina la cuenta del usuario de /etc/passwd y de /etc/shadow, pero no elimina su directorio de trabajo ni archivos contenidos en el mismo, esta es la mejor opción, ya que elimina la cuenta pero no la información de la misma.
userdel -r sergio
Al igual que lo anterior elimina la cuenta totalmente, pero con la opción -r además elimina su directorio de trabajo y archivos y directorios contenidos en el mismo, así como su buzón de correo, si es que estuvieran configuradas las opciones de correo.
La cuenta no se podrá eliminar si el usuario esta logueado o en el sistema al momento de ejecutar el comando.