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.)