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