Esta é, infelizmente, uma das coisas mais confusas sobre o compartilhamento de arquivos em Unixes. E sou péssima em explicar coisas confusas.
O que você vê em ls -l
output (por exemplo) é o ID do usuário remoto traduzido da perspectiva do sistema local.
Quando programas como ls
usam as funções padrão para procurar informações de arquivos, o driver do sistema de arquivos pode fornecer apenas IDs de usuário numéricos, não nomes de texto. (Até agora, não muito diferente do Windows.) Para traduzir os UIDs para nomes, ls
chama um componente do SO totalmente diferente, as bibliotecas de serviço de nomes, que não têm conhecimento sobre onde esse UID foi obtido e, portanto, só pode traduzir as contas que o sistema operacional conhece, mas não pode voltar atrás e pedir ajuda ao driver do sistema de arquivos. (É aqui que entra a diferença)
Como exemplo, se o servidor tiver dois arquivos, um de propriedade de raiz (UID 0), o outro de propriedade de Luke (UID 1000), ls
saberá apenas que eles são de "0" e " 1000 "e procurará contas locais que tenham os mesmos UIDs. "0" é sempre root, mas "1000" pode ou não ser Luke. Se o UID pertencer a uma conta armazenada em LDAP ou NIS ou AD, e se o sistema operacional cliente estiver realmente configurado para procurar no LDAP por contas de usuário, ele fornecerá o nome de usuário correto. Caso contrário, pode ser verdade, já que os UIDs da conta local (1000, 1001, ...) tendem a corresponder a pessoas diferentes em computadores diferentes.
(Existem maneiras de o driver do sistema de arquivos dizer ao programa o nome completo do usuário, na forma de "atributos estendidos". Infelizmente, apesar de várias tentativas, não há uma maneira padrão de fazer isso e programas como ls
geralmente tentam para evitar truques específicos do sistema de arquivos.Infelizmente, nem todos os protocolos de sistema de arquivos de rede podem transferir os nomes de usuários: CIFS, também conhecido como SMB, NFSv4, e outros não.)
Mas nada disso realmente importa, já que o que você pode fazer com o arquivo é sempre determinado pelo que o servidor sabe, não pelo que o cliente vê. Por exemplo, se você usar sshfs
, ele fará login no servidor por SSH usando seu nome de usuário (por exemplo, sshfs luke@fileserver
), e o servidor não permitirá que você faça nada que não deva fazer. O mesmo acontece com o CIFS, o AFS e assim por diante.