Por qué existen los permisos en Linux
Linux es un sistema operativo multiusuario. Esto significa que varios usuarios y procesos pueden utilizar el mismo sistema al mismo tiempo. Para evitar que unos usuarios interfieran con el trabajo de otros, el sistema implementa un mecanismo de control de acceso basado en permisos.
Los permisos determinan quién puede leer, modificar o ejecutar un archivo o directorio. Este sistema constituye una de las primeras capas de seguridad del sistema operativo.
Tipos de permisos
- Lectura (r)
- Escritura (w)
- Ejecución (x)
Estos permisos se aplican a tres tipos de usuarios diferentes.
- Usuario propietario (user)
- Grupo propietario (group)
- Otros usuarios (others)
Interpretar permisos con ls -l
El comando más habitual para ver permisos en Linux es ls -l. Su salida muestra el tipo de archivo, los permisos, el propietario, el grupo y otros metadatos útiles.
ls -l
Ejemplo de salida:
-rwxr-xr-- 1 roberto staff 1024 Mar 18 script.sh
El primer carácter indica el tipo de archivo.
- – archivo normal
- d directorio
- l enlace simbólico
Los nueve caracteres siguientes representan los permisos divididos en tres bloques: propietario, grupo y otros.
rwx r-x r--
En este ejemplo, el propietario tiene permisos de lectura, escritura y ejecución; el grupo tiene lectura y ejecución; y el resto de usuarios solo tiene lectura.
Qué significa cada permiso
Los permisos tienen comportamientos distintos según se apliquen a archivos o directorios. Entender esta diferencia es clave para administrar correctamente un sistema Linux.
Lectura (r)
En archivos, permite ver su contenido. En directorios, permite listar los elementos que contiene.
Escritura (w)
En archivos, permite modificarlos. En directorios, permite crear, eliminar o renombrar elementos dentro de ellos.
Ejecución (x)
En archivos, permite ejecutarlos como programas o scripts. En directorios, permite acceder a ellos y recorrer su ruta.
Modificar permisos con chmod
El comando chmod permite modificar los permisos de un archivo o directorio. Se puede utilizar con formato simbólico o numérico.
Formato simbólico
Este formato utiliza letras para indicar a quién se modifica y qué permiso se añade o elimina.
chmod u+x script.sh
Esto añade permiso de ejecución al propietario del archivo.
chmod g-w archivo.txt
En este caso se elimina el permiso de escritura para el grupo.
Formato numérico
Los permisos también pueden representarse mediante valores numéricos. Cada permiso tiene un valor asociado.
- r = 4
- w = 2
- x = 1
Estos valores se suman para formar cada bloque de permisos.
- 7 = rwx
- 5 = r-x
- 4 = r–
Por ejemplo:
chmod 755 script.sh
Esto equivale a dar permisos rwx al propietario y r-x al grupo y a otros.
Cambiar propietario con chown
Cada archivo tiene un propietario y un grupo asociados. Podemos cambiarlos con el comando chown.
chown usuario archivo
También podemos modificar usuario y grupo simultáneamente.
chown usuario:grupo archivo
Este comando es muy útil cuando se administran directorios compartidos, servicios web o archivos generados por aplicaciones que deben pertenecer a otro usuario o grupo.
Qué es la umask
La umask define los permisos por defecto que tendrán los archivos y directorios cuando se crean. En lugar de añadir permisos, la umask elimina permisos del valor base.
Los permisos base son:
- 666 para archivos
- 777 para directorios
Por eso, cuando se crea un archivo o un directorio, el sistema parte de esos valores y después aplica la máscara de permisos configurada.
Ejemplo para comprobar la umask actual:
umask
Un valor muy común es 0022. Eso provoca que los archivos se creen normalmente con permisos 644 y los directorios con 755.
También se puede mostrar en formato simbólico:
umask -S
Y modificar temporalmente para la sesión actual:
umask 002
Esto es muy habitual en entornos colaborativos donde interesa que el grupo también pueda escribir en los archivos nuevos.
Permisos especiales
Linux incluye tres permisos especiales que amplían el comportamiento del sistema tradicional de permisos: setuid, setgid y sticky bit.
setuid
Cuando un archivo ejecutable tiene activado el bit setuid, se ejecuta con los permisos del propietario del archivo, no con los del usuario que lo lanza.
Un ejemplo clásico es el comando passwd, que necesita modificar archivos del sistema aunque lo ejecute un usuario normal.
setgid
En archivos ejecutables funciona de forma similar, pero en directorios tiene un uso especialmente interesante: todos los archivos creados dentro heredan el grupo del directorio.
Esto resulta muy útil en carpetas compartidas por equipos de trabajo.
sticky bit
Se utiliza sobre todo en directorios compartidos y evita que los usuarios borren o renombren archivos de otros usuarios, aunque tengan permisos de escritura sobre el directorio.
El caso más conocido es /tmp.
ACL (Access Control Lists)
Las ACL permiten definir permisos adicionales para usuarios o grupos concretos, más allá del modelo tradicional de propietario, grupo y otros.
Son especialmente útiles cuando se quiere dar acceso puntual a una persona sin reorganizar grupos completos.
setfacl -m u:juan:r archivo.txt
Con este comando se concede permiso de lectura al usuario juan sobre el archivo indicado.
Para ver las ACL configuradas:
getfacl archivo.txt
También se pueden definir ACL por defecto en directorios compartidos, para que los archivos nuevos hereden ciertos permisos automáticamente.
Laboratorio práctico: entender permisos en un entorno multiusuario
Una buena forma de interiorizar cómo funcionan los permisos es simular una situación real con varios usuarios, un grupo compartido y un directorio común.
1. Crear usuarios de prueba
sudo useradd ana sudo useradd juan
Opcionalmente puedes asignarles contraseña para probar accesos interactivos.
sudo passwd ana sudo passwd juan
2. Crear un grupo compartido
sudo groupadd proyecto sudo usermod -aG proyecto ana sudo usermod -aG proyecto juan
Con esto, ambos usuarios formarán parte del mismo grupo de trabajo.
3. Crear un directorio compartido
sudo mkdir /srv/proyecto sudo chown root:proyecto /srv/proyecto sudo chmod 770 /srv/proyecto
De este modo, solo root y los usuarios del grupo proyecto podrán acceder al directorio.
4. Activar herencia de grupo con setgid
sudo chmod g+s /srv/proyecto
Esto hace que los archivos creados dentro del directorio hereden automáticamente el grupo proyecto.
5. Probar creación de archivos
su - ana touch /srv/proyecto/archivo_ana.txt ls -l /srv/proyecto
Al revisar el archivo verás que el grupo asignado es proyecto. Sin embargo, puede ocurrir que el otro usuario no pueda modificarlo debido a la umask aplicada al crearlo.
6. Aplicar ACL por defecto
Para garantizar que el grupo tenga permisos adecuados sobre los archivos nuevos, podemos definir ACL por defecto en el directorio.
sudo apt install acl sudo setfacl -d -m g:proyecto:rwx /srv/proyecto getfacl /srv/proyecto
Esto ayuda a que los archivos nuevos dentro del directorio respeten mejor la colaboración entre usuarios.
Diagnóstico de permisos
Cuando algo falla por permisos, hay varias herramientas que ayudan a localizar el problema real.
Ver permisos de cada parte de una ruta
namei -l /srv/proyecto/archivo_ana.txt
Este comando muestra los permisos de cada directorio de la ruta. Es muy útil cuando un archivo parece correcto pero no se puede acceder a él.
Ver información detallada de un archivo
stat archivo_ana.txt
Permite ver permisos, propietario, grupo, fechas y otra información interna del archivo.
Buscar binarios con setuid
find / -perm -4000 2>/dev/null
Es un comando muy útil en auditoría para localizar ejecutables que se lanzan con privilegios del propietario.
Riesgos de seguridad comunes
Una mala gestión de permisos puede abrir la puerta a problemas serios de seguridad o a errores difíciles de detectar.
- Usar 777 en archivos o directorios expone el sistema innecesariamente.
- Un binario con setuid root mal diseñado puede permitir escalada de privilegios.
- Un directorio compartido sin sticky bit o sin una política clara puede permitir borrar archivos de otros usuarios.
- Una umask inadecuada puede bloquear la colaboración o, al contrario, abrir demasiados permisos.
Buenas prácticas
- Evita permisos 777 salvo casos muy concretos y controlados.
- Gestiona permisos mediante grupos siempre que sea posible.
- Revisa periódicamente binarios con setuid y directorios compartidos.
- Usa ACL cuando necesites permisos más granulares sin romper la estructura de grupos.
- Comprende la umask del sistema antes de diagnosticar problemas de colaboración entre usuarios.



Deja una respuesta