GNU/Linux >> Tutoriales Linux >  >> Linux

¿Precedencia del propietario del usuario y del grupo en los permisos de archivo?

Acabo de encontrarme con algo inesperado (para mí) con respecto a los permisos de archivos en Linux (Arch Linux). Básicamente tengo:

  • userX en groupX
  • fileX userX:groupX ---rwx----

Lo que me desconcierta:no puedo realizar ninguna acción (rwx ) en fileX . ¿Es esto correcto? ¿Alguien puede confirmar que este es el comportamiento esperado?

Las únicas acciones que puedo realizar son mv y rm porque tengo permisos de escritura en el directorio principal.

La cuestión es que siempre pensé que estos permisos colapsan entre sí, comenzando con el más general (otro -> grupo -> usuario). En otras palabras, si o=rwx ¿A quién le importa cuáles son los permisos para el grupo y el usuario?
Aparentemente este no es el caso, pero no tiene mucho sentido para mí; parece contradictorio. Lo único en lo que este enfoque parece ser útil es en excluir fácilmente a una persona / grupo muy específico, lo que no parece una forma inteligente de hacerlo (en mi humilde opinión). Además, el propietario (¿y el grupo?) debería poder chmod de todos modos, ¿verdad? ¿Alguna idea sobre este asunto?

Respuesta aceptada:

La cuestión es que siempre pensé que estos permisos colapsan entre sí, comenzando con el más general (otro -> grupo -> usuario).

Si fuera el caso, "otros" permisos se aplicarían a todos.

En otras palabras, si o=rwx, ¿a quién le importa cuáles son los permisos para el grupo y el usuario?

Eso es diferente de tu oración anterior. Aquí está implicando que los permisos están combinados con or, p. ese usuarioX tiene el permiso de lectura si el usuarioX posee el archivo y el archivo es legible por el usuario, o si un grupo al que pertenece el usuarioX posee el archivo y el archivo es legible por el grupo, o si el archivo es legible por otros. Pero no es así como funciona. De hecho, o=rwx significa que el rwx los permisos se aplican a otros, pero no dice nada sobre entidades que no son otros.

Primero, no importa directamente a qué grupos pertenece un usuario. El kernel no tiene una noción de usuarios que pertenecen a grupos. Lo que el kernel mantiene es, para cada proceso, una ID de usuario (la UID efectiva) y una lista de ID de grupo (el GID efectivo y los GID complementarios). Los grupos se determinan en el momento del inicio de sesión, mediante el proceso de inicio de sesión: es el proceso de inicio de sesión el que lee la base de datos del grupo (por ejemplo, /etc/group ). Los ID de usuario y grupo son heredados por procesos secundarios¹.

Cuando un proceso intenta abrir un archivo, con los permisos tradicionales de Unix:

  • Si el usuario propietario del archivo es el UID efectivo del proceso, se utilizan los bits de permiso del usuario.
  • De lo contrario, si el grupo propietario del archivo es el GID efectivo del proceso o uno de los ID de grupo complementarios del proceso, se utilizan los bits de permiso del grupo.
  • De lo contrario, se utilizan los otros bits de permiso.

Solo se utiliza un conjunto de bits rwx. El usuario tiene prioridad sobre el grupo que tiene prioridad sobre otros. Cuando existen listas de control de acceso, se generaliza el algoritmo descrito anteriormente:

  • Si hay una ACL en el archivo para el UID efectivo del proceso, entonces se usa para determinar si se otorga acceso.
  • De lo contrario, si hay una ACL en el archivo para el GID efectivo del proceso o uno de los ID de grupo complementarios del proceso, se utilizan los bits de permiso de grupo.
  • De lo contrario, se utilizan los otros bits de permiso.
Relacionado:¿Cómo sabe el comando xdg-open qué aplicación usar para abrir un archivo?

Así -rw----r-- alice interns indica un archivo que Alice puede leer y escribir, y que pueden leer todos los demás usuarios, excepto los internos. Un archivo con permisos y propiedad ----rwx--- alice interns es accesible solo para pasantes, excepto Alice (ya sea que sea pasante o no). Dado que Alice puede llamar a chmod cambiar los permisos, esto no proporciona ninguna seguridad; es un caso extremo. En sistemas con ACL, el mecanismo generalizado permite eliminar permisos de usuarios específicos o grupos específicos, lo que a veces es útil.

El uso de un solo conjunto de bits, en lugar de hacer or-ing en todos los bits para cada acción (leer, escribir, ejecutar), tiene varias ventajas:

  • Tiene el efecto útil de permitir la eliminación de permisos de un conjunto de usuarios o grupos, en sistemas con ACL. En sistemas sin ACL, los permisos se pueden eliminar de un grupo.
  • Es más simple de implementar:verifique un conjunto de bits, en lugar de combinar varios conjuntos de bits.
  • Es más sencillo analizar los permisos de un archivo, porque se requieren menos operaciones.

¹ Pueden cambiar cuando se ejecuta un proceso setuid o setgid. Esto no está relacionado con el problema en cuestión.


Linux
  1. Linux chmod y chown:cómo cambiar los permisos y la propiedad de los archivos en Linux

  2. Cómo crear y eliminar un grupo de usuarios en Linux

  3. Linux:¿comprensión de los permisos y tipos de archivos de Unix?

  4. ¿Crear un archivo como un usuario y grupo diferente?

  5. Preguntas de la entrevista de Linux:permisos básicos de archivos y directorios

Cómo cambiar el propietario del archivo/grupo con el comando chown en Linux

Comando Chown en Linux (propiedad del archivo)

Comando id de Linux - Imprimir información de ID de usuario e ID de grupo

Comprender los permisos básicos de archivos y la propiedad en Linux

¿Cómo puedo ordenar ls por propietario y grupo?

Problemas con el comando Rsync, los permisos de propietario y grupo no cambian