¿Por qué se conservan los permisos de archivo al mover archivos dentro del mismo volumen?

Ocassionalmente, tenemos el problema de que un archivo tiene permisos diferentes de la carpeta en la que se encuentra.

Ahora descubrí que hay un artículo de KB que explica la razón detrás de esto:

De forma predeterminada, un objeto hereda los permisos de su objeto primario, ya sea en el momento de la creación o cuando se copia o se mueve a su carpeta principal. La única excepción a esta regla se produce cuando mueve un objeto a una carpeta diferente en el mismo volumen. En este caso, se conservan los permisos originales.

Así que el usuario movió el archivo de una carpeta a otra y los permisos de la carpeta original se mantuvieron.

Mi pregunta ahora es: ¿por qué existe esta excepción? ¿Cuál es el razonamiento detrás de esto?

He explicado esto en una entrada de blog http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/ pero lo También se explica a continuación.

Cuando se copia un archivo tiene que crear un archivo nuevo y asignarle un nuevo conjunto de permisos para que obtenga los permisos de la carpeta padre como usted sabe.

Cuando un archivo se mueve a otro volumen lo que realmente sucede es que se copia en el nuevo volumen y se elimina el archivo antiguo. Así que el mismo proceso se repite como antes, ya que es un nuevo archivo de nuevo y necesita permisos establecidos.

Cuando el archivo se mueve dentro del mismo volumen, realmente no ocurre nada (a nivel de disco). Sólo cambia la ubicación de la ruta lógica del archivo. Los datos reales y el archivo físico del disco no se han tocado o modificado. ¿Alguna vez te has dado cuenta cuando mueves un archivo de 5 GB a otra carpeta en la misma unidad que se hace casi al instante? Esta es la razón, porque en realidad no se ha movido, pero el puntero a donde el archivo lógicamente existe ha cambiado. Como no se modificó de ninguna manera los permisos no cambian también.

Esta es la razón de este comportamiento.

Editar: Somthing Además he olvidado mencionar … El artículo de MS no es del todo exacto. MS cita:

De forma predeterminada, un objeto hereda los permisos de su objeto principal, ya sea en el momento de la creación o cuando se copia o se mueve a su carpeta principal. La única excepción a esta regla se produce cuando mueve un objeto a una carpeta diferente en el mismo volumen. En este caso, se conservan los permisos originales.

La cita anterior sólo se aplica a los objetos que han dado permisos de secciones EXPLICITLY defined (desactivar la herencia). Como se mencionó en mis comentarios, se trata de mantener las entradas de ACL tan eficientes como sea posible. Considere el siguiente ejemplo:

Para mantener la explicación simple, digamos que tiene una carpeta establecida para permitir que los usuarios modifiquen derechos solamente. Debajo de esto hay miles de archivos y ninguno de ellos tiene permisos explícitos establecidos. No es muy eficiente crear ACL para cada archivo, ya que son exactamente los mismos permisos por lo que establece una entrada ACL para la carpeta. Este siguiente bit es muy importante de entender; Los archivos en sí no tienen permisos de ACL. Así que cuando mueva cualquiera de estos archivos a una nueva carpeta en el mismo volumen, MS reclama que los permisos se muevan con él (como la cita anterior). Pregúntate a ti mismo … ¿cómo? No había permisos en el archivo en el primer lugar para moverse a través. Esto es realmente incorrecto y lo probé ahora para confirmarlo. Digamos que la carpeta de destino a la que se está moviendo el archivo tiene Perms para permitir que todos los grupos modifiquen derechos solamente. Puesto que el archivo no tiene ACL directamente hereda la ACL de la carpeta principal. Esto significa que los permisos han cambiado de modificar los usuarios (carpeta antigua) a todos modificar (nueva carpeta).

¿Observe la diferencia? Esta vez moviendo un archivo a otra carpeta en el mismo volumen realmente ha cambiado los permisos, algo que MS dice que no hace. Acabo de encontrar un error en la documentación MS desde 2000 lol ??

