¿Es posible crear un archivo que tenga permisos completos para todos pero que sea imposible de eliminar?

15

Sin usar sudo, preferiblemente?

Evan
fuente
2
Dios, raíz, ¿cuál es la diferencia? ars.userfriendly.org/cartoons/?id=19981111 Como cuestión práctica, un archivo que incluso la raíz no pudo eliminar después sería un sueño de los autores de malware.
Dan está jugando con Firelight
Estoy de acuerdo con que el formato @DanNeely Plus es una forma de eliminar un archivo también;)
Rinzwind

Respuestas:

3

Tratar:

chattr +i filename

Sin embargo, al hacer esto, el rootusuario no podrá recuperar el archivo. Úselo con precaución.

Aditya
fuente
55
al hacerlo touch test && chattr +i testarroja un error; chattr: Operation not permitted while setting flags on test. Necesitas sudopara esto. Además de eso: todavía es posible eliminar el archivo: sudo chattr -i test && rm testfunciona.
Rinzwind
23

No, esto no es posible. Imposible que usuarios normales eliminen un archivo: claro.

  1. Deberá sudoevitar que los usuarios eliminen archivos. Su administrador siempre podrá eliminar un archivo.

  2. sudo chattr +i testpuede evitar la eliminación pero lo requiere sudo. Un simple sudo chattr -i testhace posible eliminar el archivo. Ningún otro usuario que el administrador pueda usar chattr.

Y ... simplemente reiniciar y entrar en modo de rescate permitirá que esa persona pueda eliminar ese archivo. Sería un riesgo de seguridad si hubiera un método para nunca poder eliminar un archivo.

Rinzwind
fuente
8

Es un poco tosco, pero está cerca: si elimina el acceso de escritura en el directorio, los archivos que contiene no se pueden eliminar. Y no requiere sudosi lo posee:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

Por lo tanto, puede establecer permisos en el archivo como lo desee.

Además, como lo dijo @Rinzwind, ciertamente hay muchas formas de evitarlo.

Izkata
fuente
Esto se ve exactamente como lo que quería el OP. (Aunque no sé por qué lo querían). Los usuarios pueden leer, cambiar y ejecutar los archivos, pero no pueden desvincularlos (eliminarlos).
Eliah Kagan
8

Para eliminar un archivo, necesita permiso de escritura en todos los directorios a los que está vinculado ese archivo. Para desvincularlo de un directorio, necesita permiso de escritura en ese directorio.

Por lo tanto, siempre que otorgue permiso de escritura (o incluso propiedad) al archivo pero no al directorio o directorios a los que está vinculado ese archivo, ese archivo no se puede eliminar.

La mejor manera de lograrlo sería vincular ese archivo a un directorio que sea propiedad de root y que nadie pueda escribir. En su lugar, podría hacer que sea propiedad de usted, lo que significaría que tanto usted como root podrían eliminarlo.

Eso aún permitiría a otros usuarios vincular ese archivo a otros directorios y luego desvincularlo de allí, pero aún así no podrían eliminar el archivo ya que podrían desvincularlo de su propio directorio.

Tenga en cuenta que para que funcione completamente, el permiso de escritura de cada componente de ruta al archivo tendría que ser controlado. Porque, por ejemplo, si el archivo es /a/b/the-filey usted /a/bno puede escribirlo, pero todos tienen acceso de escritura /a, entonces podrían cambiar el nombre /a/ba otra cosa y recrear el suyo /a/by crear el suyo /a/b/the-fileallí.

Stéphane Chazelas
fuente