# Permisos de acceso a archivos

La mayoría de los sistemas de archivos modernos permiten asignar permisos (o derechos de acceso) a los archivos para determinados usuarios y grupos de usuarios. De esta manera, se puede restringir o permitir el acceso de un determinado usuario a un archivo para su visualización de contenidos, modificación y/o ejecución (en caso de un archivo ejecutable).

## Diferencias entre los sistemas operativos

Los sistemas UNIX o compatibles POSIX, incluyendo sistemas basados en Linux y Mac OS X, poseen un sistema simple para el manejo de permisos sobre archivos individuales. POSIX especifica también un sistema de listas de control de acceso (ACLs), pero solo está implementado por ciertos sistemas de archivos y sistemas operativos. Como notación particular los "archivos ocultos" simplemente se denotan con un punto al comienzo del nombre, no existe un atributo específico para este tipo de archivos a diferencia de los ficheros ejecutables que sí tienen su atributo diseñado para tal efecto. Los archivos ejecutables tienen un atributo para garantizar su permiso de uso como tal.
Las variantes de DOS (incluyendo los productos de Microsoft MS-DOS, Windows 95, Windows 98, y Windows Me) no implementan ningún sistema de permisos. Existe un atributo de "solo lectura" y un atributo de "archivo oculto" que pueden ser asignados o quitados de cualquier archivo por cualquier usuario.
Microsoft Windows NT y sus derivados (incluyendo Windows 2000 y Windows XP), así como VMS y OpenVMS usan listas de control de acceso (ACLs) para administrar un conjunto más complejo y variado de permisos. Como notación particular los archivos ejecutables se denotan por su extensión (.exe, .com, .bat, entre otros) y no tienen un atributo específico en el sistema de archivos que garantice su respectivo permiso de ejecución.

## Sistemas de seguridad avanzados

A requerimiento del Departamento de Defensa de Estados Unidos se diseñó con base en los requisitos planteados por la Agencia de Seguridad Nacional de ese país un módulo de seguridad para el kernel Linux llamado SELinux (Security-Enhanced Linux) para garantizar el correcto acceso a cada usuario, incluyendo políticas de auditoría.

## Permisos tradicionales en sistemas UNIX/LINUX: Notación

Los permisos de sistemas UNIX se dividen en tres clases, conocidas como usuario, grupo y otros (con frecuencia abreviado UGO, por sus siglas en inglés, User, Group, Others). De hecho, los permisos en Unix son una forma simplificada de listas de control de acceso (ACLs).

### Notación simbólica

Existen muchas formas para representar los esquemas de permisos Unix. La forma más común es la notación simbólica. Este esquema permite representar permisos en una serie de 10 caracteres.
Primer carácter :
| - | archivo regular |
| d | directorio |
| l | enlace simbólico |
| Tres grupos de tres caracteres ||
| primero | lo que el propietario (o dueño) puede hacer |
| segundo | lo que los miembros del grupo de usuarios pueden hacer |
| tercero | lo que el resto de los usuarios pueden hacer |
| La tupla ||
| primero | r: leíble, -: no leíble |
| segundo | w: modificable, -: protegido contra escritura |
| tercero | x: ejecutable, -: no ejecutable |
El primer carácter indica el tipo de archivo:
* '-' denota un archivo regular
* 'd' denota un directorio
* 'b' denota un archivo especial de bloques
* 'c' denota un archivo especial de caracteres
* 'l' denota un enlace simbólico
* 'p' denota un tubo nombrado
* 's' denota un socket de dominio
Cada clase de permisos se representa por tres caracteres. El primer conjunto de caracteres representa la clase de usuario. El segundo conjunto representa la clase de grupo. El tercer y último conjunto de tres caracteres representa la clase del resto.
Cada uno de los tres caracteres representa los permisos de lectura, escritura y ejecución respectivamente:
* 'r' si el bit de lectura está asignado, '-' en caso contrario.
* 'w' si el bit de escritura está asignado, '-' en caso contrario.
* 'x' si el bit de ejecución está asignado, '-' en caso contrario.
Estos son algunos ejemplos de notación simbólica:
* "-rwxr-xr-x" para un archivo regular que tiene todos los permisos asignados para su propietario y solo permisos de lectura y ejecución para el grupo de usuarios del archivo y el resto de los usuarios. Ningún usuario, salvo el propietario, puede modificar los contenidos del archivo.
* "crw-rw-r--" para un archivo especial de caracteres que tiene permisos de lectura y escritura para su propietario y grupo de usuarios y solo permiso de lectura para el resto de los usuarios.
* "dr-x------" para un directorio que tiene permisos de lectura y ejecución únicamente para su propietario.

### Notación simbólica y permisos adicionales

Los tres permisos adicionales se indican cambiando uno de los tres permisos de ejecución según se indica en la tabla siguiente:
| Permiso | Clase | Ejecutable$^1$ | No ejecutable² |
| Set User ID (setuid) | Usuario | s | S |
| Set Group ID (setgid) | Grupo | s | S |
| Sticky | Otros | t | T |
* El carácter que se utilizará para indicar que el bit de ejecución estará asignado también.
* El carácter que se utilizará cuando el bit de ejecución no esté asignado.
He aquí un ejemplo:
* "-rwsr-Sr-x" para un archivo cuya clase de usuario tiene permisos de lectura, escritura y ejecución, cuya clase de grupo tiene permiso de lectura, cuya clase del resto tiene permisos de lectura y ejecución y que tiene los permisos de setuid y setgid asignados.

### Notación octal

Otra forma muy común de representar los permisos Unix es la notación octal, que consiste en un valor de tres o cuatro dígitos en base 8.
Con la notación octal de tres dígitos, cada número representa un componente distinto del conjunto de permisos: clase de usuario, clase de grupo y clase del resto respectivamente.
Cada uno de estos dígitos es la suma de los bits que lo componen (véase también sistema de numeración binario). El peso de cada bit en un dígito es el siguiente:
* El bit de lectura suma 4 al total.
* El bit de escritura suma 2 al total.
* El bit de ejecución suma 1 al total.
Estos valores nunca producen una combinación ambigua: cada suma representa un conjunto específico de permisos.
He aquí los ejemplos de la sección Notación simbólica de más arriba en su notación octal:
* "-rwxr-xr-x" se representa como 755 en notación octal de tres dígitos.
* "-rw-rw-r--" se representa como 664 en notación octal de tres dígitos.
* "-r-x------" se representa como 500 en notación octal de tres dígitos.

### Notación octal y permisos adicionales

Existe también un cuarto dígito para la notación octal. En este nuevo esquema, los tres dígitos descritos antes forman parte de los tres últimos dígitos del valor final. El primer dígito representa los permisos adicionales. En algunos sistemas, este primer dígito no puede omitirse y por lo tanto es común usar los cuatro dígitos (con el primer dígito nulo en caso de que no se deseen permisos adicionales).
El primer dígito se forma también como suma de pesos:
* El bit setuid suma 4 al total.
* El bit setgid suma 2 al total.
* El bit sticky suma 1 al total.
El ejemplo de la sección Notación simbólica y permisos adicionales, "-rwsr-Sr-x" se representa como 6745 en notación octal de cuatro dígitos. Los ejemplos de la sección precedente se representan como 0755, 0664, y 0500 respectivamente en notación octal de cuatro dígitos.