Permisos de archivos en Linux: chmod, chown, umask y ACLs
Como Linux es un sistema operativo multiusuario, los permisos de acceso a archivos, directorios y otros dispositivos son necesarios para garantizar que los usuarios tengan acceso únicamente a los recursos que pueden utilizar.
La Gestión de Permisos de Archivos y Propiedad en Linux es bastante fácil, a diferencia de lo que parece.
Estos recursos pueden ser desde un simple archivo hasta una impresora o una grabadora de CD-ROM.
Cada archivo en Linux tiene definido su control de acceso. Este control se define por tres clases:
- Permisos de usuario: Definen el permiso para el usuario que es el "propietario" del archivo, quien lo creó y lo mantiene;
- Permisos de grupo: Definen el permiso para el grupo de usuarios al cual pertenece el archivo;
- Permisos para otros usuarios: Definen el permiso para todos los demás usuarios (no propietario y no forma parte del grupo).
Clases de Permisos |
Y para cada clase podemos definir tres tipos de acceso: lectura (r), escritura (w) y ejecución (x). Cuando no hay acceso para un tipo determinado, el sistema lo indica con un guión "-".
Las tres primeras posiciones de la izquierda representan los permisos para el usuario propietario del archivo. Quien crea el archivo es su propietario.
Las tres siguientes representan los permisos relativos a un grupo (puede ser que el usuario propietario pertenezca al grupo o no).
Los tres últimos permisos representan a los otros (que no es el usuario propietario del recurso y no pertenece al grupo).
Entonces, al intentar acceder a un recurso, o eres el propietario del archivo, o formas parte del grupo al cual pertenece el archivo, o eres "los otros".
Como en Linux todo es un archivo, esto facilita mucho trabajar con los permisos, ya que el esquema es el mismo para todo. No importa si estás hablando de un archivo, directorio o recurso de hardware.
Esta división cubre prácticamente todas las necesidades en términos de seguridad.
La opción "-l" del comando ls muestra los permisos de los archivos:
Cómo leer la salida del comando ls |
Los archivos pueden ser clasificados por su tipo:
- (-) Archivo común
- (d) Directorio
- (b) Dispositivo de Bloque
- (c) Dispositivo de Carácter
- (s) Socket
- (p) Pipe (conductos)
- (l) Enlace Simbólico
La primera letra que aparece a la izquierda en "ls -l" indica el tipo de archivo. Cuando no hay letra, sino un guión, el archivo es común.
Las definiciones de lectura, escritura y ejecución tienen matices diferentes para archivos y directorios. Ver la siguiente tabla:
| Objeto | Lectura (r) | Escritura (w) | Ejecución (x) |
| Archivo | Permite leer el contenido del archivo. | Permite alterar el contenido del archivo. | Permite ejecutar el archivo como un programa |
| Directorio | Permite listar el contenido del directorio. | Permite crear, mover, renombrar y borrar archivos en el directorio. | Permite leer y grabar archivos en el directorio, así como cambiar el directorio actual al directorio con "cd". |
Los permisos se graban en forma binaria, con 12 bits para cada archivo en el sistema, y estos bits pueden ser representados en forma octal, según la siguiente figura:
Bits de Permisos |
Bits de permisos especiales en Linux
Los tres primeros bits de izquierda a derecha son bits de atributos especiales, a saber:
SUID (Set User ID): El bit de SUID afecta únicamente a los archivos ejecutables. Normalmente los programas se ejecutan con el permiso del usuario que los ejecutó. El SUID cambia esta condición, haciendo que el programa se ejecute bajo los permisos del usuario Propietario del archivo, sin importar quién lo llamó. El SUID generalmente se utiliza para dar a un programa permisos de root. Es necesario que el administrador tenga mucho cuidado al utilizar el SUID, ya que un programa malintencionado puede tener acceso elevado al sistema;
SGID (Set Group ID): El bit de SGID funciona como el bit SUID. Hace que los programas se ejecuten bajo el permiso de grupo del propietario del archivo. Si se aplica a un directorio, el SGID hará que todos los archivos creados dentro de este directorio tengan el mismo grupo del directorio;
Sticky (Pegado en memoria): El bit especial llamado sticky o bit de pegado en memoria originalmente hacía que los programas permanezcan en la memoria incluso después de terminados. Esto hacía que los programas se ejecuten más rápidamente la próxima vez que sean llamados. Este bit cuando se aplica en directorios hace que únicamente el propietario del directorio, el propietario del archivo o root puedan renombrar o borrar archivos en este directorio.
En las implementaciones recientes en Linux y Unix este bit ya no se usa para "pegar en memoria", sino para evitar que archivos que lo tengan habilitado sean borrados por usuarios que no sean su propietario. Si está habilitado en un directorio este bit confiere que su contenido pueda únicamente ser borrado por los respectivos propietarios de los archivos contenidos en él, el propio propietario del directorio o root.
Lógicamente, el administrador no necesita escribir los permisos en 12 bits. De esta forma, los permisos pueden ser representados por letras o en octetos según la siguiente tabla:
| Octal | Binario | Letras | Descripción |
| 0 | 000 | --- | Sin acceso |
| 1 | 001 | --x | Solo Ejecución |
| 2 | 010 | -w- | Solo Escritura |
| 3 | 011 | -wr | Solo Escritura y Ejecución |
| 4 | 100 | r-- | Solo Lectura |
| 5 | 101 | r-x | Solo Lectura y Ejecución |
| 6 | 110 | rw- | Solo Lectura y Escritura |
| 7 | 111 | rwx | Lectura, Escritura y Ejecución |
Esta representación puede ser utilizada para cada clase (Propietario, Grupo y Otros), así como para los bits especiales (SUID, SGID, Sticky).
Ejemplo:
rwxr-x--- root users Script.sh
En el ejemplo, el archivo Script.sh tiene permisos de lectura, grabación y ejecución (rwx) para el usuario root, permisos de lectura y ejecución (r-x) para el grupo users y ningún (---) permiso para otros usuarios que no sean del grupo users.
Los permisos del archivo Script.sh pueden representarse mediante el octeto 750, siendo 7 (4+2+1) para los permisos del propietario del archivo (rwx), 5 (4+1) para los permisos del Grupo (r-x) y 0 (---) para los permisos de Otros.
De esta forma, lectura (r) tendrá el valor de 4, escritura (w) tendrá valor 2, y ejecución tendrá valor (1). Entonces, para cada clase de permiso - propietario, grupo, u otros - se suman los valores del permiso, de la forma que rwxr-x---, cuando se suman por grupo, tendrán el permiso 750 (4+2+1, 4+0+1, 0+0+0).
Como los bits de permisos especiales se utilizan con poca frecuencia y bajo condiciones especiales, se representan con la letra (s) en lugar del (x) de ejecución para los bits SUID y SGID en las clases de Propietario del archivo y Grupo, y (t) en lugar del (x) para el bit sticky en la clase de Otros.
Vea el Ejemplo:
rwsr-x--- root users Firewall
El archivo Firewall tiene permiso de lectura, escritura y ejecución (rws) para el usuario root, lectura y ejecución (r-x) para usuarios del grupo users y ningún permiso (---) como Otros.
Y además posee el bit de SUID habilitado (la "s" en lugar de "x" para el Propietario del archivo).
De esta forma, el programa Firewall tiene poderes de superusuario cuando se ejecuta, ya que su propietario es root. Sus permisos también pueden representarse mediante el octeto 4750.
Conozca el Curso en Línea de Pfsense de Certificación Linux!
No necesitas memorizar la tabla de permisos
Basta con memorizar que los permisos de Lectura siempre tienen el valor 4.
Los permisos de Escritura siempre tienen el valor 2 y los permisos de ejecución siempre el valor 1.
Las tres clases de permisos (Propietario, Grupo y Otros) se representan mediante 3 números.
Si descompone cada número, encontrará los permisos de cada clase. Vea la figura siguiente:
Permisos en Octetos |
Aprenda mucho más sobre Linux en nuestro curso en línea. Puede realizar la inscripción aquí. Si ya tiene una cuenta, o quiere crear una, simplemente ingrese o cree su usuario aquí.
¿Le gustó? Comparta
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.
Clases de Permisos
Cómo leer la salida del comando ls
Bits de Permisos
Permisos en Octetos