Requerir sudo para eliminar archivos, pero aún permitir la escritura

Requerir sudo para eliminar archivos, pero aún permitir la escritura

Tengo todos mis archivos en un servidor raid y tiene una cantidad de espacio razonablemente excesiva, por lo que no tendré que eliminar nada con frecuencia.

Todavía tengo cosas escribiendo en el raid todo el tiempo, así que no quiero tener que usar sudo para hacerlo. Pero, ¿es posible establecer permisos para que se permita escribir pero no eliminar archivos?

Supongo que esto también requerirá que use sudo para los comandos mv, pero eso no es un problema.

Información extra:

Raid utiliza btrfs raid1

El sistema operativo está en una unidad separada (servidor Ubuntu 14.04)

Respuesta1

Necesita permisos de escritura en el directorio para crear o eliminar archivos. Necesita permisos de escritura de archivos para cambiar el archivo.

Considerando este árbol:

FolderA: (no write permissions for you)
   - FileX (write permissions)
   - FileY (write permissions)

Ahora puedes cambiar FileX y FileY pero no puedes eliminarlos. Tampoco puedes crear un FileZ en la CarpetaA.

Respuesta2

No creo que sea posible. La creación y eliminación de archivos en Unix están controladas por la capacidad de escribir en el directorio, básicamente el mismo indicador.

Ahora lo que puedes hacer es crear dos directorios: uno con permiso de escritura y el otro restringido a la raíz.

[romano:~/tmp/test] % ls -l
total 8
drwxrwxr-x 2 romano romano 4096 Oct  8 18:06 normal
drwxrwxr-x 2 root   root   4096 Oct  8 18:06 onlyroot

Normalmente trabajas en normal. Supongamos que tienes en él:

[romano:~/tmp/test/normal] % ls
one.txt  three.txt  two.txt

Puede eliminar archivos claramente y crear otros nuevos; supongamos que desea proteger " one.txt" para que no se elimine. Lo que puedes hacer es crear un enlace físico en onlyroot:

[romano:~/tmp/test/normal] 1 % sudo ln one.txt ../onlyroot

Esto creará otro nombre para one.txtin onlyroot(usando una cantidad insignificante de espacio; el archivo no se copia). Ahora, como usuario normal, puedes eliminar one.txten la normalcarpeta, pero tendrás una versión intocable debajo de onlyrootella.

[romano:~/tmp/test/normal] % ls
one.txt  three.txt  two.txt
[romano:~/tmp/test/normal] % rm one.txt
rm: remove regular empty file ‘one.txt’? y
[romano:~/tmp/test/normal] % cd ..
[romano:~/tmp/test] % cd onlyroot 
[romano:~/tmp/test/onlyroot] % ls
one.txt
[romano:~/tmp/test/onlyroot] % rm one.txt 
rm: remove regular empty file ‘one.txt’? y
rm: cannot remove ‘one.txt’: Permission denied

Respuesta3

Según tengo entendido (basado enhttps://btrfs.wiki.kernel.org/index.php/Project_ideas#RichACLs_.2F_NFS4_ACLS), btrfs solo admite permisos tradicionales de Unix y ACL POSIX.1e y, por lo tanto, no puede hacer lo que usted desea.

Muchos/la mayoría de los otros sistemas de archivos admiten al menos uno de los richacl de Linux (que no creo que esté en la línea principal todavía), ACL de NFSv4, ACL de ZFS o ACL de Windows, todos los cuales le permiten denegar específicamente la "eliminación", pero no No me imagino que estarías dispuesto a renunciar a las funciones de btrfs sólo por esto.

Por otro lado, dado que su intención específica es proteger contra errores simples, sería mejor que aprovechara las capacidades de instantáneas de btrfs usando algo como autosnap.

Respuesta4

Creo que una solución sería simplemente crear una función en su bashrc, por ejemplo:

sudowrapper () { 
sudo -k;sudo "$@";sudo -K; 
}

vimf() {
    echo "pass" | sudowrapper -S nvim "$1"
}

sudowrapperEs necesario olvidar sudolas credenciales cada vez que vimfse llama; de lo contrario, se produce un comportamiento extraño.

Haga esto sólo si quiere evitar que usted mismo haga algo malo, si su objetivo es evitar que otros hagan algo malo, entonces escribir su contraseña .bashrces una mala idea.

información relacionada