Eliminar un usuario y todos los archivos propiedad de este usuario

12

He usado delusersin el parámetro --remove-all-files:

$ deluser 'user'

¿Hay alguna otra forma que no sea rm -r /home/usereliminar todos los archivos propiedad de un usuario ahora (ya que he ejecutado deluser)?

pl1nk
fuente

Respuestas:

19

Tendrá que buscar manualmente los archivos, que probablemente fue lo deluserque haría.

Tenga en cuenta --remove-all-filesque no es lo mismo que rm -r /home/user. El último solo elimina el homedir (que puede incluir archivos que no pertenecen a ese usuario, aunque no es habitual), el primero elimina todos los archivos que posee ese usuario del sistema. Al menos si la página de manual es de confianza .

GNU findtiene una -userprueba, por lo que puede hacer find / -user xxxpara encontrar todos los archivos propiedad del usuario xxx. xxxsería el nombre de usuario y puede (y en este caso tendrá que serlo, ya que el usuario ya no existe) ser la ID numérica del usuario. findtambién tiene una -deleteopción, entonces

find / -user xxx -delete

Debería hacerlo, aunque no he probado el comando con todas las opciones al mismo tiempo.

EDITAR: ID numérica: la razón por la que dije que debe usar una ID numérica es porque, como ya eliminó al usuario, /etc/passwdse eliminó su entrada (tenía, junto con otras cosas, la ID de usuario, junto con su nombre de usuario) .

Entonces, si no eliminó su homedir, una de las formas más fáciles es simplemente consultar la identificación del propietario de ese homedir:

stat -c %u /home/user/

( states una herramienta para leer datos del sistema de archivos. -c %uIndica statcómo escribir su salida, aquí le pido que simplemente envíe la ID de usuario)

Si te gustan las frases sencillas, incluso puedes encadenar ambos comandos:

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

(Por supuesto, es posible que prefiera ejecutarlo primero con un no -deletepara asegurarse de que no hay nada que desee conservar y para detectar cualquier error que haya cometido al escribir el resto del comando. Los errores al realizar operaciones de eliminación recursivas /no son para los débiles de corazón.)

njsg
fuente
También puede usar la -execopción de buscar para ejecutar un comando rm personalizado si desea un poco más de control sobre sus eliminaciones, pero nunca lo he intentado, así que YMMV.
agc93
Es cierto, ya sea eso o pasar la salida al rmuso xargs(pero esto probablemente alcanzará los límites de los argumentos si hay demasiados resultados), pero mire -depth, citando el manual de información: "Si su comando 'find' elimina directorios, puede encontrar que aparece un mensaje de error falso cuando 'find' intenta volver a aparecer en un directorio que ahora se ha eliminado. El uso de la opción '-depth' normalmente resolverá este problema ". (y más adelante en la misma sección, "(` -delete 'implica `-depth' de todos modos)")
njsg
@njsg Bueno, obtengo:find: 'user' is not the name of a known use
pl1nk
1
@ pl1nk: como dije, tendrás que usar la identificación numérica del usuario; como ya eliminaste al usuario, no hay ningún mapeo /etc/passwdque enumere el usuario y su identificación. Tendrás que encontrar la identificación numérica. Hazlo stat -c %u /home/user/, debería darte la identificación de usuario numérica, úsala como se xxxindica arriba.
njsg
@njsg Tienes razón, no he leído la última parte de tu pregunta.
pl1nk
5

Otra opción sería volver a agregar al usuario con adduser, especificando el UID anterior, y luego deluservolver a ejecutarlo , esta vez con la --remove-all-filesbandera.

Supongamos, por ejemplo, que el usuario tiene nombre de usuario alicey UID 1001:

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice
Eliah Kagan
fuente
3

gnu find tiene las opciones -nouser y -nogroup, búscalo en man find. Con estas opciones, puede encontrar todos los archivos en su (s) sistema (s) de archivos que no tienen un usuario correspondiente en / etc / passwd. Si no ha creado un nuevo usuario con los antiguos uid de sus usuarios eliminados, esta es una posibilidad de encontrar estos archivos huérfanos.

Sin embargo, es posible que encuentre más archivos, no solo aquellos que pertenecieron a su archivo eliminado.

Oh no
fuente
¡Creo que tiene la mejor respuesta! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" El comando encuentra todos los archivos que no tienen un usuario ni grupo y los elimina automáticamente
DanglingPointer