Por que um novo usuário herdou arquivos de um usuário excluído?

24

Então eu tive que fazer um exercício em um livro como lição de casa. Primeiro você tinha que criar um usuário como:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

Então você tinha que adicionar alguns arquivos ao /home/sbaxterdiretório:

touch /home/sbaxter/ some.txt new.txt files.txt

Então você tinha que remover o sbaxterusuário e criar um novo usuário chamado mjane. Para minha surpresa quando corri find /home/ -user mjane, o novo usuário mjaneagora possuía todos os arquivos antigos da sbaxter, o que aconteceu?

John
fonte

Respostas:

41

O diabo está nos detalhes, na useraddpágina de manual (você pode ver isso emitindo man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

Portanto, usará o menor uid não utilizado, maior que outros usuários, no arquivo de senha. Visto que a exclusão do sbaxter o removeu do arquivo passwd, seu uid é "livre" e é atribuído a mjane (como o uid useraddpicks é o mesmo para os dois usuários no momento em que o useraddcomando foi usado).

Os arquivos no disco armazenam apenas o uid e NÃO a tradução do nome de usuário (pois essa tradução é definida no arquivo de senha). Você pode confirmar isso emitindo ls -lnpara ver o que os arquivos de propriedade de uid possuem.

Na verdade, eu recomendo que você desative, em vez de excluir contas. É possível obter o bloqueio de contas na maioria das distribuições Linux usermod -L -e today <username>, que bloqueia a senha e define a conta para expirar hoje (você pode ver a data de validade de uma conta chage -l).

Drav Sloan
fonte
2
... isso parece uma terrível falha de segurança. Existe alguma maneira de contornar isso?
BlueRaja - Danny Pflughoeft 26/08
6
@ BlueRaja-DannyPflughoeft Esta não é uma falha de segurança: os usuários são identificados pelo ID do usuário, não pelo nome do usuário. Ao excluir uma conta, você deve remover todos os seus arquivos (ou seja, todos os arquivos pertencentes a esse ID do usuário, não apenas o diretório inicial do usuário). Isso faz parte do procedimento normal para remover uma conta.
Gilles 'SO- stop be evil'
2
@OlivierDulac Isso é chamado de backup. Como alternativa, bloqueie, mas não remova a conta enquanto você precisar manter os dados. Afinal, se você precisar manter os dados, a conta ainda será necessária.
Gilles 'SO- stop be evil'
11
É possível obter o bloqueio de contas na maioria das distribuições Linux usermod -L -e today <username>, que bloqueia a senha e define a conta para expirar hoje (você pode ver a data de validade de uma conta chage -l).
Drav Sloan
5
É uma falha de segurança, pelos padrões de hoje. Como o exemplo mostra, isso significa que você não pode associar humanos a arquivos. Certamente, os humanos podem estar fortemente associados às contas, mas o arquivo humano da associação <-> conta <-> é quebrado devido à reciclagem do UID. Por outro lado, o Unix nunca teve uma grande segurança nesse aspecto ( rootpoderia fingir quase tudo). Você precisa de trilhas de auditoria para isso.
precisa saber é o seguinte
13

O UID do usuário excluído foi reutilizado pelo novo usuário e os sistemas de arquivos usam um UID para propriedade, não um nome de usuário.

Ignacio Vazquez-Abrams
fonte