Módulo 7 - Administración de usuarios, grupos y permisos
Módulo 7 - Administración de usuarios, grupos y permisos
Usuarios, grupos y permisos
-
Usuario: Individuo que interactúa con una computadora (experto o novato).
-
Usuario final: Utiliza programas de aplicación tras autenticarse con credenciales.
-
Home de usuario: Directorio personal del usuario donde guarda sus archivos (
/home/usuario). -
Autenticación: Proceso de verificar la identidad mediante credenciales, códigos o factores de autenticación (ej. usuario + contraseña).
-
Autorización: Servidor evalúa los permisos de un usuario para acceder a recursos o archivos tras autenticarse. Este proceso suele combinarse con la autenticación para garantizar la seguridad del sistema.
-
Grupos: Agrupación de usuarios que comparten privilegios, donde los permisos se asignan directamente al grupo y los usuarios heredan automáticamente dichos permisos.
Administración de usuarios
Comando useradd
| Comando | Descripción |
|---|---|
useradd [username] | Crea un nuevo usuario sin un directorio en /home. Se genera un grupo con el mismo nombre del usuario. Ejemplo: useradd juan |
useradd -d [directorio] [username] | Crea usuario con directorio específico (debe existir previamente). Ejemplo: useradd -d /opt/juan juan |
useradd -e [YYYY/MM/DD] [username] | Crea usuario con fecha de expiración (verificar con chage -l [username]). Ejemplo: useradd -e 2023-01-30 juan |
useradd -m [username] | Crea usuario CON su directorio en /home/username. Ejemplo: useradd -m Juan |
useradd -u [UID] [username] | Crea usuario con UID específico (identificador único del sistema). Ejemplo: useradd -u 1001 juan |
Explicación detallada:
-s /bin/bash: establece bash como shell por defectousermod -aG sudo: agrega el usuario al grupo sudo sin removerlo de otros gruposvisudo: editor seguro para modificar sudoers (valida sintaxis antes de guardar)
Comando usermod
| Comando | Descripción |
|---|---|
usermod -l [nuevo-usuario] [usuario-actual] | Cambia el nombre de un usuario existente por uno nuevo. Después, necesitarás reasignar la carpeta en /home. Ejemplo: usermod -l pedro juan |
usermod -L [nombre_de_usuario] | Bloquea una cuenta de usuario, indicado por la adición de un "!" en el archivo /etc/shadow, donde se guardan las contraseñas encriptadas. |
usermod -U [nuevo-UID] [nombre_de_usuario] | Permite asignar un nuevo UID a un usuario. Ejemplo: usermod -U 1010 pedro |
usermod -d [directorio] [nombre_de_usuario] | Asigna o reasigna un directorio en /home a un usuario. Es importante que el directorio ya esté creado previamente. Ejemplo: usermod -d /home/pedro pedro |
userdel [nombre_de_usuario] | Elimina un usuario del sistema, pero conserva sus entradas y directorios en /home. |
userdel -r [nombre_de_usuario] | Elimina un usuario del sistema y todas sus entradas, incluyendo el directorio en /home, el spool de correo, etc. |
adduser [nombre_de_usuario] | Crea un nuevo usuario con su directorio en /home y establece una contraseña para él. |
/etc/passwd | Almacena información sobre todos los usuarios actuales del sistema. |
/etc/shadow | Contiene las contraseñas cifradas de los usuarios del sistema. |
/etc/group | Contiene información sobre todos los grupos del sistema. |
Administración de grupos
El uso de grupos facilita la gestión de usuarios con permisos y políticas comunes. Algunos comandos básicos incluyen:
| Comando | Descripción |
|---|---|
groupadd [nombre_de_grupo] | Crea un nuevo grupo en el sistema. Ejemplo: groupadd newgroup |
groupdel [nombre_de_grupo] | Elimina un grupo del sistema. Ejemplo: groupdel newgroup |
groupmod -n [nuevo_nombre_de_grupo] [nombre_antiguo_de_grupo] | Cambia el nombre de un grupo. Ejemplo: groupmod test newgroup |
groupmod -g [nuevo_GID] [nombre_de_grupo] | Asigna un nuevo GID a un grupo. Ejemplo: groupmod -g 1000 newgroup |
adduser [username] [groupname] | Permite agregar un usuario existente a un grupo existente. Ejemplo: adduser juan grupo (Debian) |
usermod -aG [groupname] [username] | Permite agregar un usuario existente a un grupo existente. (CentOS/AlmaLinux) |
groups [username] | Muestra los grupos a los que pertenece un usuario. |
groupmems -g [groupname] -l | Enumera los miembros de un grupo secundario. |
id [username] | Enumera los grupos principales a los que pertenece un usuario. |
deluser [username] [groupname] | Permite eliminar un usuario de un grupo. (Debian) |
gpasswd -d [username] [groupname] | Permite eliminar un usuario de un grupo. (CentOS/AlmaLinux) |
Gestión de claves de usuario
La seguridad de la información se basa en la gestión eficiente de las contraseñas en Linux, utilizando el comando passwd. Aquí exploraremos los comandos esenciales para administrar las contraseñas de los usuarios.
| Comando | Descripción |
|---|---|
passwd [username] | Nos permite configurar una contraseña para un usuario. Ejemplo: passwd juan |
chage -l [username] | Muestra información del estado de la contraseña de un usuario. Ejemplo: chage -l juan |
passwd -d [username] | Elimina la contraseña de un usuario. Permite hacer login sin usar el password. Ejemplo: passwd -d juan |
passwd -e [username] | Fuerza a un usuario a cambiar su contraseña en el próximo login. Ejemplo: passwd -e juan |
passwd -n [días] [nombre_de_usuario] | Establece la duración mínima, en días, para una contraseña. Después de este período, el usuario puede cambiar su contraseña. Ejemplo: passwd -n 10 juan |
passwd -x [días] [nombre_de_usuario] | Establece la duración máxima, en días, para una contraseña. Ejemplo: passwd -x 20 juan |
passwd -w [días] [nombre_de_usuario] | Establece el número de días de advertencia antes de que la contraseña expire. Ejemplo: passwd -w 5 juan |
Permisos
En sistemas informáticos, las reglas de seguridad son esenciales, y los permisos de usuario definen las acciones y el acceso.
Permisos básicos con valores numéricos
-
Lectura - Read (r): 4
-
Escritura - Write (w): 2
-
Ejecución - Execute (x): 1
Tipos de entidades
-
Usuario (u): Propietario de archivos/directorios
-
Grupo (g): Conjunto de usuarios con características comunes
-
Otros (o): Usuarios restantes
¿Cómo se muestran los permisos con las entidades?
El comando ls -l muestra los permisos de archivos y directorios en la ruta actual. Por ejemplo: -rwx-rw-r, se interpreta así::
-
El primer bloque (rwx) corresponde al propietario del archivo o directorio.
-
El segundo bloque (rw) corresponde al grupo con permisos sobre el archivo o directorio.
-
El tercer bloque (r) corresponde al permiso que los demás usuarios (otros) tendrán sobre el archivo o directorio.
Tipos de ficheros
Tenemos los siguientes tipos de ficheros más importantes:
-
-Archivo normal -
dDirectorio -
lEnlace simbólico -
cArchivos especiales (dispositivos en /dev) -
bArchivos de dispositivo de bloque (sda, sdb) -
sArchivos de socket (ej:/run/udev/control)
Permisos
¿Cómo asignamos permisos a los usuarios sobre un archivo o directorio?
-
Para ello, utilizaremos el comando chmod (change mode).
-
Hay dos maneras de asignar permisos, de forma numérica y simbólica.
Forma numérica
| Comando | Descripción |
|---|---|
chmod 640 [file] | Asignará permisos de lectura (4) y escritura (2) al propietario del archivo, al grupo solo se le otorgará permiso de lectura (4) y el resto de usuarios no tendrán ningún permiso sobre el archivo o directorio. |
chmod 762 [file] | Le asignará los permisos de read (4), write (2) y execute (1) al propietario, al grupo los permisos de read (4) y write (2), y el resto de usuarios solo tendrán permiso de write (2). |
chmod 755 [directory] | Le asigna los permisos de read (4), write (2) y execute (1) al propietario, read (4) y execute (1) al grupo y a los otros. |
chmod -R 755 [directory] | Con el parámetro -R aplicamos permisos de manera recursiva, extendiéndolos a todo el contenido existente dentro del directorio. Solo root o un usuario administrador puede ejecutarlo. No se recomienda por seguridad, a menos que sea necesario. |
Nota:
-
Para acceder a un directorio se necesita como mínimo los permisos de read (4) y execute (1). Esto solo aplica para los usuarios estándares y no para el usuario root.
-
Para que el propietario de un archivo pueda editar su contenido, el usuario como mínimo deberá tener los permisos de lectura (4) y escritura (2) asignados.
Forma simbólica
| Comando | Descripción |
|---|---|
chmod u+rwx,g+rw,o+r [file] | Permite asignar al propietario los permisos de lectura, escritura y ejecución, al grupo los de lectura y escritura, y a otros solo el de lectura. Se separa con coma cuando se aplican distintos permisos a las tres entidades sobre un mismo archivo simultáneamente. |
chmod ugo+rwx [file] | Le asigna al mismo tiempo, todos los permisos a las tres entidades. |
chmod u-x,g-w,o-r | Con el símbolo “-” removemos los permisos asignados. |
chmod +x [file.sh] | Le asigna el bit de ejecución a todas las entidades. |
Unmask
Por defecto los permisos son:
-
Usuarios estándar:
- Para directorios: rwx-rwx-rx (775 / umask 002)
- Para archivos: rw-rw-r (664 / umask 113)
-
Usuario root:
- Para directorios: rwx-rx-rx (755 / umask 022)
- Para archivos: rw-r-r (644 / umask 133)
-
Notas:
-
Estos permisos podrían cambiar según las actualizaciones y distribución.
-
Los permisos numéricos máximos para archivos y directorios son 777.
-
Si restamos los permisos máximos (777) al valor numérico de
unmask, obtendremos el valor numerico de los permisos reales asignados por defecto a archivos y directorios. Ejemplo022 (unmask)-777 (Perm. max.)=755 Perm. actuales
-
| Comando | Descripción |
|---|---|
umask | Muestra el valor numérico de umask de los permisos por defecto, el cual es el valor inverso de los permisos numéricos que ya conocemos. Por ejemplo: umask 0022. |
umask -S | Mostrará los permisos por defecto del sistema, pero en modo simbólico que ya conocemos. Ejemplo: u=rwx,g=rx,o=rx |
umask u=[perm],g=[perm],o=[perm] | Configura una serie de permisos por defecto en el sistema, donde se especificarán los permisos por defecto para el usuario (propietario), grupo y los otros. Ejemplo: umask u=rwx,g=rw,o=r |
Comandos chown y chgrp
Chown, del inglés "change owner", permite cambiar el propietario de archivos o directorios en el sistema. Solo puede ser ejecutado por el usuario root o aquellos con permisos de superusuario por razones de seguridad.
| Comando | Descripción |
|---|---|
chown [new-owner] [file] | Permite cambiar el usuario propietario de un archivo o directorio. Ejemplo: chown juan vla.txt |
chgrp [new-grp-owner] [file] | Permite cambiar el grupo propietario de un archivo. Ejemplo: chgrp juan vla.txt |
chown [new-owner]:[new-grp-owner] [file] | Es una combinación de los comandos anteriores. Permite cambiar el usuario propietario y grupo propietario de un archivo al mismo tiempo. Ejemplo: chown pedro:pedro vla.txt |
Permiso Sticky Bit
Características
-
Se aplica SOLO a directorios.
-
Solo el propietario del directorio o root puede renombrar o borrar contenido.
-
Otros usuarios con
rwxpueden leer y modificar, pero NO eliminar. -
Se representa con "t" en lugar de "x" para los "otros".
-
Valor numérico: 1.
Aplicación
-
chmod 1775 [directorio]: Activa el permiso de sticky. -
chmod +t [directorio]: Activa el permiso sticky. -
chmod -t [directorio]: Desactiva el permiso sticky. -
Los "otros" deben tener permisos
rwxpara notar la diferencia.
Permiso SUID
Características
-
SUID: Special User ID
-
Hereda permisos del propietario a otros usuarios.
-
Solo se aplica a archivos ejecutables.
-
El usuario adquiere los mismos permisos del creador al ejecutar.
-
Valor numérico: 4.
-
Bit "x" del propietario se reemplaza por "s" (si x está presente).
-
Se coloca "S" si el bit "x" no está presente.
-
Usar con cuidado por posibles problemas de seguridad.
Aplicación
-
chmod 4775 script.sh: Asigna SUID -
Ejemplo real: /usr/bin/passwd tiene permiso SUID
Permiso SGID
Características
-
SGID: Special Group ID.
-
Similar a SUID pero a nivel de grupo.
-
Archivos ejecutables se ejecutan con privilegios del grupo.
-
Archivos creados dentro heredan el grupo del directorio principal.
-
Valor numérico: 2.
-
Bit "x" del grupo se reemplaza por "s" (si x está habilitado).
-
Se reemplaza por "S" si el bit "x" está deshabilitado.
Aplicación
-
chmod 2775 Documents/: Asigna SGID -
Uso común: Carpetas compartidas donde múltiples usuarios colaboran
Permiso sudo
-
sudo su: "super user do" o "hacer como superusuario" -
Permite a usuarios estándar ejecutar programas con privilegios de superusuario o administrador.
-
Por defecto, ningún usuario estándar puede usar
sudo su. -
Se requiere especificar explícitamente en el archivo
/etc/sudoers.
Maneras de agregar usuario a sudoers
| Comando | Descripción |
|---|---|
adduser [user] sudo | Agregar el usuario al grupo de sudo (Debian) |
usermod -aG wheel [user] | Agregar el usuario al grupo wheel (CentOS/AlmaLinux) |
/etc/sudoers | Agregar al usuario manualmente al archivo /etc/sudoers (Debian/CentOS/AlmaLinux). No se recomienda editar /etc/sudoers directamente; usar visudo evita errores de sintaxis que podrían bloquear sudo. |
Archivo /etc/sudoers
Contenido del archivo
-
Variables.
-
Privilegios para usuarios específicos.
-
Privilegios para grupo admin (compatibilidad hasta Ubuntu 11.10).
-
Privilegios para grupo sudo.
Especificación de privilegios
-
ALL: Usuario puede ejecutar sudo desde cualquier host.
-
(ALL:ALL): Usuario puede iniciar sesión como cualquier usuario y grupo.
-
ALL: Usuario puede ejecutar cualquier comando con sudo.
Ejemplos de configuración
| Comando | Descripción |
|---|---|
root ALL(ALL:ALL) ALL | El usuario root puede iniciar sesión desde todos los hosts (ALL), como todos los usuarios y grupos (ALL:ALL), y ejecutar todos los comandos (ALL). |
%admin ALL=(ALL) ALL | Los usuarios del grupo admin pueden iniciar sesión desde todos los hosts (ALL), como todos los usuarios (ALL), y ejecutar todos los comandos (ALL). |
%sudo ALL=(ALL:ALL) ALL | El usuario del grupo sudo puede iniciar sesión dede todos los hosts (ALL), como todos los usuarios y grupos (ALL:ALL), y ejecutar todos los comandos (ALL). |
juan ALL=(ALL:ALL) NOPASSWD:/usr/bin/su | Permite que el usuario juan pueda iniciar sesión desde todos los hosts, como todos los usuarios y grupos, ejecutar todos los comandos, y que no se le solicite la contraseña cuando digite sudo su. |
juan ALL=/usr/bin/systemctl restart ssh.service | Permite que el usuario juan pueda únicamente ejecutar el comando systemctl restart ssh.service como sudo desde todos los hosts. Ejemplo: sudo systemctl restart ssh.service |
%sysadmins ALL=/usr/bin/apt-get update, /usr/bin/systemctl restart apache2 | Permite que los usuarios contenidos en el grupo sysadmins puedan ejecutar únicamente los comandos apt-get update y systemctl restart apache2 desde cualquier host. |
juan ALL=ALL, !/usr/bin/systemctl stop apache2, !/usr/bin/aptget upgrade | Permite que el usuario juan pueda ejecutar todos los comandos del sistema, excepto systemctl stop apache2 y apt-get upgrade desde todos los hosts. No funciona si el usuario es agregado al grupo sudo. |
%sysadmins ALL=ALL, !/usr/bin/systemctl stop * | Permite que los usuarios del grupo sysadmins puedan ejecutar cualquier comando desde todos los hosts, excepto detener la ejecución de cualquier servicio con systemctl stop. |