¿Cómo evitar que los usuarios eliminen un directorio?

9

Intenté "chattr + i DIRNAME", es genial, pero no puedo crear archivos en el DIR después de chattr. ¿Qué más hay para evitar que los usuarios eliminen un directorio?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

ACTUALIZACIÓN: solo la eliminación del directorio es importante, por lo que todavía necesito que se eliminen los archivos

Gasko Peter
fuente
Echa un vistazo a /tmpy /var/tmp. Si bien cada usuario puede crear archivos allí, él / ella puede eliminar solo sus propios archivos / directorios, pero no el directorio en sí.
Nils

Respuestas:

3

Entonces, ¿qué hay de malo con un simple chown / chmod ?:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

Bien, déjenme decirles qué hay de malo en esto: cada usuario tiene acceso a todos los archivos del questiondirectorio debido a los 777permisos. Es mejor

  • crear un nuevo grupo groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • agregue los usuarios que deben tener acceso a los archivos al nuevo grupo: usermod -G group user

El truco importante aquí es que el directorio tiene un propietario diferente que cualquiera de los usuarios que intentarán eliminarlo.

jippie
fuente
2
Depende también de dónde se encuentre este directorio. Si alguien del grupo de preguntas tiene derechos rwx en el directorio que contiene el directorio de preguntas, podrá eliminarlo.
Laurentiu Roescu
Agregue un extra sudo chmod o+t ..para establecer la tbandera en el directorio principal. La tbandera no permitirá eliminar un archivo que no sea propiedad del usuario. tse usa comúnmente /tmppara hacer exactamente eso. El usuario A no puede eliminar archivos propiedad del usuario B.
jippie
O una vez más, simplemente coloque la propiedad correcta y los bits de permiso en el directorio.
jippie
No funciona en contenedores acoplables. :(
Kirby
13

Crea un archivo ".protected" y hazlo como root

chattr +i .protected

A continuación, puede eliminar todos los archivos excepto .protecteddentro de este directorio, por lo que ningún otro usuario puede eliminar el directorio.

Magnus
fuente
Simple y efectivo. Gran respuesta.
Wug
No funciona en contenedores acoplables. :(
Kirby
1
Para eliminarlo, use "chattr -i [nombre de archivo]" para eliminar el atributo inmutable.
emeraldhieu
3
chattr +a

Debería hacer el trabajo. Puede crear archivos dentro pero no podrá eliminarlos.

Laurentiu Roescu
fuente
Actualicé