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).
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.[1]
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.[1]
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.[2]
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).
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:
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:
Estos son algunos ejemplos de notación simbólica:
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 | Ejecutable1 | No ejecutable² |
---|---|---|---|
Set User ID (setuid) | Usuario | s | S |
Set Group ID (setgid) | Grupo | s | S |
Sticky | Otros | t | T |
He aquí un ejemplo:
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:
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:
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 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.