Em primeiro lugar, gostaria de observar que estou ciente de que há muitas outras questões relacionadas ao encaminhamento do agente SSH. As pessoas queriam saber como fazer o encaminhamento de agente funcionar ou como configurá-lo com segurança. Mas tenho o problema oposto: parece que não posso desativá -lo com segurança. Aqui vamos nos:
Estou executando um sistema Debian bullseye, atualizado no momento em que escrevo, basicamente vanilla. Nesse sistema, um daemon SSH está em execução, com a seguinte configuração em /etc/ssh/sshd_config
:
AcceptEnv LANG LC_*
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
ChallengeResponseAuthentication no
Ciphers [email protected],[email protected]
Compression no
DebianBanner no
HostKeyAlgorithms rsa-sha2-512,ssh-ed25519
KbdInteractiveAuthentication no
KexAlgorithms curve25519-sha256,[email protected],diffie-hellman-group-exchange-sha256
ListenAddress aaa.bbb.ccc.ddd
LoginGraceTime 20
MACs [email protected],[email protected]
PasswordAuthentication no
PermitUserRC no
Protocol 2
# The first of the following version is the right one.
# However, for brain-dead WinSCP, we need the second version.
#PubkeyAcceptedKeyTypes rsa-sha2-512,rsa-sha2-256,ssh-ed25519
PubkeyAcceptedKeyTypes rsa-sha2-512,rsa-sha2-256,ssh-ed25519,ssh-rsa
RekeyLimit 100M 20m
Subsystem sftp /usr/lib/openssh/sftp-server
Match user copyremote
ChrootDirectory /backup
ForceCommand /usr/lib/openssh/sftp-server
Este é o arquivo de configuração completo ; nada foi removido ou ofuscado, exceto o endereço IP em que ele escuta. Além disso, não há outros locais que contenham trechos de configuração adicionais para o daemon SSH.
Basicamente, essa configuração tenta desativar todos os recursos que não preciso, por exemplo, o recurso de encaminhamento de agente (nota: Nesse arquivo de configuração, não adicionei as linhas para a maioria dos recursos que estão desativados por padrão (de acordo com o manual)). Vemos também que a autenticação é baseada exclusivamente em chaves públicas.
Outro dia estava investigando um problema com o usuário copyremote
e o subsistema sftp e por isso deu -v
como parâmetro to sftp
em uma máquina cliente. Isso leva à seguinte saída (mostrando apenas as partes relevantes):
root@morn ~/scripts # sftp -v -i ~/.ssh/id_rsa_backup_user [email protected]:/backup/achilles.bsdtar.gz .
OpenSSH_8.4p1 Debian-5+deb11u1, OpenSSL 1.1.1n 15 Mar 2022
[...]
debug1: Remote: /home/usr/copyremote/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Remote: /home/usr/copyremote/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
[...]
Agora isso é assustador. Achei que tinha desativado o encaminhamento de agente globalmente no arquivo de configuração de todo o sistema no servidor. No entanto, pelo que entendi, essa saída oferece.
Alguém poderia explicar como posso desativar o encaminhamento de agente (e outros recursos que não desejo que o servidor ofereça) globalmente ?
Esses recursos podem ser desabilitados explicitamente nos authorized_keys
arquivos, mas isso seria muito propenso a erros e muito trabalhoso se houvesse vários usuários e cada um deles aceitasse várias chaves públicas, então eu realmente prefiro poder desativá-lo em um lugar.
Este é o authorized_keys
arquivo do usuário copyremote
no servidor:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDs6ku+LXaUBs....JFchhaoQ== me@client
Não há nada de especial lá. Notavelmente, o encaminhamento do agente não é permitido explicitamente. Por que ele não aplica a configuração da configuração de todo o sistema?
PS Estou ciente de que SSH / SFTP chroot não fornece a segurança que esperaríamos dele. Eu implementei outras medidas no servidor que mitigam esse problema, então não precisa ser discutido aqui :-)
Diz apenas que o encaminhamento do agente seria possível com a chave (padrão), caso o encaminhamento do agente fosse habilitado globalmente (o que não é).
A entrada de log mostra apenas o resultado da análise do
authorized_keys
arquivo. Basicamente, diz que ono-agent-forwarding
sinalizador NÃO foi encontrado na respectiva entrada. Não reflete de forma alguma aAllowAgentForwarding no
diretiva.