Você realmente não precisa pensar sobre o arquivo passwd
. O shell geralmente não suporta autenticação de senha. É provavelmente um pouco mais simples do que você pensa. Outros programas, como init
, getty
e login
, na verdade, executam a maior parte do processo de login que você descreveu em sua pergunta.
A maioria dos shells considera a sessão como um shell interativo se o shell for iniciado com a opção -i
ou se a saída padrão estiver conectada a um dispositivo terminal (por exemplo, /dev/tty01
) .
O shell considera a sessão como um shell de login se o primeiro caractere do argumento zero ($ 0) for um traço ( -
). Algumas shells também suportam uma opção -l
para causar o mesmo efeito.
O "login shell" é geralmente e tradicionalmente iniciado desta forma através do processo de login do Linux convencional :
O programa init
ou outro inicia um processo getty
em cada terminal que pode ser usado para login.
O programa getty
imprime uma solicitação e lê o username
do terminal. Então, getty
chama o programa login
com o nome de usuário como argumento.
O programa login
procura o nome de usuário no arquivo passwd
, lê e autentica a senha do usuário, configura as IDs de usuário e grupo do usuário e as variáveis de ambiente e executa outras tarefas relacionadas ao login < em> antes iniciando o shell de login.
O processo login
notifica o shell de que é um shell de login, colocando um traço ( -
) no nome do programa em argv[0]
(também conhecido como $0
dentro do shell).
Para mais detalhes sobre o conceito de login e sessões interativas, você pode querer consultar a página de manual para getty
, login
e para o shell específico que você está usando. Shells diferentes (por exemplo, sh
, ksh
, bash
, etc) possuem maneiras ligeiramente diferentes de ler arquivos de comando de inicialização (como .profile
, .bash_rc
, etc.)