Introducción
El soporte multiusuario es una de las características más interesantes de Linux y, a la vez, una de las que más suele pasarse por alto. Hasta ahora me he limitado a mi usuario personal y al superusuario, sin reparar en lo que aporta crear usuarios adicionales y afinar la gestión de permisos. Pero a medida que administro mi servidor web, voy entendiendo por qué conviene aislar y separar determinados elementos por motivos de seguridad, orden y control interno. Me interesa, sobre todo, añadir capas de protección que impidan eliminar o modificar archivos que pertenecen a servicios concretos.
A Tener en Cuenta...
A. Hay cuatro conceptos fundamentales:
- Usuarios: entidades que representan a personas o servicios e interactúan con el sistema.
- Grupos: entidad desde la cual se vinculan usuarios para compartir servicios del sistema.
- Permisos: controlan qué entidades pueden leer, ejecutar y editar un archivo o directorio.
- Identificadores: son los números que se vinculan a los usuarios y grupos.
B. Los usuarios y grupos del sistema están vinculados a un número que los identifica (identificador):
- Los vínculos se pueden ver en el archivo /etc/passwd.
- En los inodos, que son las tablas que guardan los metadatos de los archivos, se usa el número de usuario y grupo.
- Si el usuario/grupo no existen en el sistema que los está leyendo, el sistema mostrará simplemente el número sin realizar ninguna asociación.
- Si el número de usuario/grupo corresponde a otro en el sistema desde el cual se está accediendo, estos serán asociados a los correspondientes de ese sistema.
C. En cuanto a los permisos:
- Hay permisos de propietario, grupo y otros.
- Los permisos están asociados al número de usuario/grupo, no al pseudónimo de los mismos.
- Hay permisos de lectura, escritura y ejecución.
- El permiso de ejecución en las carpetas significa permitir pasar por la carpeta. Si no se activa, no se puede acceder a ninguna subcarpeta.
- Si hay permiso de ejecución pero no de lectura, se pueden leer los archivos de la carpeta; si se sabe la dirección, además se puede acceder a las subcarpetas. Lo que no se puede hacer es listar los archivos dentro de la carpeta.
D. Detalles importantes:
- Si se agrega un grupo a un usuario los cambios solo tienen efecto luego de iniciar sesión nuevamente, pues es en el momento de iniciar sesión cuando los grupos son asignados.
Herramientas de Administración de Usuarios / Grupos
Los comandos relacionados a la administración de usuarios/grupos/permisos provienen de diferentes proyectos GNU. A continuación un listado con los más comunes mencionando de qué proyecto provienen.
- useradd, usermod, userdel, groupadd, groupmod, groupdel, gpasswd, chage, chsh, chfn, passwd, newgrp → Proyecto Shadow
- chmod, chown, chgrp, id, groups, whoami → GNU coreutils.
- chattr, lsattr → e2fsprogs.
- sudo, visudo → Proyecto Sudo
Organización de Usuarios Según el LSB
Si bien el Linux Standard Base es un proyecto que no se sigue actualizando, algunas de sus definiciones siguen teniendo relevancia. En el documento se definen que rangos de GUID y UID deberían usar para cada caso. Aunque estos rangos ya no son usados, sino que se alinearon con Debian/Ubuntu. Sin embargo encuentro importante mencionar el LSB porque fue un intento de estandarizar las diferentes distros.
0-99 -----------> Reservado para el Sistema Base (kernel, init, etc)
100-999 -------> Aplicaciones y Servicios (mail, www-data, docker...)
1000+ ---------> Usuarios Humanos
Permisos
Recuerdo que, cuando empecé a usar GNU/Linux de niño, estaba convencido de que lo mejor era ponerle 777 a todo. ¿Qué mejor que el número de la suerte del casino para los permisos de mis archivos? Además, me parecía la forma perfecta de simplificar de golpe todo aquel enredo de los permisos.
Ahora que tengo un servidor con varios servicios corriendo, lo veo de otra manera. Para separar los privilegios de cada servicio y protegerme tanto de mis propios errores como de posibles problemas de seguridad, me parece buena práctica usar 750 en las carpetas y 640 en los archivos. Así, el usuario del servicio puede leer y editar, mientras que mi usuario personal solo puede leer, pero no modificar. De este modo evito que un script mal escrito o un comando equivocado, lanzados desde mi cuenta personal, acaben provocando un desastre.
Acopio de Comandos
Me parece importante hacer un listado con comandos que voy usando y que son importantes de recordar.
Cambio recursivo de permisos / propietario
chmod y chown permiten cambiar los permisos en todos los subdirectorios usando -R
chown -R terryDavid:terryDavis ./
chmod -R 777 ./
Listar usuarios y grupos
Para listar usuarios y grupos es necesario imprimir en pantalla dos archivos.
cat /etc/passwd # Usuarios
cat /etc/group # Grupos