none
permitir escribir en una carpeta compartida pero no borrar el fichero

    Question

  • Hola.

     

    La necesidad que tengo es la que pongo en el titulo: que se pueda escribir en los ficheros de una carpeta compartida, pero que el usuario remoto no pueda eliminar el fichero. Había oido, pero será leyenda urbana porque no lo consigo, que esto esra posible en Vista.

     

    ¿hay alguna manera de hacerlo?. Y la segunda pregunta, ¿en XP?. En esto ultimo supongo que no porque nadie me ha dado nunca respuesta.

     

    Salu2.

     

    Saturday, September 29, 2007 5:26 PM

Answers

  • No se donde habrás oido eso, pero no es verdad "del todo".


    Ahora bien, lo que pides, se puede hacer, no solo en Vista, sino tambien era posible en XP y en W2003 t me extraña que cualquier tecnico no haya sido capaz de responderte a esta cuestión.

     

    Recordemos que realmente el proceso de borrado de un fichero no es nada mas que eliminar el apuntador desde del directorio y marcar esos cluster como libres en la MFT. Es decir, el fichero en sí sigue existiendo mientras esos cluster no se utilicen para otra asignacion de fichero.

     

    Si fuesesmos capaces de crear un apuntador desde otro directorio a ese mismo fichero, es decir si el fichero estuviese referenciado desde dos sitios, el borrado desde uno de ellos solo liberaría ese apuntador. El espacio fisico del fichero no se maracaría como libre hasta que nadie lo referencie y como sigue referenciado desde el apuntador del otro directorio, seguirá existiendo desde él.

     

    Por tanto, imaginamos que tenemos un fichero llamado mis-datos.txt que está apuntado por la carpeta c:\caprpeta1, es decir que el nombre completo sería c:\carpeta1\mis-datos.txt

     

    Si fuesesmos capaces desde c:\carpeta2, de apuntar al mismo fichero, entonces, el borrado desde la carpeta anterior simplemente implicaría que no sería accesible desde ella, pero si desde c:\carpeta2.

     

    En XP, Windows 2003 e incluso en Vista, esto es inmediato con el comando FSUTIL. Este comando permite crear "links duros" (enlaces simbolicos: "hardlinks") desde una carpeta a cualquier fichero (siempre y cuando el disco sea NTFS).

     

    Veamos un ejemplo.

     

    En el disco R: me creo carpeta1 y carpeta2. En carpeta1, pongo un fichero de texto llamado mis-datos.txt con el texto "prueba de mis-datos".

     

    Posteriormente doy el comando:

    [R:\]fsutil hardlink create r:\carpeta2\enlace-1.txt r:\carpeta1\mis-datos.txt

     

    y el sistema me responde:

     

    Hardlink created for r:\carpeta2\enlace-1.txt <<===>> r:\carpeta1\mis-datos.txt

     

    En nombre del fichero enlace-1.txt puede ser cualquiera, aconsejo que sea el mismo que el otro, es decit mis-datos.txt, pero lo he puesto a proposito diferente para que veamos que no tiene por qué coincidir. Si ahora hacemos:

     

    [R:\]rd carpeta1 /s
    carpeta1, Are you sure (Y/N)? y

     

    Acabamos de borrar no solamente mis-datos.exe, sino tambien toda la carpeta1. Aun así:

     

    [R:\]cd carpeta2

    [R:\carpeta2]type enlace-1.txt
    prueba de mis-datos

     

    Es decir, sigue todo existiendo... :-)

     

    Lo que si es verdad es que Vista incorpora nativamente otros comandos de enlaces simbolicos nuevos por lo que la operacion anterior, no solo podemos hacerla de esta forma, sino tambien con el nuevo comando de Vista MKLINK.

     

    Si ejecutas MKLINK, te dice:

    MKLINK [[/D] | [/H] | [/J]] Link Target

            /D      Creates a directory symbolic link.  Default is a file
                    symbolic link.
            /H      Creates a hard link instead of a symbolic link.
            /J      Creates a Directory Junction.
            Link    specifies the new symbolic link name.
            Target  specifies the path (relative or absolute) that the new link
                    refers to.

     

    En nuestro caso, ejecutariamos para tener lo mismo que con FSUTIL:

     

    mklink /h r:\carpeta2\enlace-1.txt r:\carpeta1\mis-datos.txt

     

    Aunque lo anterior es un ejemplo con nombres diferentes, insisto en la necesidad practica de usar los mismos nombres o nos volveremos locos.


    Cuidado con el parametro /U porque crea un enlace de carpeta (nueva) a carpeta existente, pero si se borra la original el enlace queda huerfano. Es decir, no sirve en ese caso.

     

    Un saludo,

    Saturday, September 29, 2007 5:34 PM
  •  Jose Manuel Tella Llop Escribió:

    Cuidado con el parametro /U porque crea un enlace de carpeta (nueva) a carpeta existente, pero si se borra la original el enlace queda huerfano.

     

    Quise decir con el parámetro /J

     

    Un saludo,

    Saturday, September 29, 2007 5:42 PM
  • Pruebalo 

     

    Si haces esta pregunta, es que te va a sorprender gratamente la respuesta y el comportamiento del sistema operativo (es extensible a XP / W2003 el tema de permisos y ACL's).

     

    Un saludo,

    Saturday, September 29, 2007 6:00 PM

All replies

  • No se donde habrás oido eso, pero no es verdad "del todo".


    Ahora bien, lo que pides, se puede hacer, no solo en Vista, sino tambien era posible en XP y en W2003 t me extraña que cualquier tecnico no haya sido capaz de responderte a esta cuestión.

     

    Recordemos que realmente el proceso de borrado de un fichero no es nada mas que eliminar el apuntador desde del directorio y marcar esos cluster como libres en la MFT. Es decir, el fichero en sí sigue existiendo mientras esos cluster no se utilicen para otra asignacion de fichero.

     

    Si fuesesmos capaces de crear un apuntador desde otro directorio a ese mismo fichero, es decir si el fichero estuviese referenciado desde dos sitios, el borrado desde uno de ellos solo liberaría ese apuntador. El espacio fisico del fichero no se maracaría como libre hasta que nadie lo referencie y como sigue referenciado desde el apuntador del otro directorio, seguirá existiendo desde él.

     

    Por tanto, imaginamos que tenemos un fichero llamado mis-datos.txt que está apuntado por la carpeta c:\caprpeta1, es decir que el nombre completo sería c:\carpeta1\mis-datos.txt

     

    Si fuesesmos capaces desde c:\carpeta2, de apuntar al mismo fichero, entonces, el borrado desde la carpeta anterior simplemente implicaría que no sería accesible desde ella, pero si desde c:\carpeta2.

     

    En XP, Windows 2003 e incluso en Vista, esto es inmediato con el comando FSUTIL. Este comando permite crear "links duros" (enlaces simbolicos: "hardlinks") desde una carpeta a cualquier fichero (siempre y cuando el disco sea NTFS).

     

    Veamos un ejemplo.

     

    En el disco R: me creo carpeta1 y carpeta2. En carpeta1, pongo un fichero de texto llamado mis-datos.txt con el texto "prueba de mis-datos".

     

    Posteriormente doy el comando:

    [R:\]fsutil hardlink create r:\carpeta2\enlace-1.txt r:\carpeta1\mis-datos.txt

     

    y el sistema me responde:

     

    Hardlink created for r:\carpeta2\enlace-1.txt <<===>> r:\carpeta1\mis-datos.txt

     

    En nombre del fichero enlace-1.txt puede ser cualquiera, aconsejo que sea el mismo que el otro, es decit mis-datos.txt, pero lo he puesto a proposito diferente para que veamos que no tiene por qué coincidir. Si ahora hacemos:

     

    [R:\]rd carpeta1 /s
    carpeta1, Are you sure (Y/N)? y

     

    Acabamos de borrar no solamente mis-datos.exe, sino tambien toda la carpeta1. Aun así:

     

    [R:\]cd carpeta2

    [R:\carpeta2]type enlace-1.txt
    prueba de mis-datos

     

    Es decir, sigue todo existiendo... :-)

     

    Lo que si es verdad es que Vista incorpora nativamente otros comandos de enlaces simbolicos nuevos por lo que la operacion anterior, no solo podemos hacerla de esta forma, sino tambien con el nuevo comando de Vista MKLINK.

     

    Si ejecutas MKLINK, te dice:

    MKLINK [[/D] | [/H] | [/J]] Link Target

            /D      Creates a directory symbolic link.  Default is a file
                    symbolic link.
            /H      Creates a hard link instead of a symbolic link.
            /J      Creates a Directory Junction.
            Link    specifies the new symbolic link name.
            Target  specifies the path (relative or absolute) that the new link
                    refers to.

     

    En nuestro caso, ejecutariamos para tener lo mismo que con FSUTIL:

     

    mklink /h r:\carpeta2\enlace-1.txt r:\carpeta1\mis-datos.txt

     

    Aunque lo anterior es un ejemplo con nombres diferentes, insisto en la necesidad practica de usar los mismos nombres o nos volveremos locos.


    Cuidado con el parametro /U porque crea un enlace de carpeta (nueva) a carpeta existente, pero si se borra la original el enlace queda huerfano. Es decir, no sirve en ese caso.

     

    Un saludo,

    Saturday, September 29, 2007 5:34 PM
  •  Jose Manuel Tella Llop Escribió:

    Cuidado con el parametro /U porque crea un enlace de carpeta (nueva) a carpeta existente, pero si se borra la original el enlace queda huerfano.

     

    Quise decir con el parámetro /J

     

    Un saludo,

    Saturday, September 29, 2007 5:42 PM
  • OLÉ, OLÉ y OLÉ  genial!. FUNCIONA ! 

     

    Y se me ocurre una segunda cosa entonces ¿si en la segunda carpeta los permisos son diferentes, por ejemplo de solo lectura o incluso de denegar la lectura? ¿que pasaría?

     

    Salu2.

     

    Saturday, September 29, 2007 5:57 PM
  • Pruebalo 

     

    Si haces esta pregunta, es que te va a sorprender gratamente la respuesta y el comportamiento del sistema operativo (es extensible a XP / W2003 el tema de permisos y ACL's).

     

    Un saludo,

    Saturday, September 29, 2007 6:00 PM
  • Jose Manuel, muchas gracias, muchisimas. Me acabas de abrir ahora mismo todo un mundo de posiblidades con permisos y autorizaciones tanto en local como en red. Estoy realmente asombrado, y totalmente agradecido.

     

    Saludos.

     

     

    Saturday, September 29, 2007 6:09 PM
  • Hola Jose Manuel.

    Me parecio muy interesante el tema de la creacion de HardLinks (HL) entre archivos. Sin embargo me surgen 3 dudas puntuales:

    1) Al crear el HL estoy aumentando el espacio en disco que ocupo?. Es decir si el archivo original tiene 1GB y creo el HL ahora tendre 1GB menos de espacio en el disco?

    2) La idea que planteas sirve para archivos que ya existen, pero se puede hacer un script para que se aplique automaticamente cuando el usuario cree un archivo nuevo?

    3) Si tengo 500 archivos en una carpeta tengo que crear el HL para cada uno?. Ya intente con "[R:\]fsutil hardlink create r:\carpeta2\*.* r:\carpeta1\*.*" y no funciona. Se puede hacer un script para esto?

    Estoy interesado en esto ya que tengo un requerimiento de un gerente, similar al requerimiento de este post. Nesecito que ciertos usuarios puedan Leer, Escribir, Modificar y Ejecutar archivos, pero no borrarlos. Sigo pensando que esto se puede resolver editando los permisos avanzados sobre esta carpeta, sin embargo no se como hacerlo. Sin embargo solventando las 3 dudas planteadas HL puede ser una alternativa viable,
    Tuesday, October 28, 2008 8:29 PM
  •  Leonardo Sigales Escribió:
    1) Al crear el HL estoy aumentando el espacio en disco que ocupo?. Es decir si el archivo original tiene 1GB y creo el HL ahora tendre 1GB menos de espacio en el disco?

    No. Un Hardkink es solo un pauntador al mismo espacion fiscio que contiene el fichero. Recuerda que un fichero no pertenece a un directorio, sio al disco... y la localizacion original no es nada mas que un apuntador al fichero. El Hardlink es crear otro apuntador... y el sistema no liberará el espacio hasta que todos los apuntadores hayan sido borrados.

     Leonardo Sigales Escribió:
    2) La idea que planteas sirve para archivos que ya existen, pero se puede hacer un script para que se aplique automaticamente cuando el usuario cree un archivo nuevo?

    3) Si tengo 500 archivos en una carpeta tengo que crear el HL para cada uno?. Ya intente con "[R:\]fsutil hardlink create r:\carpeta2\*.* r:\carpeta1\*.*" y no funciona. Se puede hacer un script para esto?

    El punto 3) habrá que hacer un script... con un bucle for...
    Y el 2), deberia ser un script periodico... no se puede hacer automatico.

     Leonardo Sigales Escribió:
    tengo un requerimiento de un gerente, similar al requerimiento de este post. Nesecito que ciertos usuarios puedan Leer, Escribir, Modificar y Ejecutar archivos, pero no borrarlos. Sigo pensando que esto se puede resolver editando los permisos avanzados sobre esta carpeta,

    Pues no, esto ultimo no es posible. Si pueden modificar, pueden borrar...

    Un saludo,
    Tuesday, October 28, 2008 9:38 PM