Elimina un utente e tutti i file di proprietà di questo utente


12

Ho usato delusersenza il parametro --remove-all-files:

$ deluser 'user'

Esiste un modo diverso da quello rm -r /home/userdi rimuovere tutti i file di proprietà di un utente ora (poiché ho già eseguito deluser)?

Risposte:


19

Dovrai trovare manualmente i file, che probabilmente era quello che deluseravrebbe fatto.

Si prega di notare non--remove-all-files è lo stesso di . Quest'ultimo rimuove solo homedir (che può includere file non di proprietà di quell'utente, sebbene non usuali), il primo rimuove dal sistema tutti i file di proprietà di quell'utente. Almeno se la manpage deve essere attendibile .rm -r /home/user

GNU findha un -usertest, quindi puoi fare find / -user xxxper trovare tutti i file di proprietà dell'utente xxx. xxxsarebbe il nome utente e può (e in questo caso dovrà , poiché l'utente non esiste più) essere l'ID numerico dell'utente. findha anche -deleteun'opzione, quindi

find / -user xxx -delete

Dovrebbe farlo, anche se non ho testato il comando con tutte le opzioni contemporaneamente.

EDIT: ID numerico: il motivo per cui ho detto che devi usare un ID numerico è perché, come hai già eliminato l'utente, la sua voce è /etc/passwdstata eliminata (aveva, insieme ad altre cose, l'ID utente, insieme al suo nome utente) .

Quindi, se non hai rimosso il suo homedir, uno dei modi più semplici è semplicemente quello di richiedere l'ID del proprietario di quel homedir:

stat -c %u /home/user/

( statè uno strumento per leggere i dati del filesystem. -c %udice statcome scrivere il suo output, qui gli chiedo semplicemente di produrre l'ID utente)

Se ti piacciono i one-liner, puoi persino concatenare entrambi i comandi:

find / -user $(stat -c %u /home/user/) -delete

(Naturalmente potresti preferire eseguirlo per primo senza no -deleteper assicurarti che non ci sia nulla che desideri mantenere e per cogliere qualsiasi errore tu abbia fatto scrivendo il resto del comando. Gli errori quando si eseguono operazioni di eliminazione ricorsiva /non sono per i deboli del cuore.)


Puoi anche usare l' -execopzione di find per eseguire un comando rm personalizzato se vuoi un po 'più di controllo sulle tue eliminazioni, ma non l'ho mai provato così YMMV.
agc93,

È vero, o passando l'output rmall'utilizzo xargs(ma questo probabilmente colpirà i limiti dell'argomento se ci sono troppi risultati), ma guarda -depth, citando il manuale informativo: "Se il tuo comando` find 'rimuove le directory, potresti scoprire che viene visualizzato un messaggio di errore spurio quando `find 'tenta di rientrare in una directory che è stata rimossa. L'uso dell'opzione` -depth' normalmente risolverà questo problema. " (e più avanti nella stessa sezione, "(` -delete 'implica comunque' -depth ') ")
njsg

@njsg Bene, ottengo:find: 'user' is not the name of a known use
pl1nk,

1
@ pl1nk: come ho già detto, dovrai utilizzare l'ID numerico dell'utente - poiché hai già eliminato l'utente, non è presente alcun mapping /etc/passwdche elenchi l'utente e il suo ID. Dovrai trovare l'id numerico. Fare stat -c %u /home/user/, dovrebbe darti l'id utente numerico, usalo come xxxsopra.
njsg

@njsg Hai ragione, non ho letto l'ultima parte della tua domanda.
pl1nk

5

Un'altra opzione sarebbe quella di aggiungere nuovamente l'utente con adduser, specificando il vecchio UID, e quindi eseguirlo di delusernuovo, questa volta con il --remove-all-filesflag.

Supponiamo, ad esempio, che l'utente avesse nome utente alicee UID 1001:

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice

3

gnu find ha le opzioni -nouser e -nogroup, cercalo in man find. Con queste opzioni puoi trovare tutti i file nel tuo filesystem che non hanno nessun utente corrispondente in / etc / passwd. Se non hai creato un nuovo utente con i vecchi uid dei tuoi utenti eliminati, questa è la possibilità di trovare questi file orfani.

Tuttavia, potresti trovare più file, non solo quelli che appartenevano a quello eliminato.


Credo che tu abbia la risposta migliore! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" Il comando trova tutti i file che non hanno un utente o un gruppo e li rimuove automaticamente.
DanglingPointer
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.