La mayoría de los sistemas de archivos incluyen atributos de archivos y directorios que controlan la capacidad de los usuarios para leer, cambiar, navegar y ejecutar el contenido del sistema de archivos. En algunos casos, las opciones o funciones del menú pueden hacerse visibles u ocultarse según el nivel de permiso del usuario; Este tipo de interfaz de usuario se conoce como basada en permisos .
Hay dos tipos de permisos ampliamente disponibles: permisos del sistema de archivos POSIX y listas de control de acceso (ACL) que son capaces de un control más específico.
El sistema de archivos original de la tabla de asignación de archivos 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 implementan 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 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 sólo permisos tradicionales de Unix si es posible. macOS también sigue siendo compatible con el atributo "Protegido" del Mac OS clásico.
La compatibilidad con Solaris ACL 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 ACL POSIX.1e. Existe soporte experimental para 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 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/banderas de Archivar, Leer, Escribir, Ejecutar y Eliminar (conocidos colectivamente como ARWED). En AmigaOS 2.x y superiores, se agregaron permisos/indicadores adicionales Hold, Script y Pure.
El sistema operativo OpenHarmony junto con su ecosistema del lado del cliente en Oniro OS y HarmonyOS con las versiones HarmonyOS NEXT y también el sistema operativo del servidor openEuler basado en Linux utiliza de forma nativa su sistema de archivos distribuido Harmony (HMDFS) que admite el administrador de tokens de acceso ( control de acceso basado en roles ) y Core File. Kit API basado en capacidades con gestión de permisos granular con excepción de openEuler. [8] [ verificación fallida ]
Los permisos en sistemas de archivos tipo Unix se definen 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 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 permisos distintos al propietario.
A los archivos y directorios se les asigna un grupo , que define la clase de grupo del archivo . Se aplican permisos distintos 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 constituyen la clase otros de un archivo . Se aplican distintos permisos a otros.
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 luego otros. Por ejemplo, el usuario propietario del archivo tendrá los permisos otorgados a la clase de usuario independientemente de los permisos asignados a la clase de grupo o a otras clases.
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 más frecuentemente mal entendidos". [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, estos son atributos, pero se denominan permisos o modos. Estos modos especiales son para un archivo o directorio en general, no por 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 El bit pegajoso se establece en la tríada para los demás.
Estos modos adicionales también se conocen como bit setuid , bit setgid y bit pegajoso , debido a que cada uno de ellos 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 están 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 grupal . El tercer conjunto representa la clase de los demás .
Cada uno de los tres caracteres representa los permisos de lectura, escritura y ejecución:
r
si la lectura está permitida, -
si no.w
si se permite la escritura, -
si no.x
si la ejecución está permitida, -
si no lo está.Los siguientes son algunos ejemplos de notación simbólica:
-rwxr-xr-x
: un archivo normal cuya clase de usuario tiene permisos completos y cuyo grupo y otras clases tienen solo 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, los símbolos adicionales en la ls -l
pantalla representan características de permisos adicionales:
ls -Z
.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 adhesivo o de texto modifica el Carácter ejecutable en la tríada para otros. Para los atributos setuid o setgid, en la primera o segunda tríada, x
se convierte s
y -
se convierte S
. Para el atributo adhesivo o de texto, en la tercera tríada, x
se convierte t
y -
se convierte T
. Aquí hay un ejemplo:
-rwsr-Sr-t
: un archivo cuya clase de usuario tiene permisos de lectura, escritura y ejecución; cuya clase grupal tiene permiso de lectura; cuya clase otros tiene permisos de lectura y ejecución; y que tiene establecidos los atributos setuid , setgid y sticky .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 de la derecha representa un componente diferente de los permisos: propietario, grupo y otros. (Si hay un cuarto dígito presente, el dígito más a la izquierda (de orden superior) aborda tres atributos adicionales, el bit setuid , el bit setgid y el bit adhesivo .)
Cada uno de estos dígitos es la suma de los bits que lo componen en el sistema de numeración binario . Como resultado, 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. Más técnicamente, esta es una representación octal de un campo de bits : cada bit hace referencia a un permiso separado, 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 dada en notación octal:
Algunos sistemas se diferencian del modelo POSIX tradicional de usuarios y grupos al crear 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 umask de 002 sin permitir que otros usuarios escriban en archivos recién creados en directorios normales porque dichos archivos están asignados al grupo privado del usuario creador. Sin embargo, cuando es deseable compartir archivos, el administrador puede crear un grupo que contenga los usuarios deseados, crear un directorio de escritura grupal asignado al nuevo grupo y, lo más importante, configurar el directorio como gid. Hacerlo setgid hará que los archivos creados en él se asignen al mismo grupo que el directorio y la umask 002 (habilitada mediante el uso de grupos privados de usuarios) garantizará que otros miembros del grupo puedan escribir en esos archivos. [11] [12]