Excluir um usuário e todos os arquivos pertencentes a esse usuário

12

Eu usei delusersem o parâmetro --remove-all-files:

$ deluser 'user'

Existe outra maneira de rm -r /home/userremover todos os arquivos pertencentes a um usuário agora (já que eu já executei o delusor)?

pl1nk
fonte

Respostas:

19

Você precisará encontrar arquivos manualmente, o que provavelmente seria o deluserque faria.

Por favor, note que não--remove-all-files é o mesmo que . O último remove apenas o homedir (que pode incluir arquivos não pertencentes a esse usuário, embora não seja usual), o primeiro remove todos os arquivos pertencentes a esse usuário do sistema. Pelo menos se a página de manual é confiável .rm -r /home/user

O GNU findtem um -userteste, para que você possa find / -user xxxencontrar todos os arquivos pertencentes ao usuário xxx. xxxseria o nome do usuário e pode (e, nesse caso , terá que, como o usuário não existe mais) ser o ID numérico do usuário. findtambém tem uma -deleteopção, então

find / -user xxx -delete

Deveria fazê-lo, embora não tenha testado o comando com todas as opções ao mesmo tempo.

EDIT: ID numérico: a razão pela qual eu disse que você deve usar um ID numérico é porque, como você já excluiu o usuário, a entrada dele /etc/passwdfoi excluída (tinha, juntamente com outras coisas, o ID do usuário e seu nome de usuário) .

Portanto, se você não removeu o homedir dele, uma das maneiras mais fáceis é apenas consultar o ID do proprietário desse homedir:

stat -c %u /home/user/

( staté uma ferramenta para ler os dados do sistema de arquivos. -c %udiz statcomo escrever sua saída, aqui estou pedindo para simplesmente gerar o ID do usuário)

Se você gosta de one-liners, pode até encadear os dois comandos:

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

(É claro que você pode preferir executá-lo primeiro, sem -deleteter certeza de que não há nada que queira manter e cometer algum erro cometido ao escrever o restante do comando. Erros ao executar operações de exclusão recursiva /não são para os fracos de coração.)

njsg
fonte
Você também pode usar a -execopção find para executar um comando rm personalizado, se quiser um pouco mais de controle sobre suas exclusões, mas nunca tentei isso com o YMMV.
agc93 31/05
É verdade, seja isso ou passando a saída para o rmuso xargs(mas isso provavelmente atingirá os limites do argumento se houver muitos resultados), mas veja -deptho manual de informações: "Se o seu comando` find 'remove os diretórios, você pode achar que você recebe uma mensagem de erro falsa quando o `find 'tenta se recuperar em um diretório que foi removido agora. O uso da opção` -path' normalmente resolverá esse problema. " (e mais tarde na mesma seção, "(` -delete 'implica `-path' de qualquer maneira)")
njsg
@njsg Bem, eu recebo:find: 'user' is not the name of a known use
pl1nk
1
@ pl1nk: como eu disse, você terá que usar o ID numérico do usuário - como você já excluiu o usuário, não há mapeamento na /etc/passwdlista do usuário e seu ID. Você terá que encontrar o ID numérico. Do stat -c %u /home/user/, deve dar-lhe o ID de usuário numérico, uso que, como xxxacima.
Njsg 31/05
@njsg Você está certo, eu não li a última parte da sua pergunta.
Pl1nk
5

Outra opção seria adicionar novamente o usuário adduser, especificando o UID antigo e, em seguida, executar delusernovamente, desta vez com o --remove-all-filessinalizador.

Suponha, por exemplo, que o usuário tenha nome de usuário alicee UID 1001:

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

O gnu find tem as opções -nouser e -nogroup, procure-o man find. Com essas opções, você pode encontrar todos os arquivos no seu sistema de arquivos que não têm usuário correspondente em / etc / passwd. Se você não criou um novo usuário com os uids antigos dos usuários excluídos, é possível encontrar esses arquivos órfãos.

No entanto, você pode encontrar mais arquivos - não apenas aqueles que pertenceram ao seu excluído.

Ah não
fonte
Acredito que você tenha a melhor resposta! ... "$ find / \ (-nouser -o -nogroup \) -print0 | xargs -0 rm -rf" O comando localiza todos os arquivos que não possuem usuário nem grupo e remove-os automaticamente.
precisa