Ahora observe el mismo escenario cuando use permisos explícitos. Si establece permisos explícitos en un archivo dentro de esta carpeta (herencia desactivada) que, por ejemplo, niega el acceso de lectura a los usuarios, ahora crea una NUEVA entrada de ACL especficamente para este archivo. Ahora, cuando mueve el archivo a una nueva ubicación, tiene una entrada de ACL directamente relacionada con él. En este caso mover un archivo a una nueva ubicación en el mismo volumen RETAINS sus permisos (como afirmaciones MS)!

Cuando está moviendo archivos dentro del mismo volumen , está reorganizando tradicionalmente su sistema de archivos . La modificación de los permisos de archivo en el nivel del directorio podría bloquearlo fuera de ese archivo en el momento en que la operación de movimiento haya terminado. Esto es indeseable si, por ejemplo, usted acaba de mover accidentalmente un archivo a un sistema, o una carpeta con permisos especiales de propiedad o de otra manera protegidos. No habría manera de corregir el error aparte de tomar la propiedad del archivo (si tiene los privilegios), o de registro con una cuenta privilegiada. Teniendo en cuenta el funcionamiento normal del día a día de una computadora, usted podría encontrar que no tenía ningún control sobre su sistema de archivos.

Este comportamiento es común entre la mayoría (si no todos) los sistemas operativos haciendo uso de ACL. Garantiza las operaciones normales del sistema de archivos dentro de un volumen por usuarios y aplicaciones por igual.

Por el contrario, cuando se mueven archivos entre volúmenes, tradicionalmente se está dando un archivo para el control de algo o de otra persona. Tiene sentido, como bien se dan cuenta, que el archivo incorpore los permisos de la carpeta de destino, lo que le dará a la meta los permisos necesarios para reorganizar su propio sistema de archivos como mejor les parezca.

Naturalmente, esto no siempre es deseable. Por este motivo, las operaciones de movimiento y copia se pueden definir con reglas especiales de herencia de permisos. Del mismo artículo:

  • Para conservar permisos cuando se copian o se mueven archivos y carpetas, utilice la utilidad Xcopy.exe con el / O o el modificador / X. Los permisos originales del objeto se agregarán a los permisos heredables en la nueva ubicación.

  • Para agregar permisos originales de un objeto a permisos heredables al copiar o mover un objeto, utilice la utilidad Xcopy.exe con los modificadores -O y -X.

OK Este es el verdadero lowdown. Primero – ¿estamos hablando de una sola PC o un servidor? Supongo que estamos hablando de un servidor. Así que …. como administrador de Wintel de la empresa A crear un sistema de archivos en una unidad de red en su nuevo servidor. Se basan en los departamentos, es decir, cada departamento tiene una carpeta y cada carpeta tiene su propio ACL único debido a problemas de confidencialidad, como es probablemente la norma – sí? Por lo tanto, si vas a mover un archivo a la carpeta de otro departamento, ¿por qué no quieres que hereda los permisos de su nueva carpeta? Lo que quiero decir es … ¿por qué tener un sistema de archivos basado en permisos si no va a usarlo? Puedo darte un ejemplo de la vida real donde es importante que los archivos / carpetas movidos siempre hereden la ACL de su carpeta principal, solo pregúntame.

Mover archivos dentro de un volumen o moverlos de vol X a vol Y … ¿cuál es la diferencia esencial? Usted está moviendo la localización de algunos archivos – a través de diversos volúmenes o no hace poca diferencia en un ambiente corporativo por lo que puedo ver. La verdadera razón por la que uno incluye la herencia por defecto y la otra no lo ha mencionado ya por Mucker – que es la "eficiencia". Arrastrar y soltar archivos dentro de un volumen sólo cambia la entrada de índice – los archivos no se mueven y su información ACL se deja solo. Hace una operación simple. Sin embargo, cuando los archivos se mueven a través de volúmenes, los archivos y sus ACL tienen que redefinirse, por lo que hacerlo correctamente e incluir la herencia tiene sentido porque no incurre en gastos generales evitables.

No puedo entender por qué Microsoft no aborda este problema. ¿Sería demasiado difícil incluir un cuadro de diálogo como parte del arrastre del navegador n drop? Algo así como "¿Ha movido archivos a una ubicación con derechos de acceso diferentes, desea heredar los permisos de la nueva carpeta principal? ¿Y o N?"

Recuerdos, Stonegiant