Quero dizer, se dois usuários têm o mesmo nome, como o sistema sabe que eles são realmente usuários diferentes quando impõe permissões de arquivo?
Essa dúvida me veio à mente quando eu estava pensando em renomear minha casa /home/old-arch
antes de reinstalar o sistema (tenho /home
uma partição própria e não a formato), para que eu pudesse ter um novo arquivo /home/arch
. Eu me perguntei se o novo sistema me daria as permissões antigas em meus arquivos ou se me reconheceria como um arquivo arch
.
Se você forçar a existência de vários usuários com o mesmo nome de usuário, haverá várias entradas
/etc/{shadow,passwd}
com o mesmo nome:Se você tentar fazer login como esse usuário, fará login como a primeira correspondência.
Não haverá como fazer login como o segundo usuário com o mesmo nome.
Observe que o Linux rastreia os usuários pelo uid, não pelo nome de usuário.
Seria possível, no entanto, ter dois nomes de usuário diferentes com o mesmo ID de usuário. Considere uma versão diferente de
/etc/passwd
:Observe que para ambos os nomes de usuário
a
eb
, a terceira coluna é 1001 -- esse é o uid/ID do usuário. Agora, se o usuárioa
ou usuáriob
fizer login (mesmo com senhas diferentes), ambos serão "usuário 1001" e serão exibidos como usuárioa
da perspectiva do sistema operacional. Aqui também, a primeira entrada correspondente é a retornada (na maioria dos casos):Ambos
a
eb
são uid1001
e terão acesso aos recursos disponíveis para uid1001
.No Unix, os usuários são identificados por seu ID (uid), que deve ser único (no escopo do sistema local). Portanto, mesmo que fosse possível criar 2 usuários diferentes com o mesmo nome (adduser no meu sistema se recusa a fazer isso, consulte esta pergunta para obter mais informações As contas unix separadas podem compartilhar um nome de usuário, mas têm senhas separadas? ), eles precisariam obter fluidos diferentes. Embora você possa manipular arquivos contendo as informações do usuário para corresponder aos seus critérios, cada programa é baseado na suposição de que os uids são únicos no sistema, portanto, esses usuários seriam idênticos.
EDIT: A outra resposta demonstrou um caso em que você tem 2 nomes de usuário diferentes para o mesmo uid - no que diz respeito ao sistema, é como ter dois nomes diferentes para o mesmo usuário, portanto, construções como essa devem ser evitadas, se possível , a menos que você queira especificamente criar um alias para um usuário no sistema (consulte a pergunta de alias de usuário unix em serverfault para obter mais informações sobre os detalhes técnicos).
O sistema usa esses uids para impor permissões de arquivo. O uid e o gid (id do grupo) do usuário ao qual o arquivo pertence são gravados nos metadados do arquivo. Se você transportar o disco para outro computador com um usuário diferente que compartilha aleatoriamente o mesmo uid, o arquivo de repente pertencerá a esse usuário naquele sistema. Sabendo que os uids geralmente não são mais do que inteiros de 16 bits em um sistema unix, isso mostra que os uids não devem ser globalmente exclusivos, apenas exclusivos no escopo do sistema local.
Se você tiver um sistema de usuário único e fizer uma reinstalação com o mesmo, ou uma distribuição semelhante, é muito provável que sua conta de usuário tenha o mesmo ID de usuário e, portanto, seja o mesmo usuário do ponto de vista do kernel. Por exemplo, o usuário criado durante a instalação foi UID 1000 em sistemas Debian até onde me lembro. Outros sistemas podem usar algum outro número, mas é muito provável que seja algum inteiro pequeno que seja o mesmo em todas as instalações.
O mesmo se aplica a outros usuários também (se você tiver algum), já que os UIDs geralmente são alocados sequencialmente. O terceiro usuário criado provavelmente terá o mesmo UID que o terceiro usuário criado em outro sistema. Você precisaria tomar medidas com antecedência para certificar-se de que os UIDs não estão sendo reutilizados em ambos os sistemas.
Por motivos semelhantes, qualquer coisa que use NFS precisará ter um banco de dados de usuário compartilhado.
Mas neste caso, como é o seu sistema pessoal, você pode apenas fazer o login como root e executar
chown newuser. -R /home/olduser
mesmo que o UID seja diferente.(Os sistemas Windows são diferentes, eles geram aquela string de ID longa que é mais aleatória. Lá, se você mover um disco para outra máquina, os arquivos serão vistos como pertencentes a um usuário desconhecido, e você não terá acesso sem usar poderes de administrador.
Além disso, eu disse "provavelmente" muito acima. Não há como dizer se alguma distribuição se comporta de maneira diferente. O Linux moderno também suporta UIDs de 32 bits, portanto, embora não seja tão longo quanto os SIDs do Windows, ainda há espaço para usar se alguém quiser ter, por exemplo, UIDs aleatórios. Normalmente, não há muito uso para isso, no entanto. O administrador do sistema deve saber quais discos eles anexam ao sistema e ajustar as propriedades dos arquivos de acordo, ou tornar o ponto de montagem inacessível a outros usuários.)
O Unix é um sistema muito antigo, uma época em que as capacidades de armazenamento eram muito pequenas, e tudo – tanto arquivos quanto usuários – eram identificados por números . Os nomes vieram depois , depois que o armazenamento cresceu um pouco.
Uma virtude desse sistema é que os nomes são apenas rótulos ligados aos identificadores reais: os IDs numéricos. Portanto, você pode ter vários nomes para um usuário (ao editar /etc/passwd diretamente), bem como vários nomes para um arquivo (útil para armazenar o arquivo apenas uma vez, mas vê-lo em vários locais).
Os limites são o sistema para o usuário e a partição para o arquivo.
Digo isso apenas para esclarecer, para explicar por que as coisas são o que são .
Devo confessar que nunca tentei o contrário – um mesmo nome com identidades diferentes – sempre achei que não fosse possível. É isso? Não como um bug?