Em quais etapas o sistema passa ao manipular uma conexão SSH?

8

Quais etapas o sistema realiza ao manipular uma conexão SSH?

  1. Tentamos fazer login via ssh
  2. sshd inicia o módulo pam e pam para nos autenticar
  3. Dependendo da configuração do pam, precisamos fornecer o nome de usuário e a senha (as verificações de pam passwd e shadow files)
  4. o pam verifica se há hosts.allow/deny , /etc/shells e outras coisas
  5. Se tudo correr bem, estamos logados
  6. ???
  7. A Shell é iniciada

Então, minha pergunta é qual mecanismo é responsável por verificar qual shell é atribuído ao usuário em seu arquivo passwd (na etapa 6)? É o próprio pam, algum módulo pam específico, sshd ou outra coisa? Eu sei que posso substituir o arquivo passwd (para verificar nome de usuário e senha) escrevendo um módulo pam, mas como posso substituir o arquivo passwd para a entrada do shell?

    
por pbm 14.11.2010 / 17:11

1 resposta

8

Até onde eu sei, o PAM não determina o shell do usuário, isso é deixado para o aplicativo. Os módulos de sessão do PAM executam ações genéricas e verificações que devem ser feitas em cada login usando esse serviço específico. Se o aplicativo, em seguida, deseja iniciar um shell, ele está livre para fazer isso e normalmente procurará o shell no banco de dados do usuário.

Supondo que sua pergunta é sobre OpenSSH , é exatamente isso que faz: depois que o usuário é autenticado, e o material da sessão do PAM tem sido done (se configurado para usar o PAM¹), o servidor ssh procura o shell no banco de dados do usuário (diretamente, não através da biblioteca PAM).

O banco de dados do usuário não está limitado a /usr/passwd e amigos. No Linux (que eu suponho que você está usando desde que você menciona shadow ), o que compõe o banco de dados do usuário é determinado pela configuração passwd em /etc/nsswitch.conf . Em configurações multi-computador, as adições comuns ao banco de dados local são NIS e LDAP . Se você quiser usar um shell que não seja o que está em /etc/passwd , isso pode ser o que configurar (embora seja um pouco estranho, e talvez as pessoas possam oferecer sugestões melhores se você nos disser o que está tentando realizar).

Se você deseja ter usuários sem acesso total ao shell, a solução natural é alterar /etc/passwd para colocar um shell restrito - talvez rssh para permitir apenas alguns aplicativos do tipo de cópia de arquivos, como scp, rsync e cvs. Você também pode usar comandos forçados no ~/.ssh/authorized_keys file do usuário.

Se você quiser ver um rastreamento do que o servidor ssh está fazendo, inicie o daemon como ssh -ddd . Você também pode obter a visão do cliente com ssh -vvv , embora aqui a visão do servidor seja o que mais lhe interessará.

O OpenSSH usa somente o PAM, se estiver configurado com o suporte do PAM, e a diretiva UsePAM está definida como yes in sshd_config . Mesmo quando usa o PAM, ele oferece outros métodos de autenticação além do PAM; em particular, a autenticação por chave pública não passa pelo PAM.

    
por 14.11.2010 / 17:52

Tags