Quién puede qué
Cada archivo tiene dueño, grupo y nueve permisos. Al terminar sabrás leerlos de un vistazo y compartir un archivo solo con quien debe verlo.
Primero, la idea completa
Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.
Recursos y propiedad
En un sistema multiusuario hay que responder tres preguntas: qué permisos tengo sobre cada recurso, cómo se relacionan usuarios, archivos y procesos, y cómo se administran esos permisos. Controlar el acceso es una parte vital del sistema.
- Linux es multiusuario, como Unix. Cada cuenta se identifica con un número, el UID.
- Los recursos, los archivos, pertenecen a un usuario: normalmente a quien los creó.
- Una persona entra con su cuenta y lanza procesos. Los procesos usan archivos para guardar datos y para comunicarse, así que los usuarios usan los archivos de forma indirecta, a través de un proceso que corre con su identidad.
Hay dos enfoques de control de acceso. El discrecional bloquea el acceso según la identidad del usuario, y es discrecional porque quien tiene permiso puede dárselo a otro: es el más común y el que usa Linux con sus permisos de archivo. El mandatorio se basa en niveles de seguridad: cada usuario tiene un nivel de autorización y cada recurso una etiqueta, y solo se accede a lo de nivel igual o inferior; lo administra un responsable y los usuarios no pueden cambiar sus permisos.
Usuarios y grupos
Hay dos tipos de usuario: los del sistema, que usan los programas para correr procesos en segundo plano (como mysql o apache), y los regulares, personas que usan Linux desde una shell. Cada usuario tiene un UID y pertenece a uno o más grupos, identificados por un GID. El usuario especial con UID 0 se llama root y puede hacer cualquier cosa. Por convención, en systemd:
| 0 | root |
| 1 a 999 | reservados para usuarios del sistema |
| 65534 | nobody, usado sobre todo al mapear sistemas de archivos de red |
| 1000 a 65533 y 65536 a 4294967294 | usuarios regulares |
Tu UID lo da la orden id. Por defecto los usuarios se manejan localmente: su información vive en archivos de la propia máquina, como /etc/passwd, /etc/shadow (las contraseñas cifradas) y /etc/group.
Una línea de /etc/passwd por usuario. Elige una y toca cada campo.
Para administrarlos: adduser crea usuarios (con -r, o --system, un usuario del sistema), passwd fija la contraseña, usermod cambia la configuración de un usuario (por ejemplo, usermod -aG dev luis lo agrega al grupo dev), groupadd crea grupos y gpasswd configura un grupo. Al crear un usuario se crea por defecto un grupo con su mismo nombre.
En empresas con muchas computadoras es común centralizar los usuarios: con directorios basados en LDAP (como Keycloak o Microsoft Active Directory), con autenticación por red usando Kerberos, o con herramientas de gestión de configuración como Puppet, Ansible o Chef, que crean los usuarios en muchas máquinas a la vez.
Permisos
Como en Linux todo es un archivo, los permisos de archivo son el corazón del control de acceso. Hay tres ámbitos, de menor a mayor: el usuario dueño del archivo, su grupo y los otros, todos los demás. Para cada uno hay tres tipos de acceso:
| En un archivo | En un directorio | |
|---|---|---|
| r · leer | ver el contenido | ver los nombres de los archivos que contiene |
| w · escribir | modificarlo o borrarlo | crear, renombrar y borrar archivos dentro |
| x · ejecutar | ejecutarlo, si además se puede leer | entrar y acceder a la información de sus archivos |
Además hay bits especiales: setuid y setgid (s), en ejecutables, hacen que quien lo ejecuta herede los permisos del dueño o del grupo del archivo, como /usr/bin/passwd, que debe escribir en /etc/shadow. El sticky bit (t), en directorios como /tmp, impide que alguien que no es root borre archivos que no son suyos, aunque el directorio sea escribible por todos.
informe.txt es de ana y del grupo dev. sofía está en dev; luis no. Enciende y apaga los nueve permisos y mira qué puede hacer cada quien.
El modo de un archivo
Una línea de ls -l como -rw-r--r-- 1 mh9 devs 9 abr 12 11:42 test tiene, de izquierda a derecha: el modo del archivo, el número de enlaces duros, el dueño, el grupo, el tamaño en bytes, la fecha de modificación y el nombre.
El modo tiene diez caracteres: el primero es el tipo de archivo y luego vienen tres grupos rwx, del dueño, del grupo y de los otros. Los tipos:
| - | archivo regular, como el que crea touch abc |
| d · l | directorio · enlace simbólico |
| b · c | dispositivo especial de bloques · de caracteres |
| C | archivo de alto rendimiento (datos contiguos) |
| p · s | tubería con nombre (se crea con mkfifo) · socket |
| ? | otro tipo desconocido |
Cada grupo rwx se puede escribir como un número de 0 a 7, sumando r = 4, w = 2 y x = 1. Así rw-r--r-- es 644, y con chmod +x pasa a rwxr-xr-x, 755. Más ejemplos: 700, todo para el dueño y nada para los demás; 400, solo lectura para el dueño. Los permisos se cambian con chmod (por ejemplo chmod 744 archivo o chmod g+w archivo), y el dueño y el grupo con chown.
En un directorio, r, w y x significan otra cosa. luis es «otro» en la carpeta proyecto: cambia sus permisos y mira qué logra hacer.
Antes de leer la respuesta
Tu turno: comparte con el equipo
Eres ana, que pertenece a los grupos sudo y dev. Averigua tu identidad, comparte un informe solo con tu equipo (y compruébalo entrando como sofía y como luis), crea un usuario para un servicio y descubre qué hace el sticky bit de /tmp.
Comprueba lo que entendiste
Cada respuesta incorrecta explica por qué parece correcta y en qué falla.