
Se os usuários UNIX acessarem os servidores via SSH e quisermos permitir apenas logins pubkey, há algum outro item que precise ser adicionado a esta lista com o qual eu deveria me preocupar?
- Permitir
pubkey login
a entrada dosshd_config
arquivo no servidor. - Considerações sobre uma senha padrão, como"!"ou"*"
Responder1
Teria sido bom dizer qual servidor SSH você solicitou e quais (conjunto de) sistemas Unix.
!
e *
não são senhas quando você as vê em /etc/passwd
ou /etc/shadow
(use getent
para ler essas entradas).
São marcadores que indicam se a conta possui senha ou não e se está bloqueada ou não.
Esta é uma distinção importante, dependendo da configuração e versão do PAM e da distribuição,se você estiver no Linux. Se bloqueado, é menos provável que você tenha permissão para fazer login, mas, por outro lado, é possível que funcione imediatamente em sistemas mais antigos (pelo menos essa é a minha experiência).
Você pode usar (como superusuário) passwd -l <name>
para bloquear uma conta ( !
) ou passwd -d <name>
excluir a senha dela ( *
) e também pode combinar ambos, o que simplesmente garantiria que qualquer senha existente fosse removida: passwd -dl <name>
.
Você não diz, mas assumindo que o OpenSSH as diretivas relevantes /etc/ssh/sshd_config
(o caminho pode variar) são:
HostKey ...
O servidor deve ter uma chave de host ou RSA2 ou DSA (e implementações mais modernas também adicionam duas implementações de curva elíptica). O RSA1 foi abandonado há muito tempo por todas as implementações comuns de servidores SSH.
Então:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
Eu também recomendaria sempre configurar /etc/sudoers
e proibir completamente root
o login via SSH ( PermitRootLogin no
). No entanto, pode haver uma pequena desvantagem nesta configuração mais segura, quando o disco está cheio e seu sudo
membro sem privilégios não consegue gravar no disco, mas root
o faria (devido ao espaço reservado). Então YMMV.
Mais dois conselhos
Atribuir um grupo para limitar o acesso SSH
Crie um grupo ssh-users
(ou qualquer nome que desejar) e defina a respectiva diretiva em sshd_config
. Certifique-se de que root
é ou não membro desse grupo de acordo com a política que você escolheu com base nas informações acima.
AllowGroups ssh-users
Atribuir um grupo para limitar os usuáriosapenasAcesso SFTP
A sshd_config
seguir, garantiremos que os usuários não possam escapar /home
e que certas funcionalidades sejam desativadas para eles.
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
Conclusão
Então, sim, o PAM teria que ser adicionado como uma consideração se estivesse no Linux.
Além disso, permita o encaminhamento do agente ou deixe isso para vocês, usuários.
E por último, mas não menos importante, permitir o encaminhamento de portas ou conexões X11. Especialmente as portas podem ser indesejáveis, pois permitem que um usuário use seu servidor como proxy.
A Match
diretiva também permite limitar os usuários em relação ao local onde eles estão se conectando (um firewall também pode fazer isso ou os wrappers TCP).
Você deseja que seus usuários tenham permissão para gerenciar as chaves ou deseja abstrair isso e tornar o acesso direto authorized_keys
indisponível para eles?
Certamente há mais aspectos, mas eles estão principalmente em um nível de detalhe mais refinado e, como tal, variações dos pontos acima mencionados.
Responder2
Seja o que for que o usuário queira, considerando quaisquer políticas de complexidade de senha. Se o único acesso for via SSH e PasswordAuthentication
estiver no
emsshd_config
, então não importa qual seja a senha. Observe também que as entradas emshadow
são senhas criptografadas, portanto os valores de !
e *
não sãosenhas- mas strings que não são valores criptografados válidos, evitando assim o login baseado em senha.
Responder3
Supondo que você esteja executando algo semelhante ao RHEL/CentOS com OpenSSH, estas são as coisas que normalmente faço quando não uso senha:
- Configure sshd_config para aceitar apenas autenticação pubkey (
PubkeyAuthentication yes, PasswordAuthentication no, ChallengeResponseAuthentication no, UsePAM no
) - Definir todos os usuários existentes para terem uma senha inválida (
chpasswd -e 'pubkey!!' <username>
) - Remover expiração de senha de todos os usuários existentes (
chage -M -1 <username>
) - Se estiver usando sudo, certifique-se de que todas as especificações do usuário estejam marcadas como NOPASSWD (por exemplo
%wheel ALL=(ALL) NOPASSWD: ALL
) - Certifique-se de que seu processo de criação de usuário manterá esses requisitos (por exemplo
useradd -p 'pubkey!!' -K MAX_PASS_DAYS=-1 <username>
)
Antes de bloquear o acesso por senha, certifique-se duplamente de que você consegue autenticar com êxito via pubkey. Certifique-se de que sua partição /home não esteja montada em rede (ou qualquer outra coisa que nem sempre esteja disponível). Há poucas coisas piores do que perder o acesso ao seu servidor porque ele não consegue acessar o seu pubkey. Se o sistema estiver sem cabeça, certifique-se de ter alguma maneira de obter acesso direto ao console rapidamente em caso de emergência (KVM, console virtual, carrinho de travamento, etc.).
Dito isso, eu consideraria colocar uma senha na conta de qualquer pessoa com acesso total ao sudo e configurar os sudoers para exigir uma senha deles. Se todo o resto estiver configurado como acima, eles ainda não conseguirão fazer login no servidor com essa senha, mas isso lhe dará uma proteção extra contra alguém sentado no prompt de comando e fazendo "coisas ruins (tm)" .
Responder4
Se esta for uma máquina UNIX (HP UX) e não Linux, você precisará adicionar rcommand
ao seu pam.conf na conta sshd.
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
Caso contrário, você receberá uma solicitação de senha que não será necessária ao tentar fazer o ssh na máquina.