Come impedire agli utenti di eliminare una directory?


9

Ho provato "chattr + i DIRNAME", è fantastico, ma non riesco a creare file in DIR dopo chattr. Che altro ci sono per impedire agli utenti di eliminare una directory?

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] 

AGGIORNAMENTO: solo la cancellazione della directory è importante, quindi ho ancora bisogno dei file da eliminare in essa


Dai un'occhiata a /tmpe /var/tmp. Mentre ogni utente può creare file lì, può cancellare solo i propri file / directory, ma non la directory stessa.
Nils,

Risposte:


3

Quindi cosa c'è di sbagliato in un semplice 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

OK, lascia che ti dica cosa non va in questo: ogni utente ha tutti gli accessi a tutti i file nella questiondirectory a causa delle 777autorizzazioni. È meglio

  • creare un nuovo gruppo groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • aggiungere gli utenti che devono avere accesso ai file al nuovo gruppo: usermod -G group user

Il trucco importante qui è che la directory ha un proprietario diverso rispetto a qualsiasi altro utente che tenterà di eliminarlo.


2
Dipende anche da dove si trova questa directory. Se qualcuno del gruppo di domande dispone dei diritti rwx sulla directory contenente la directory delle domande, sarà in grado di eliminarlo.
Laurentiu Roescu,

Aggiungi un extra sudo chmod o+t ..per impostare il tflag nella directory principale. Il tflag non consentirà di rimuovere un file che non è di proprietà dell'utente. tè comunemente usato /tmpper fare esattamente questo. UtenteA non può eliminare i file di proprietà di UtenteB.
jippie,

O ancora una volta basta inserire la proprietà corretta come bit di autorizzazione nella directory.
jippie,

Non funziona nei contenitori docker. :(
Kirby,

13

Crea un file ".protected" e fai come root

chattr +i .protected

È quindi possibile eliminare tutti i file tranne .protectedall'interno di questa directory, quindi la directory non può essere eliminata da nessun altro utente.


Semplice ed efficace. Bella risposta.
Wug,

Non funziona nei contenitori docker. :(
Kirby,

1
Per eliminarlo, utilizzare "chattr -i [nome file]" per rimuovere l'attributo immutabile.
emeraldhieu,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.