Faccio riferimento ai due utenti:
Codice: Seleziona tutto
grep "intruso\|vaevictis" /etc/passwd
vaevictis:x:1000:1000:vaevictis,,,:/home/vaevictis:/bin/bash
intruso:x:1001:1001:foo,,,:/home/intruso:/bin/bash
che appartengono a questi gruppi:
Codice: Seleziona tutto
groups vaevictis
vaevictis : vaevictis adm cdrom sudo dip plugdev lpadmin sambashare
groups intruso
intruso : intruso
Ho creato una directory che simula le proprietà di /tmp
e al suo interno ho fatto le prove del caso, creando file e directory/sottodirectory appartenenti sia a vaevictis sia a intruso per poi cancellare il vario materiale usando l'utente vaevictis.
Conclusioni per quanto riguarda i file:
/tmp è di proprietà di root, ha lo
sticky bit e tutti i permessi abilitati, quindi i
file contenuti direttamente in /tmp, indipendentemente dai permessi del file, possono essere eliminati solo da root (che è anche il proprietario della directory /tmp) o dal proprietario del file in questione (perché è impostato lo sticky bit).
I
file contenuti in una generica sotto directory di /tmp seguono le regole normali:
la possibilità di eliminare un file non dipende né dal suo proprietario né dai suoi permessi, ma solo dai permessi della directory che lo contiene:
Un generico file contenuto in una directory, che non abbia lo sticky bit attivato, può essere cancellato da chiunque abbia i permessi "w" e "x" sulla directory che lo contiene.
Se i permessi "w" e "x" sono impostati solo per il proprietario, solo lui può eliminare il file; se sono impostati per il gruppo proprietario del file, chiunque ne faccia parte può eliminare il file; se sono impostati per gli "altri", qualunque utente può eliminare il file.
Ovviamente, questa situazione si "propaga" nelle sotto directory. Se il file è contenuto in una directory che garantisce i permessi "w" e "x", per poter essere eliminato è necessario che questa directory a sua volta sia contenuta in un albero di directory che garantisca all'utente che vuole eliminare il file il solo permesso "x" ad ogni livello, altrimenti quell'utente non può eliminarlo.
Questo vale anche per un file di cui sei il proprietario. Se un tuo file è all'interno di una directory per cui il tuo utente non ha i permessi "w" e "x", non lo puoi eliminare.
E lo stesso accade se un tuo file è contenuto in una directory a sua volta contenuta in un albero di directory che non garantiscano il permesso "x" al tuo utente a ogni livello.
Il motivo è semplice: devi avere il permesso "x" a tutti i livelli per poter applicare la chiamata di sistema "stat" all'inode del file; ti serve il permesso "w" solo sulla cartella che lo contiene, perché devi modificare il contenuto solo di questa.
Esiste poi una categoria di file detta "immutabile". Si ottiene con il comando "chattr +i percorso_del_file". In questo caso, il file può essere eliminato solo da root, indipendentemente dai permessi visti sopra.
Quanto detto sopra vale per il comando rm. Non devi avere i permessi di lettura per rimuovere un file se ne sai il percorso.
Ma tu li stai cercando con find, quindi a quanto detto sopra devi aggiungere i permessi di lettura.
Pertanto, per quanto riguarda i file, la risposta al punto 5) è:
a) il tuo comando può cancellare file di utenti diversi da nextuser
b) il tuo comando può non trovare file di nextuser contenuti in una directory per la quale nextuser non ha i permessi di lettura.
Il punto a) lo risolvi aggiungendo
al comando find. In questo modo il comando find ti trova solo i file che appartengono a all'utente nextuser contenuti in directory per le quali nextuser abbia i permessi di lettura e rimuove solo quelli.
Per risolvere il punto b) devi aggiungere i privilegi di root alle precedenti indicazioni, in modo tale da poter leggere il contenuto di tutte le directory, selezionare solo i file di nextuser ed eliminare solo quelli.
Se non puoi dare privilegi di root, non puoi eliminare i file di nextuser contenuti in directory per i quali nextuser non ha privilegi di lettura, perché find non te li può trovare.
Conclusioni per le directory
Senza entrare nel dettaglio, anche per le directory quel comando dà problemi per motivi analoghi a quelli specificati sopra sui permessi.
Per rispondere al punto 3),
rmdir cancella solo le directory vuote quindi non è la soluzione. In generale, se vuoi cercare con find sia file sia directory e se poi le vuoi eliminare con exec, ti basta usare rm con l'opzione -r.
Però, non è la soluzione.
A mio avviso ti conviene fare uno script in cui cancelli file e directory separatamente e poi lanciare quello nel cronjob.
Per rispondere al punto 4), dipende da come vuoi regolarti nei seguenti casi:
4.a) se una directory di nextuser contenesse dei file di un altro utente ma non directory di un altro utente? La cancelli?
4.b) se una directory Foo di nextuser contenesse una sottodirectory Bar di un altro utente, a quanto ho capito non vuoi cancellare Foo. Ma se Bar a sua volta contiene sottodirectory di nextuser che non contengono sottodirectory di altri utenti? Come ti regoli? Le vuoi cancellare quelle sottodirectory di Bar?
Nota bene
Questi discorsi dipendono anche dal fatto che non hai chiarito come gestite i permessi per le directory contenute in /tmp.
Generalmente sono tutte directory che hanno i permessi rwx impostati solo per il proprietario.
Fammi sapere se è tutto chiaro e anche come ti vuoi regolare per quanto riguarda le directory, così ti butto giù uno script.
p.s.:
Il problema sembra banale ma non lo è affatto. Mi scuso per aver postato dei messaggi contenenti errori, di cui ho poi chiesto l'eliminazione.
Spero che questo messaggio sia abbastanza sintetico e soprattutto chiaro. Non è stato semplice sintetizzare le varie prove fatte ed esporre tutto in modo (spero) comprensibile.