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.