La especificación POSIX para la chown
utilidad menciona en su sección de justificación acerca de la chown user:group
sintaxis (anteriormente chown user.group
) (énfasis mío):
El método 4.3 BSD para especificar tanto el propietario como el grupo se incluyó en este volumen de POSIX.1-2008 porque:
- Hay casos en los que no se pudo lograr la condición final deseada utilizando las utilidades chgrp y chown (que solo cambiaron la ID de usuario). (Si el propietario actual no es miembro del grupo deseado y el propietario deseado no es miembro del grupo actual, la función chown () podría fallar a menos que tanto el propietario como el grupo se cambien al mismo tiempo).
Pensé que la user:group
sintaxis era algo conveniente. Ahora lo anterior implica que hay cosas que puedes hacer con las chown user:group
que no puedeschgrp group; chown user
Ahora ese texto no tiene sentido para mí. En 4.3BSD, solo la raíz podría cambiar el archivo del propietario, por lo que en cualquier caso no hay restricciones en lo que puede hacer.
SysV y algunos otros sistemas permiten (o solían permitir) que el propietario de un archivo cambie el usuario y el grupo de un archivo a cualquier cosa, pero incluso en esos sistemas, ese texto anterior no tiene sentido para mí. OK, si uno hace una chown someone-else the-file
, no puede hacerlo chgrp something-else the-file
después porque ya no es el propietario del archivo, pero no hay nada que le impida hacer lo chgrp
primero (seguir siendo el propietario del archivo) y chown
después, y eso no es lo que el El texto anterior es exactamente lo que dice.
No entiendo qué tiene que ver el problema con el propietario deseado y no es miembro del grupo actual .
Entonces, ¿cuáles son las condiciones para las cuales la función chown () podría fallar a menos que tanto el propietario como el grupo cambien al mismo tiempo y en qué sistema?
chown me:my-group file
si el archivo está en una ubicación donde tengo acceso de lectura / escritura (no fijo). No pude chgrp primero como no dueño. No pude hacer un chown primero, ya que esto daría como resultado un archivo que no pude crear: ser dueño de un archivo con un grupo del que no soy miembro.Respuestas:
El subsistema Microsoft Interix Unix (ahora retirado) para su núcleo NT se ocupó de manera un poco diferente con los permisos de usuarios y grupos que algunos otros:
Aquí hay algunos extractos manuales más específicos:
Según lo leí, eso significa que si su cuenta de usuario pertenece a un grupo de Windows con privilegios suficientes para modificar los permisos de un archivo que es propiedad de ese grupo, entonces es posible que
chgrp
ese archivo esté fuera del control de su cuenta de usuario. Esto equivale a un control menor del que podría tener con parámetroschown
explícitosuser:group
. En ese contexto sin la posibilidad de declararuser:
y:group
nunca podría lograr los mismos resultados que de otra manera.Aquí hay un enlace a una visión detallada de cómo Interix interactúa con las ACL de Windows con un enfoque en cómo dicho conocimiento podría aplicarse a los sistemas de archivos Samba en otras variantes de Unix.
Aquí hay un enlace a un documento de Solaris ahora obsoleto que describe el sintonizable
rstchown
que ...Aparentemente, si el parámetro se establece en un valor de
0
...Dicha opción no invalida la conformidad POSIX de Solaris . Solo que sea una opción lo califica como conforme :
La
chown()
función del sistema - que es la llamada al sistema documentado hecho tanto por loschown
ychgrp
Shell Utilidades - se especifica a fallar por numerosas razones. Entre ellos:Sin embargo, el comportamiento de otorgar derechos de modificación de permisos a usuarios no root nunca ha sido exclusivo de Solaris. Existe una excelente cobertura, aunque algo anticuada, de los permisos de archivos Unix en esta publicación del foro en la que el autor declara:
Otra buena - y más reciente - publicación de la lista de correo cita esto y continúa:
Y como señalas en 2003 :
... que dependía de un
setprivgroup
parámetro de configuración .En cualquier caso en el que un usuario no root pueda manipular permisos de archivos, es concebible, como se menciona en la justificación citada en su pregunta, que un usuario pueda tener
chown
un archivo que ese usuario posee para que sea propiedad de otro usuario. Si la propiedad del grupo del archivo y loschown
grupos del usuario no se alinean, el usuario ya no podrá modificar ese archivo.En este escenario,
chown
entonceschgrp
fallaría, ya que el usuario ya no tendría permisos para alterar los permisos de ese archivo, mientras quechown user:group
, siempre y cuando el grupo esté entre los suyos, tendría éxito.Hay probablemente muchas otras situaciones de nicho que pudieran derivarse de manera similar, que podrían incluir el directorio pegajosa y / o setgid pedazos, sistema de archivos y / o listas de control de acceso específicos de aplicación. Este hilo es interesante, por ejemplo. Las innumerables permutaciones están mucho más allá de mi débil comprensión, por lo que esta respuesta es engañosa. Si está leyendo esto, cree que vale la pena mejorarlo y cree que sabe cómo hacerlo, por favor hágalo .
También hay una extensa documentación sobre los diversos efectos posibles de los permisos de archivos, el recorrido del árbol y los enlaces simbólicos que podrían
-R
provocar un fallo similar con respecto a laschown
aplicaciones ecursive aquí:De los títulos de sección POSIX XRAT Terceros y Cuarto Dominios :
Y desde la
chgrp
página POSIX propiamente dicha, esto apunta a una posible-R
acción ecursiva incompleta , o al menos a lo que solía ser:fuente
chgrp
chown
... no se comporte como se espera ...Supuesto 1: las reglas para determinar si
chown
tiene éxito verifican el usuario objetivo y agrupan las partes de forma independiente, es decir, son de la formauser_condition(target_uid, other_environment_parameters) && group_condition(target_gid, other_environment_parameters)
.Asunción 2:
chown(file, -1, -1)
tiene éxito.Supuesto 3: las reglas para determinar si
chown
tiene éxito no dependen del grupo al que pertenece actualmente el archivo.Corolario: si
chown(file, uid, gid)
tendría éxito, entonces también lo haríachown(file, -1, gid) && chown(file, uid, -1)
.No sé de una variante de Unix que violaría cualquiera de estos supuestos, parecen bastante seguros.
Esta frase tiene el aspecto de algo que alguien en el comité dijo cuando estaban cansados después de horas de debatir cuántas opciones cabían en la cabeza de una
ps
llamada, o que la secretaria transcribió mal, y que nadie captó durante la revisión. Después de todo, hay otras buenas razones para permitir que el usuario y el grupo se cambien automáticamente, incluida la razón de rendimiento también citada en la justificación POSIX, así como la atomicidad (ah, si solo hubiera una sola llamada para cambiar la propiedad y los permisos )Un caso en el que la suposición 3 podría estar equivocada es en un sistema en el que un proceso puede obtener la capacidad de cambiar los propietarios de los archivos, pero solo si tienen permiso de escritura en el archivo. Si bien es algo realista, no conozco ningún sistema en el que este sea el caso. Luego,
chgrp
a un grupo de un proceso que no se ejecuta como root ni como el usuario propietario del archivo podría hacer que el archivo esté fuera del límite para más adelantechown
.Para una llamada recursiva, hay casos extremos en los que un pase completo
chgrp
seguido de un pase completochown
puede fallar cuando un solo pase tiene éxito. Este no es un argumento muy convincente porque involucra directorios que el propietario no tiene permiso para recorrer, y una aplicación que quisiera proteger contra todos estos casos necesitaría jugar con los permisos de todos modos. No obstante, técnicamente cumple con la condición de esta justificación. Suponga que el proceso en ejecución tiene un usuario efectivoalice
, un grupo efectivostaff
y la capacidad de cambiar los propietarios de archivos de manera arbitraria (no solo para regalarlos; varias variantes de Unix tienen esa capacidad, aunque rara vez se otorga a procesos no root).fuente
chgrp
ochown
podría tener efectos secundarios que afectan la capacidad de hacer el otro. Por ejemplo,chown
elimina la capacidad dechgrp
, eso es un hecho.chgrp
borra el bit setuid / setgid, puede borrar alguna forma de ACL u otra forma de contexto de seguridad ...chown
seguidochgrp
podría fallar, pero la pregunta es sobrechgrp
seguido porchown
. Hmmm, contexto de seguridad ... tal vez en un sistema con control de acceso obligatorio, ¿chgrp
podría contaminar un archivo y hacer que ya no sea procesable? Eso parece exagerado.dir
, por lo que para que eso funcione,chown
primero necesitaría procesar la profundidad de los archivos y no sé de ninguna implementación que lo haga. Por lo tanto, es un caso casi válido en el que chgrp + chown fallaría donde chmod u: g no podría, pero eso realmente no cuadra con el texto de la justificación.chown
teorías recursivas de casos extremos parecen estar en conflicto.