GNU/Linux >> Tutoriales Linux >  >> Linux

Permitir al propietario crear y leer archivos, pero no modificarlos ni eliminarlos

Podrías usar bindfs como:

$ ls -ld dir
drwxr-xr-t 2 stephane stephane 4096 Aug 12 12:28 dir/

Ese directorio es propiedad de stephane, con el grupo stephane (stephane es su único miembro). También tenga en cuenta el t que evita que los usuarios cambien el nombre o eliminen entradas que no son de su propiedad.

$ sudo bindfs -u root -p u=rwD,g=r,dg=rwx,o=rD dir dir

Nosotros bindfs dir sobre sí mismo con propiedad fija y permisos para archivos y directorios. Todos los archivos aparecen como propiedad de root (aunque debajo en el directorio real todavía son propiedad de stephane).

Los directorios obtienen drwxrwxr-x root stephane permisos mientras que otros tipos de archivos obtienen -rw-r--r-- root stephane unos.

$ ls -ld dir
drwxrwxr-t   2 root     stephane   4096 Aug 12 12:28 dir

Ahora la creación de un archivo funciona porque se puede escribir en el directorio:

$ echo test > dir/file
$ ls -ld dir/file
-rw-r--r-- 1 root stephane 5 Aug 12 12:29 dir/file

Sin embargo, no es posible hacer una segunda escritura open() en ese archivo ya que no tenemos permiso sobre él:

$ echo test > dir/file
zsh: permission denied: dir/file

(Tenga en cuenta que no se permiten anexar allí (ya que no es parte de sus requisitos iniciales)).

Una limitación:aunque no puede eliminar o cambiar el nombre de las entradas en dir por el t bit, los nuevos directorios que cree allí no tendrán ese t bit, por lo que podrá cambiar el nombre o eliminar entradas allí.


El chattr +a La opción permitirá agregar solamente. Los archivos se pueden modificar de esa manera, pero solo agregándoles (es decir, agregando líneas). No puede eliminar archivos existentes, pero sí crear otros nuevos. Esto podría ajustarse a sus necesidades:

sudo chattr -R +a /dir/to/apply/to

de man chattr

Un archivo con el conjunto de atributos 'a' solo se puede abrir en modo de adición para escritura. Solo el superusuario o un proceso que posea la capacidad CAP_LINUX_IMMUTABLE puede establecer o borrar este atributo.

(tenga en cuenta que también se aplica a los directorios)

Entonces su lista se vería así:

echo hello > test # succeeds, because test doesn't exist, and creation is allowed
echo hello2 > test # fails, because test already exists, and overwriting is not allowed
echo hello3 >> test # succeeds, because appending is allowed
cat test # succeeds, because reads are allowed
rm test # fails, because delete is not allowed

Linux
  1. Eliminar archivos a los que no se ha accedido durante un tiempo determinado en Linux

  2. ¿Eliminar todos los archivos en un directorio cuyo nombre no coincide con una línea en una lista de archivos?

  3. ¿Encontrar archivos que un usuario no puede leer?

  4. ¿Puede un script ser ejecutable pero no legible?

  5. ¿Cómo eliminar todos los archivos en una carpeta, pero no eliminar la carpeta usando las bibliotecas estándar de NIX?

Qt no crea archivos de salida en carpetas de depuración/liberación en Linux

Bash script para eliminar todos los archivos excepto N cuando se ordenan alfabéticamente

Versionado automático al cambiar el archivo (modificar/crear/eliminar)

bash:elimina todos los directorios (y contenidos) pero no los archivos en pwd

Dar permiso de ejecución a los directorios pero no a los archivos

Permitir que todos los usuarios creen archivos en un directorio, pero solo el propietario puede eliminarlos