Cómo evitar que el usuario cambie archivos usando el permiso de Linux

8

¿Es posible, utilizando el esquema de permisos de Linux, permitir a los usuarios crear archivos pero no editarlos o eliminarlos más adelante? Quiero decir, tenemos una carpeta de entrega donde los usuarios ponen artefactos allí y no queremos que estos artefactos se modifiquen después de la entrega, es decir, editados o eliminados.

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

2

No puede hacer eso: si el usuario puede crear archivos, serán de su propiedad y podrá modificarlos y borrarlos.

Iba a proponer un esquema simple para tener un directorio provisional (donde el usuario puede hacer lo que quiera) y un directorio entrante (no accesible para el usuario), con un pequeño programa privilegiado para mover archivos desde el directorio provisional al entrante directorio. Pero en realidad es difícil hacer lo correcto: entre otras cosas, debe tener cuidado de que el programa privilegiado no mueva archivos en otros directorios (tenga cuidado con las condiciones de carrera, enlaces simbólicos, ../), no sobrescribirá los archivos existentes ( rename(3)es atómico pero puede borrar el destino), no permitirá que el usuario mantenga abierto un descriptor de archivo y modifique el archivo después de moverlo (por lo que es mejor copiarlo que moverlo). En cambio, recomendaré tomar una solución sólida existente:

  • Haga que el usuario cargue el archivo a través de HTTP.
  • Haga que el usuario se comprometa con un sistema de control de versiones. También podrá cometer nuevas versiones.
Gilles 'SO- deja de ser malvado'
fuente
1

¿Es posible, utilizando el esquema de permisos de Linux, permitir a los usuarios crear archivos pero no editarlos o eliminarlos más adelante?

NO

Pero tiene otras opciones sugeridas por @Fredrik en el comentario a su pregunta. Mira aquí.

ssapkota
fuente
0

Aquí hay un enfoque que debería, en teoría, funcionar. Es demasiado esfuerzo para mí desarrollar incluso una prueba de concepto; puedes rechazarlo por la misma razón. Y, estrictamente hablando, esto no es "usar el esquema de permisos de Linux".

  • Obtenga un servidor de archivos de código abierto.
  • Modifíquelo para hacer cumplir las reglas que desee (es decir, los usuarios pueden crear archivos en directorios a los que tienen acceso de escritura y pueden escribir en un archivo inmediatamente después de crearlo, pero, a partir de entonces, nadie más que root puede abrir un archivo para escribir o desvincular eso).
  • Configure un servidor host que ejecute su software de servidor modificado. Teóricamente podría ser su anfitrión local; solo asegúrese de que el directorio desde el que trabaja no sea accesible públicamente.
  • NFS monta su /mnt/deliveryy les dice a sus usuarios que coloquen sus archivos allí.
Scott
fuente
0

La respuesta simple es ejecutar un script en un intervalo determinado que elija (digamos cada 15 minutos) que reasigna la propiedad de todos los archivos en el directorio "upload" a un usuario "admin" predeterminado y establece los permisos en "644". Esto permitirá a todos los usuarios acceso de solo lectura a todos los archivos en el directorio de carga, incluidos los que ellos mismos cargaron. Por supuesto, puede optimizar el script después de la primera ejecución para buscar solo aquellos archivos con fechas creadas después de la ejecución anterior del script (por ejemplo, en los últimos 17 minutos).

Michael Yaeger
fuente