Existem várias partes para os programas de login. Os programas de login diferem em como eles interagem com o usuário que está tentando efetuar login. Veja alguns exemplos:
-
login
: lê a entrada em um terminal de texto -
su
: invocado por um usuário já logado, obtém a maioria dos dados de seus argumentos de linha de comando, além de dados de autenticação (senha) de um terminal -
gksu
: semelhante asu
, mas lê dados de autenticação em X -
rlogind
: obtém entrada através de uma conexão TCP através do protocolo rlogin -
sshd
: obtém entrada através de uma conexão TCP através do protocolo SSH - X gerenciadores de exibição (xdm, gdm, kdm,…): semelhante a
login
, mas lê entrada em um display X
Esses programas operam de maneira semelhante.
-
A primeira parte é authentication : o programa lê algumas informações do usuário e decide se o usuário está autorizado a efetuar login. O método tradicional é ler um nome de usuário e senha, e verificar se o usuário é mencionado no banco de dados do usuário do sistema e se a senha digitada pelo usuário é a que está no banco de dados. Mas há muitas outras possibilidades (senhas únicas, autenticação biométrica, transferência de autorização,…).
-
Uma vez estabelecido que o usuário está autorizado a efetuar login e em qual conta, o programa de login estabelece a autorização do usuário, por exemplo, a quais grupos o usuário pertencerá nesta sessão.
-
O programa de login também pode verificar as restrições da conta. Por exemplo, pode impor um tempo de login ou um número máximo de usuários conectados ou recusar determinados usuários em determinadas conexões.
-
Finalmente, o programa de login configura a sessão do usuário. Existem vários subetapas:
- Defina as permissões do processo para o que foi decidido na autorização: usuário, grupos, limites,… Você pode ver um exemplo simples desta sub-seção aqui (somente trata usuários e grupos). A idéia básica é que o programa de login ainda está rodando como root neste momento, então ele tem privilégios máximos; primeiro remove todos os privilégios além de ser o usuário root e, finalmente, chama
setuid
para eliminar esse último privilégio, mas não menos importante. - Possivelmente monte o diretório pessoal do usuário, exiba uma mensagem "você tem e-mail", etc.
- Invoque algum programa como usuário, normalmente o shell do usuário (para
login
esu
ousshd
se nenhum comando tiver sido especificado; um gerenciador de exibição X chama um gerenciador de sessão X ou gerenciador de janelas).
- Defina as permissões do processo para o que foi decidido na autorização: usuário, grupos, limites,… Você pode ver um exemplo simples desta sub-seção aqui (somente trata usuários e grupos). A idéia básica é que o programa de login ainda está rodando como root neste momento, então ele tem privilégios máximos; primeiro remove todos os privilégios além de ser o usuário root e, finalmente, chama
A maioria dos unices hoje em dia usa PAM (Pluggable Authentication Modules) para fornecer uma maneira uniforme de gerenciar o login Serviços. O PAM divide sua funcionalidade em 4 partes : “Auth” engloba tanto a autenticação (1 acima) quanto a autorização (2 acima); “Conta” e “sessão” são como 3 e 4 acima; e há também "senha", que não é usada para logins, mas para atualizar os tokens de autenticação (por exemplo, senhas).