Tentando aprender sobre UIDs e GIDs.
Várias leituras online me levaram a acreditar que meu UID está salvo em /etc/passwd
, mas isso não parece ser o caso em um servidor em que trabalho:
$ whoami
user1
$ cat /etc/passwd | grep user1
$
Existe um (outro) arquivo além do /etc/passwd
que poderia conter meu UID?
(Estou assumindo que o UID é semelhante ao GID, pois há um arquivo em algum lugar que o contém. Encontrei o GID no qual estou interessado no arquivo /etc/group
)
Eu sei que posso obter meu UID com o comando id -u
, mas para esta pergunta, estou especificamente interessado em saber se existe um arquivo que o contém.
Sim
/etc/passwd
é uma das muitas maneiras pelas quais o banco de dados de contas de usuário pode ser armazenado e consultado.Em muitos sistemas do tipo Unix, o Name Service Switch (inicialmente do Solaris) é responsável por traduzir alguns nomes de sistema de/para ids usando vários métodos.
Sua configuração geralmente é armazenada em
/etc/nsswitch.conf
.Lá, você encontrará entradas para vários bancos de dados e como eles são tratados (grupo, senha, serviços, hosts, redes...). Para o
hosts
banco de dados que é usado para traduzir nomes de host em endereços de protocolo de rede, você descobrirá que DNS e, às vezes, mDNS são geralmente consultados além de/etc/hosts
.Quando um processo solicita informações sobre um nome de usuário, como com a
getpwnam()
função padrão, os métodos a serem usados são pesquisados nesse arquivo para apasswd
entrada.Se tal método for o
files
método,/etc/<db>
será pesquisado. Em sistemas GNU, isso normalmente é feito por algum/lib/<system>/libnss_files.so.<version>
módulo carregado dinamicamente.Mas você pode ter muito mais, como NIS+, LDAP, SQL. Alguns desses métodos estão incluídos na GNU libc, outros podem ser instalados separadamente. No Debian ou derivados, veja a saída de
apt-cache search 'NSS module'
por exemplo.Em ambientes corporativos, onde o banco de dados do usuário é centralizado, o banco de dados central mais popular era o NIS, depois o NIS+, enquanto atualmente é mais o LDAP ou o Active Directory da Microsoft (ou seus clones para Unix).
Se estiver presente, as
get{pw/host/grp}...()
funções da GNU libc também consultarão um daemon de armazenamento em cache do serviço de nomes/run/nscd/socket
em vez de invocar toda a pilha NSS e consultar os bancos de dados de back-end diretamente. Em seguida, a consulta será feitanscd
e armazenada em cache para acelerar as consultas posteriores. Alguns módulos NSS também podem fazer seus próprios caches.Em sistemas GNU/Linux, um método popular é usar o System Security Services (
sss
). Isso vem com um daemon separado (sssd
) que lida com as solicitações e as despacha para outros bancos de dados (como LDAP / AD) enquanto também faz algum armazenamento em cache. Então/etc/nsswitch.conf
terá umsss
método para a maioria dos BDs, e os backends são configurados nasssd
configuração. O PAM (responsável pela autenticação) normalmente também consultasssd
nesse caso.Isso deve ajudar a esclarecer por que consultar
/etc/passwd
(ou/etc/group
ou/etc/hosts
...) para obter informações de conta (ou grupo/host...) da linha de comando está errado no caso geral. A maioria dos sistemas modernos terá umgetent
comando para isso (também do Solaris), ou mais portátil, você pode usarperl
a interface do 's para todas asget<db>*()
funções padrão.tecnicamente sim , existe algum arquivo em algum lugar que contém o uid para cada nome de usuário.
Se você criar contas locais simples no linux, elas estarão
/etc/passwd
no campo #3 entre os:
's.Mas se o linux usar a autenticação do ActiveDirectory, ele obterá todas as informações de nome de usuário/uid de outro servidor e, em seguida, será armazenado em algum arquivo [texto] no seu sistema linux, não sei, ele pode ser armazenado na memória; Gostaria muito de saber esse detalhe.
Existem alguns esquemas de login ou autenticação que o Linux suporta, AD para um, também LDAP. Onde o LDAP armazena o mapeamento de nome de usuário e uid eu não sei, mas também estaria interessado em saber.
Então... Existe um arquivo além de /etc/passwd que contém/define meu UID? sim . Depende de todos os diferentes métodos de login/autenticação que o linux suporta, além do método local tradicional simples /etc/passwd e qual método está sendo usado. Portanto, sua próxima pergunta pode ser quais são todos os métodos de autenticação de login que o linux suporta e como posso saber qual está sendo usado. .