Requisitos para os quais irei oferecer soluções, como marcadores:
- Login do console raiz sem senha
- Login remoto de raiz sem senha de usuários pré-autorizados
- Login remoto sem senha para contas especificadas de usuários pré-autorizados
- Login remoto sem senha para qualquer conta de usuários pré-autorizados
Os exemplos a seguir são baseados no Debian, já que é o que eu tenho aqui para testar. No entanto, não vejo razão para que os princípios não possam ser aplicados a qualquer distribuição (ou mesmo a qualquer derivado * ix baseado em PAM).
Login do console raiz sem senha
Acho que a maneira como eu abordaria isso seria aproveitar o PAM e o arquivo de configuração /etc/securetty .
Como pré-requisito, uma senha raiz "suficientemente segura" deve ser definida. Isso não é necessário para o login do console, mas existe para tornar as tentativas de cracking de força bruta irrealistas. A conta é outra conta root perfeitamente normal.
Em /etc/pam.d/login , tenho o seguinte conjunto de linhas padrão para autenticação (aquelas que começam com a palavra-chave auth ):
auth optional pam_faildelay.so delay=3000000
auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
auth requisite pam_nologin.so
@include common-auth
auth optional pam_group.so
O arquivo common-auth include referenciado contém as seguintes linhas relevantes:
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
O arquivo common-auth instrui o PAM a ignorar uma regra (a negação) se um "login UNIX" for bem-sucedido. Normalmente, isso significa uma correspondência em /etc/shadow .
A linha auth ... pam_securetty.so está configurada para impedir logins de raiz, exceto nos dispositivos tty especificados em /etc/securetty . (Este arquivo já inclui todos os dispositivos de console.)
Ao modificar ligeiramente esta linha auth , é possível definir uma regra que permita um login root sem uma senha a partir de um dispositivo tty especificado em /etc/securetty . O parâmetro success=ok precisa ser alterado para que o ok seja substituído pelo número de auth linhas a serem ignoradas no caso de uma correspondência bem-sucedida. Na situação mostrada aqui, esse número é 3 , que salta para a linha auth ... pam_permit.so :
auth [success=3 new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
Login remoto de raiz sem senha de usuários pré-autorizados
Esta é uma inclusão direta de chaves ssh para aqueles usuários autorizados que estão sendo adicionados ao arquivo root authorized_keys .
Login remoto sem senha para contas especificadas de usuários pré-autorizados
Essa também é uma inclusão simples de chaves ssh para usuários autorizados que estão sendo adicionados ao arquivo .ssh/authorized_keys do usuário correspondente e correspondente. (O cenário típico do usuário remoto chris deseja login sem senha para o usuário local chris .
Observe que as contas podem permanecer no estado bloqueado padrão após a criação (ou seja, com apenas ! no campo de senha para /etc/shadow ), mas permitem login baseado em chave SSH. Isso requer raiz para colocar a chave no arquivo .ssh/authorized_keys do novo usuário. O que é não tão óbvio é que essa abordagem só está disponível quando UsePAM Yes está definido em /etc/ssh/sshd_config . O PAM diferencia ! como "conta bloqueada para senha, mas outros métodos de acesso podem ser permitidos" e !... "conta bloqueada. Período." (Se UsePAM No for definido, o OpenSSH considerará qualquer presença de ! iniciando o campo de senha para representar uma conta bloqueada.)
Login remoto sem senha para qualquer conta de usuários pré-autorizados
Não estava totalmente claro para mim se você queria ou não essa facilidade. Ou seja, certos usuários autorizados poderão fazer o login ssh sem uma senha em qualquer conta local.
Eu não posso testar este cenário, mas acredito que isso pode ser alcançado com o OpenSSH 5.9 ou mais recente, que permite que vários arquivos authorized_keys sejam definidos em /etc/ssh/sshd_config . Edite o arquivo de configuração para incluir um segundo arquivo chamado /etc/ssh/authorized_keys . Adicione as chaves públicas de seus usuários autorizados selecionados a este arquivo, garantindo que as permissões sejam de tal propriedade que ele seja de root e tenha acesso de gravação apenas pelo usuário root (0644).