Como o Linux identifica os usuários?

8

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 veio à minha mente enquanto eu estava pensando em renomear minha casa /home/old-arch antes de reinstalar o sistema (eu tenho /home em sua própria partição e eu não formato), então eu poderia ter um novo, intocado /home/arch . Gostaria de saber se o novo sistema me daria as permissões antigas em meus arquivos ou se me reconheceria como um% diferente arch .

    
por Arch Stanton 20.06.2018 / 23:03

4 respostas

9

No Unix, os usuários são identificados pelo seu ID (uid), que deve ser único (no escopo do sistema local). Então, mesmo que fosse possível criar dois usuários diferentes com o mesmo nome (adduser no meu sistema se recusa a fazer isso, veja esta questão para mais informações Pode separar contas unix compartilhar um nome de usuário, mas tem senhas separadas? ), eles precisariam para obter uids diferentes. Embora você possa manipular arquivos que contenham as informações do usuário para corresponder aos seus critérios, cada programa é baseado na suposição de que os uids são exclusivos 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, isto é como ter dois nomes diferentes para o mesmo usuário, então construções como essa devem ser evitado se possível, a menos que você queira especificamente criar um alias para um usuário no sistema (consulte o alias do usuário unix

O sistema usa esses uids para impor permissões de arquivo. O uid e o gid (group id) 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 compartilhe aleatoriamente o mesmo uid, o arquivo passará a pertencer a esse usuário nesse sistema. Sabendo que os uids são geralmente não mais do que inteiros de 16 bits em um sistema unix, isso mostra que os uids não se destina a ser globalmente único, único no âmbito do sistema local.

    
por 20.06.2018 / 23:24
21

Se você forçar a existência de vários usuários com o mesmo nome de usuário, haverá várias entradas em /etc/{shadow,passwd} com o mesmo nome:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash

# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::

Se você tentar fazer login como esse usuário, fará o login como a primeira correspondência.

$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a

Não haverá como fazer login como o segundo usuário com o mesmo nome.

Note que o Linux rastreia os usuários pelo seu uid, não pelo nome de usuário.

No entanto, seria possível ter dois nomes de usuário diferentes como o mesmo ID do usuário. Considere uma versão diferente de /etc/passwd :

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash

Observe que, para os dois nomes de usuário a e b , a terceira coluna é 1001 - esse é o ID do usuário / uid. Agora, se o usuário a ou usuário b efetuar login (mesmo com senhas diferentes), ambos serão "usuário 1001" e serão exibidos como usuário a do ponto de vista do sistema operacional. Aqui também, a primeira entrada correspondente é aquela retornada (na maioria dos casos):

$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

Tanto a como b são 1001 e terão acesso aos recursos disponíveis para uid 1001 .

    
por 20.06.2018 / 23:22
3

I was considering to rename my home /home/old-arch before reinstalling the system. I wondered if the new system would give me the old permissions on my files or if it would recognize me as a different arch.

Se você tem um sistema de usuário único e faz uma reinstalação com a mesma distribuição, ou similar, é 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 tem sido o UID 1000 nos sistemas Debian, tanto quanto me lembro. Outros sistemas podem usar algum outro número, mas é muito provável que seja um 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 são geralmente alocados sequencialmente. O terceiro usuário criado provavelmente terá o mesmo UID que o terceiro usuário criado em outro sistema. Você precisa tomar medidas de antemão para garantir que os UIDs não sejam reutilizados nos dois sistemas.

Por motivos semelhantes, qualquer coisa que use o NFS precisará ter um banco de dados de usuários compartilhado.

Mas, neste caso, como é o seu sistema pessoal, basta 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 essa longa cadeia de ID que é mais aleatória. Lá, se você mover um disco para outra máquina, os arquivos serão vistos por um usuário desconhecido e você não terá acesso sem usar poderes de administrador.

Além disso, eu disse "provável" muito nos itens 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á algum espaço a ser usado se você 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 do arquivo de acordo ou tornar o ponto de montagem inacessível a outros usuários.

    
por 21.06.2018 / 11:14
1

O Unix é um sistema muito antigo, uma era em que as capacidades de armazenamento eram muito pequenas e tudo - bem como arquivos como usuários - era identificado por números . Os nomes vieram depois , depois que o armazenamento cresceu um pouco.

Uma virtude deste sistema é que os nomes são apenas rótulos ligados às identificações reais: os IDs numéricos. Assim, você pode ter vários nomes para um usuário (na edição de / 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).

Limites são o sistema para o usuário e a partição para o arquivo.

Eu digo isso apenas para esclarecer, para explicar por que as coisas são o que são .

Devo confessar que nunca tentei o caminho oposto - um mesmo nome com IDs diferentes - eu sempre achei que não era possível. É isso? Não como um bug?

    
por 21.06.2018 / 11:08