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

9

Ocasionalmente, tenemos el problema de que un archivo tiene permisos diferentes de la carpeta donde está.

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 ocurre cuando mueve un objeto a una carpeta diferente en el mismo volumen. En este caso, se retienen los permisos originales.

Por lo tanto, el usuario movió el archivo de una carpeta a otra y se retuvieron los permisos de la carpeta original.

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

VVS
fuente

Respuestas:

8

Lo he explicado en una publicación de blog http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/ pero 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, de modo que obtenga los permisos de la carpeta principal como ya sabe.

Cuando un archivo se mueve a otro volumen, lo que realmente sucede es que se copia al nuevo volumen y se elimina el archivo anterior. Entonces, el mismo proceso se repite como anteriormente, ya que es un archivo nuevo nuevamente y necesita permisos establecidos.

Cuando el archivo se mueve dentro del mismo volumen, realmente no sucede nada (a nivel de disco). Simplemente cambia la ubicación de la ruta lógica del archivo. Los datos reales y el archivo físico en el disco no se han tocado ni cambiado. ¿Alguna vez notó que cuando mueve un archivo de 5GB a otra carpeta en el mismo disco, se hace casi al instante? Es por eso, porque en realidad no se ha movido, pero el puntero a donde existe lógicamente el archivo ha cambiado. Como no se modificó de ninguna manera, los permisos tampoco cambian.

Esta es la razón de este comportamiento.

Editar: Algo que olvidé mencionar ... El artículo de MS no es del todo exacto. MS cita:

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 ocurre cuando mueve un objeto a una carpeta diferente en el mismo volumen. En este caso, se retienen los permisos originales.

La cita anterior solo se aplica a los objetos a los que se les han otorgado permisos de sec definidos EXPLÍCITAMENTE (desactivar la herencia). Como mencioné en mis comentarios, se trata de mantener las entradas de ACL lo más eficientes posible. Considere el siguiente ejemplo:

Para simplificar la explicación, supongamos que tiene una carpeta configurada para permitir que los usuarios solo modifiquen los derechos. 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 de ACL para la carpeta. El siguiente bit es muy IMPORTANTE de entender; los archivos mismos NO TIENEN ACL PERMS. Entonces, cuando mueve cualquiera de estos archivos a una nueva carpeta en el mismo volumen, MS afirma que las permisos se mueven con él (como se cita arriba). Pregúntate esto ... ¿cómo? No había permisos en el archivo en primer lugar para moverse. Esto es realmente incorrecto y lo acabo de probar ahora para confirmarlo. Digamos que la carpeta de destino a la que está moviendo el archivo tiene permisos para permitir que el grupo de todos modifique los derechos solamente. Bueno, dado que el archivo no tiene ACL directamente, hereda la ACL de la carpeta principal. Esto significa que los permisos han cambiado de modificación de usuarios (carpeta antigua) a modificación de todos (carpeta nueva).

¿Nota la diferencia? Esta vez, mover un archivo a otra carpeta en el mismo volumen realmente ha cambiado las permanentes, algo que MS dice que no hace. ¿Acabo de encontrar un error en la documentación de 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 de los usuarios, ahora crea una NUEVA entrada de ACL específicamente 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 ¡CONSERVA sus permisos (como afirma MS)!

Patán
fuente
+1 Ambas son buenas respuestas, pero la tuya es más importante. Me gusta tu comentario sobre cómo se mueve el archivo de 5GB al instante. Buena visual
KCotreau
Tiendo a pensar que "no está ocurriendo ninguna copia" es la razón principal por la cual no se toca ACL.
VVS
1
No hay ninguna razón técnica para que un cambio en la tabla del sistema de archivos no afecte la entrada de ACL correspondiente. Creo que esta explicación es correcta. Pero también creo que describe el efecto, no la causa real. La causa es el propio modelo de seguridad de ACL, que se basa en el volumen. Las operaciones de mover / copiar entre diferentes volúmenes se entienden como una transferencia de privilegios y cambios dentro del mismo volumen como agnósticos de privilegios. Por defecto, naturalmente.
Un enano
1
Y lógicamente, los permisos para un archivo se establecen en la creación. Observe que cuando cambia los permisos en una carpeta, debe propagar los permisos a todos los objetos secundarios. Es por eso que Windows a veces arroja un cuadro de diálogo ya que cambia todos los objetos secundarios si hay muchos.
surfasb
1
@ Mucker: Lo siento, pero tu explicación es simplemente errónea. Windows siempre almacena las ACL con los archivos, incluso si se heredan. Y desde el punto de vista del sistema de archivos, siempre se mueven con el archivo si el archivo se mueve dentro del mismo volumen. Dependiendo de ciertas configuraciones del sistema, Windows Explorer saltará y ajustará los permisos después del movimiento. Pero eso es Explorer y no tiene nada que ver con el sistema de archivos. Y lo que es peor: depende de la versión de Windows y (como ya mencioné) cierta configuración del sistema. Ver blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Paul Groke
6

