Como o Linux identifica os usuários?

9

Quero dizer, se dois usuários têm o mesmo nome, como o sistema sabe que na verdade são usuários diferentes quando aplica permissões de arquivo?

Essa dúvida me veio à mente enquanto eu estava pensando em renomear minha casa /home/old-archantes de reinstalar o sistema (eu tenho /homeem sua própria partição e não a formato), para que eu pudesse ter uma nova e intocada /home/arch. Gostaria de saber se o novo sistema me daria as permissões antigas em meus arquivos ou se me reconheceria como diferente arch.

Arch Stanton
fonte
12
A resposta simples é "não", porque você não deve ter vários usuários com o mesmo nome de usuário.
Ignacio Vazquez-Abrams
6
UIDs, que são distintos, mas geralmente associados a nomes de usuário, são como esse tipo de coisa é rastreado. Veja a saída de ls -n.
DopeGhoti
5
"Enviar" é uma operação muito nebulosa para responder à pergunta. As permissões se aplicam apenas a um único sistema (de tamanho arbitrário).
Ignacio Vazquez-Abrams
1
@ IgnacioVazquez-Abrams Na verdade, essa pergunta veio à minha mente quando eu estava pensando em renomear minha casa /home/old-archantes de reinstalar o sistema (eu tenho /homeem sua própria partição e não a formato), para que eu pudesse ter uma nova e intocada /home/arch. Gostaria de saber se manteria as mesmas permissões em meus arquivos ou se o sistema me reconheceria como diferente arch.
Arch Stanton
1
Eu acho que o caso que você mencionou no seu comentário é interessante, cerca de dois usuários com o mesmo nome de usuário, mas em sistemas diferentes instalados na mesma máquina, acessando os mesmos arquivos em uma partição compartilhada. Talvez você possa adicioná-lo à pergunta?
Time4Tea

Respostas:

10

No Unix, os usuários são identificados por seu ID (uid), que deve ser exclusivo (no escopo do sistema local). Portanto, mesmo que fosse possível criar 2 usuários diferentes com o mesmo nome (o 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 possuem senhas separadas? ), Precisariam obter uids diferentes. Embora você possa manipular arquivos que contêm 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 criar especificamente um alias para um usuário no sistema (consulte a pergunta de alias do usuário unix no 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 compartilhe aleatoriamente o mesmo uid, o arquivo pertencerá repentinamente a esse usuário no sistema. Sabendo que os uids geralmente não têm mais que números inteiros de 16 bits em um sistema unix, isso mostra que os uids não devem ser globalmente exclusivos, apenas únicos no escopo do sistema local.

Lollen Jumplan
fonte
22

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:

$ 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á 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.

Observe que o Linux rastreia os usuários por seu uid, não por seu 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:

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

Observe que, para os nomes de usuário ae b, a terceira coluna é 1001 - esse é o uid / ID do usuário. Agora, se o usuário aou usuário befetuar login (mesmo com senhas diferentes), ambos serão "usuário 1001" e serão exibidos como usuário ana perspectiva do sistema operacional. Aqui também, a primeira entrada correspondente é a 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)

Ambos ae bsão uid 1001e terá acesso aos recursos disponíveis para uid 1001.

Andy Dalton
fonte
por que não verifica nomes de usuário duplicados ao criar um novo?
Phuclv
9
Note que acho que até a linha de base mais useraddadequada se você tentar adicionar um usuário existente, então, por 'força' aqui, Andy significa 'editar manualmente /etc/passwde /etc/shadowque é muito território Não tente fazer isso em casa.
precisa saber é o seguinte
"Não haverá como fazer login como o segundo usuário com o mesmo nome." Você ainda não conseguiu ligar setuidcom o segundo UID? Ou mesmo sudo -u '#<uid>' bash?
jazzpi
1
@jazzpi Isso pode depender da definição de "login". No entanto, eu certamente poderia ver gerenciadores de login gráfica que esta situação ...
um CVn
3

Eu estava pensando em renomear minha casa /home/old-archantes de reinstalar o sistema. Gostaria de saber se o novo sistema me daria as permissões antigas em meus arquivos ou se me reconheceria como um arco diferente.

Se você possui um sistema de usuário único e faz uma reinstalação com a mesma distribuição ou com 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 da perspectiva do kernel. Por exemplo, o usuário criado durante a instalação foi o UID 1000 nos sistemas Debian, tanto quanto me lembro. Outros sistemas podem usar outro número, mas é muito provável que seja um número inteiro pequeno e igual ao mesmo em todas as instalações.

O mesmo se aplica a outros usuários (se houver), pois os UIDs geralmente são alocados sequencialmente. É provável que o terceiro usuário criado tenha o mesmo UID que o terceiro usuário criado em outro sistema. Você precisaria executar etapas antecipadamente para garantir que os UIDs não estejam sendo reutilizados nos dois sistemas.

Por razões semelhantes, qualquer coisa que use o NFS precisará ter um banco de dados de usuário compartilhado.

Mas, neste caso, como é seu sistema pessoal, você pode fazer login como root e executar chown newuser. -R /home/oldusermesmo que o UID seja diferente.

(Os sistemas Windows são diferentes, eles geram essa sequência de ID longa 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 os poderes de administrador.

Além disso, eu disse "provavelmente" muito acima. Não há como saber 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 alguém quiser, por exemplo, UIDs aleatórios. Normalmente, não há muita utilidade 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 para outros usuários.)

ilkkachu
fonte
1

O Unix é um sistema muito antigo, uma época em que as capacidades de armazenamento eram muito pequenas e tudo - tanto arquivos quanto usuários - era identificado 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 (na edição direta de / etc / passwd), além de vários nomes para um arquivo (útil para armazenar o arquivo apenas uma vez, mas em vários locais).

Os 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 - sempre pensei que não era possível. É isso? Não como um bug?

ypouplard
fonte
1
Então, você está dizendo que outros sistemas de arquivos, como NTFS ou CIFS, usam nomes de usuário e não SIDS alfanuméricos para armazenar permissões e permissões de arquivos?
usar o seguinte código
Não tenho certeza, mas eu acredito que é o caso, como SIDS alfanuméricos não existiam quando o Windows foi criado - Ainda me lembro do dia em que comprei o Windows 286 , que foi o primeiro sucessor gráfica do MS-DOS ...
ypouplard
1
@ DougO'Neal: os SIDs do NT têm dois formatos: uma representação textual e um formato binário de 12 bytes. O AFAIK, NTFS usa o último internamente, por isso ainda usa números para identificar usuários - apenas números muito grandes. :)
Chao
3
@ypouplard Quando o Windows foi criado, era um sistema operacional de usuário único. Não havia necessidade de definir a posse de arquivo, pois a pessoa sentada ao teclado governava tudo.
precisa saber é o seguinte