La mayoría de los sistemas de archivos incluyen atributos de archivos y directorios que controlan la capacidad de los usuarios para leer, modificar, navegar y ejecutar el contenido del sistema de archivos. En algunos casos, las opciones o funciones del menú pueden hacerse visibles u ocultas según el nivel de permiso del usuario; este tipo de interfaz de usuario se conoce como controlada por permisos .
Hay dos tipos de permisos ampliamente disponibles: los permisos del sistema de archivos POSIX y las listas de control de acceso (ACL), que son capaces de realizar un control más específico.
El sistema de archivos de la tabla de asignación de archivos original tiene un atributo de solo lectura para todos los usuarios por archivo.
NTFS implementado en Microsoft Windows NT y sus derivados, utiliza ACL [1] para proporcionar un conjunto complejo de permisos.
OpenVMS utiliza un esquema de permisos similar al de Unix. Hay cuatro categorías (sistema, propietario, grupo y mundo) y cuatro tipos de permisos de acceso (lectura, escritura, ejecución y eliminación). Las categorías no están separadas entre sí: Mundo incluye Grupo, que a su vez incluye Propietario. La categoría Sistema incluye de forma independiente a los usuarios del sistema. [2]
HFS y su sucesor HFS+ , tal como se implementaron en los sistemas operativos Mac OS clásicos , no admiten permisos.
macOS utiliza permisos compatibles con POSIX y los admite tanto en HFS+ como en APFS . A partir de la versión 10.4 ("Tiger"), también admite el uso de ACL de NFSv4 además de permisos compatibles con POSIX. El Manual de administración de servicios de archivos de Apple Mac OS X Server versión 10.4+ recomienda utilizar solo permisos tradicionales de Unix si es posible. macOS también sigue siendo compatible con el atributo "Protegido" del Mac OS clásico.
La compatibilidad de ACL de Solaris depende del sistema de archivos que se utilice; el sistema de archivos UFS más antiguo admite ACL POSIX.1e, mientras que ZFS solo admite ACL NFSv4. [3]
Linux admite ext2 , ext3 , ext4 , Btrfs y otros sistemas de archivos, muchos de los cuales incluyen listas de control de acceso (ACL) POSIX.1e. Existe compatibilidad experimental con listas de control de acceso (ACL) NFSv4 para sistemas de archivos ext3 [4] y ext4.
FreeBSD admite ACL POSIX.1e en UFS y ACL NFSv4 en UFS y ZFS. [5] [6]
IBM z/OS implementa la seguridad de archivos utilizando RACF (Resource Access Control Facility) [7] [ enlace muerto permanente ]
El sistema de archivos de AmigaOS, AmigaDOS, admite un sistema de permisos relativamente avanzado para un sistema operativo de un solo usuario. En AmigaOS 1.x, los archivos tenían permisos/indicadores de archivado, lectura, escritura, ejecución y eliminación (conocidos colectivamente como ARWED). En AmigaOS 2.x y versiones posteriores, se agregaron permisos/indicadores adicionales de retención, secuencias de comandos y puros.
El sistema operativo OpenHarmony junto con su ecosistema del lado del cliente en Oniro OS y HarmonyOS con versiones HarmonyOS NEXT y también el sistema operativo de servidor openEuler basado en Linux utiliza de forma nativa su Harmony Distributed File System (HMDFS) que admite el administrador de token de acceso ( control de acceso basado en roles ) y la capacidad de API Core File Kit con administración de permisos granulares con excepción de openEuler. [8] [ verificación fallida ]
Los permisos en sistemas de archivos tipo Unix están definidos en el estándar POSIX.1-2017 [9] , que utiliza tres ámbitos o clases conocidos como propietario , grupo y otros . Cuando se crea un archivo, sus permisos están restringidos por la máscara de usuario del proceso que lo creó.
Los archivos y directorios son propiedad de un usuario. El propietario determina la clase de usuario del archivo . Se aplican distintos permisos al propietario.
A los archivos y directorios se les asigna un grupo , que define la clase de grupo del archivo. Se aplican distintos permisos a los miembros del grupo del archivo. El propietario puede ser miembro del grupo del archivo.
Los usuarios que no son propietarios ni miembros del grupo forman parte de la clase "otros" de un archivo . A los demás se les aplican permisos distintos.
Los permisos efectivos se determinan en función de la primera clase a la que pertenece el usuario en el orden de usuario, grupo y otros. Por ejemplo, el usuario que es el propietario del archivo tendrá los permisos asignados a la clase de usuario independientemente de los permisos asignados a la clase de grupo o a la clase otros.
Los sistemas tipo Unix implementan tres permisos específicos que se aplican a cada clase:
El efecto de establecer los permisos en un directorio, en lugar de en un archivo, es "uno de los problemas de permisos de archivos que más frecuentemente se malinterpretan". [10]
Cuando no se establece un permiso, se deniegan los derechos correspondientes. A diferencia de los sistemas basados en ACL, los permisos en sistemas tipo Unix no se heredan. Los archivos creados dentro de un directorio no necesariamente tienen los mismos permisos que ese directorio.
Los sistemas tipo Unix suelen emplear tres modos adicionales. En realidad, son atributos, pero se los denomina permisos o modos. Estos modos especiales se aplican a un archivo o directorio en general, no a una clase, aunque en la notación simbólica (ver más abajo) el bit setuid se establece en la tríada para el usuario, el bit setgid se establece en la tríada para el grupo y el bit sticky se establece en la tríada para los demás.
Estos modos adicionales también se denominan bit setuid , bit setgid y bit sticky , debido a que cada uno ocupa solo un bit.
Los permisos de Unix se representan en notación simbólica o en notación octal.
La forma más común, tal como la utiliza el comando ls -l
, es la notación simbólica .
El primer carácter de la ls
pantalla indica el tipo de archivo y no está relacionado con los permisos. Los nueve caracteres restantes se encuentran en tres conjuntos, cada uno de los cuales representa una clase de permisos como tres caracteres. El primer conjunto representa la clase de usuario . El segundo conjunto representa la clase de grupo . El tercer conjunto representa la clase de otros .
Cada uno de los tres caracteres representa los permisos de lectura, escritura y ejecución:
r
si se permite la lectura, -
si no.w
Si se permite escribir, -
si no.x
si se permite la ejecución, -
si no.Los siguientes son algunos ejemplos de notación simbólica:
-rwxr-xr-x
:un archivo regular cuya clase de usuario tiene permisos completos y cuyo grupo y otras clases solo tienen permisos de lectura y ejecución.crw-rw-r--
:un archivo especial de caracteres cuyas clases de usuario y grupo tienen permisos de lectura y escritura y cuyas otras clases solo tienen permiso de lectura.dr-x------
: un directorio cuya clase de usuario tiene permisos de lectura y ejecución y cuyo grupo y otras clases no tienen permisos.En algunos sistemas de permisos, símbolos adicionales en la ls -l
pantalla representan características de permisos adicionales:
ls -Z
. Los detalles se pueden indicar con el comando .Para representar los atributos setuid , setgid y sticky o text , se modifica el carácter ejecutable ( x
o -
). Aunque estos atributos afectan al archivo en general, no solo a los usuarios de una clase, el atributo setuid modifica el carácter ejecutable en la tríada para el usuario, el atributo setgid modifica el carácter ejecutable en la tríada para el grupo y el atributo sticky o text modifica el carácter ejecutable en la tríada para los demás. Para los atributos setuid o setgid, en la primera o segunda tríada, el x
becomes s
y el -
becomes S
. Para el atributo sticky o text, en la tercera tríada, el x
becomes t
y el -
becomes T
. A continuación, se incluye un ejemplo:
-rwsr-Sr-t
: un archivo cuya clase de usuario tiene permisos de lectura, escritura y ejecución; cuya clase de grupo tiene permisos de lectura; cuya clase others tiene permisos de lectura y ejecución; y que tiene los atributos setuid , setgid y sticky establecidos.Otro método para representar los permisos de Unix es una notación octal (base 8) como se muestra en stat -c %a
. Esta notación consta de al menos tres dígitos. Cada uno de los tres dígitos más a la derecha representa un componente diferente de los permisos: propietario, grupo y otros. (Si hay un cuarto dígito, el dígito más a la izquierda (de orden superior) se refiere a tres atributos adicionales, el bit setuid , el bit setgid y el bit sticky ).
Cada uno de estos dígitos es la suma de los bits que lo componen en el sistema de numeración binario . Como resultado, los bits específicos se suman a la suma, tal como se representa mediante un número:
Estos valores nunca producen combinaciones ambiguas; cada suma representa un conjunto específico de permisos. En términos más técnicos, se trata de una representación octal de un campo de bits : cada bit hace referencia a un permiso independiente, y agrupar 3 bits a la vez en octal corresponde a agrupar estos permisos por usuario, grupo y otros.
Estos son los ejemplos de la sección de notación simbólica dados en notación octal:
Algunos sistemas se apartan del modelo POSIX tradicional de usuarios y grupos creando un nuevo grupo (un "grupo privado de usuarios") para cada usuario. Suponiendo que cada usuario es el único miembro de su grupo privado de usuarios, este esquema permite utilizar una máscara de usuario 002 sin permitir que otros usuarios escriban en archivos recién creados en directorios normales, ya que dichos archivos se asignan al grupo privado del usuario creador. Sin embargo, cuando se desea compartir archivos, el administrador puede crear un grupo que contenga los usuarios deseados, crear un directorio en el que el grupo pueda escribir y asignarlo al nuevo grupo y, lo más importante, hacer que el directorio sea setgid. Hacerlo setgid hará que los archivos creados en él se asignen al mismo grupo que el directorio y la máscara de usuario 002 (habilitada mediante el uso de grupos privados de usuarios) garantizará que otros miembros del grupo puedan escribir en esos archivos. [11] [12]