Cuando mueve archivos dentro del mismo volumen , tradicionalmente está reorganizando su sistema de archivos . La alteración de los permisos de archivo en el nivel del directorio podría bloquearlo de ese archivo en el momento en que finalice la operación de movimiento. Esto no es deseable si, por ejemplo, simplemente movió accidentalmente un archivo a un sistema, o una carpeta con permisos especiales de propiedad o de otro modo protegido. No habría forma de corregir el error que no sea tomar posesión del archivo (si tiene los privilegios) o iniciar sesión con una cuenta privilegiada. Teniendo en cuenta el funcionamiento diario normal de una computadora, podría descubrir que no tenía control sobre su sistema de archivos.

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

Por el contrario, al mover archivos entre volúmenes, tradicionalmente está regalando un archivo para que lo controle alguien u otra persona. Tiene sentido, como bien sabe, que el archivo incorpore los permisos de la carpeta de destino, lo que le dará al objetivo los permisos necesarios para reorganizar su propio sistema de archivos como mejor le parezca.

Naturalmente, esto no siempre es deseable. Por esta razón, las operaciones de mover y copiar se pueden definir con reglas de herencia de permisos especiales. Del mismo artículo:

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

  • Para agregar los permisos originales de un objeto a los permisos heredables cuando copia o mueve un objeto, use la utilidad Xcopy.exe con los modificadores –O y –X.

Un enano
fuente
"Esto no es deseable si, por ejemplo, simplemente movió accidentalmente un archivo a un sistema, o una carpeta con permisos especiales de propiedad o protegido de otra manera". - Por lo tanto, mueve un archivo, por ejemplo, a una carpeta con permisos de escritura única y aún puede mover el archivo hacia atrás ... ¿por qué no es esto deseable en diferentes volúmenes?
VVS
1
@VVS porque ACL es un modelo de seguridad basado en un sistema de archivos. Cada volumen tiene su propio sistema de archivos y, en consecuencia, sus propias tablas ACL. Desde la perspectiva de la seguridad de ACL, un volumen diferente es el equivalente de un "usuario" diferente. Al mover un archivo a un volumen diferente, está transfiriendo el control a ese "usuario". Pero aún se le da la opción de no hacerlo si realmente lo desea. Es solo que el comportamiento predeterminado aborda las preocupaciones de seguridad de ACL.
Un enano
1

OK Esta es la verdadera verdad. Primero, ¿estamos hablando de una sola PC o un servidor? Supongo que estamos hablando de un servidor. Entonces ... como Administrador de Wintel de la Compañía A, usted crea un sistema de archivos en una unidad de red en su nuevo servidor. Lo basa en departamentos, es decir, cada departamento tiene una carpeta y cada carpeta tiene su propia ACL única debido a problemas de confidencialidad, como es probablemente la norma, ¿sí? Por lo tanto, si va a mover un archivo a la carpeta de otro departamento, ¿por qué NO querría que herede los permisos de su nueva carpeta? Lo que quiero decir es ... ¿por qué tener un sistema de archivos basado en permisos si no lo vas a usar? Puedo darle un ejemplo de la vida real en el que es importante que los archivos / carpetas movidos siempre hereden la ACL de su carpeta principal, solo pregúnteme.

Mover archivos dentro de un volumen o moverlos de vol X a vol Y ... ¿Cuál es la diferencia esencial? Está moviendo la ubicación de algunos archivos, a través de diferentes volúmenes o no, hace una pequeña diferencia en un entorno corporativo hasta donde puedo ver. Mucker ya ha mencionado la verdadera razón por la cual una incluye la herencia por defecto y la otra no, eso es "eficiencia". Arrastrar y soltar archivos dentro de un volumen solo cambia la entrada del índice: los archivos no se mueven y su información de ACL se deja sola. Hace para una operación simple. Cuando los archivos se mueven a través de los volúmenes, sin embargo, los archivos y sus ACL han de ser redefinido, para hacerlo correctamente y que incluye la herencia tiene mucho sentido, ya que no incurre en un gasto general evitable.

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

Saludos, Stonegiant

Stonegiant
fuente