Em / etc / ssh / sshd_config
# Disable Root login
PermitRootLogin no
#
# [ . . . ]
#
# At the end of the file, add:
#
# Allow Root Login via Key from Admin Bastion
Match Address 10.9.8.7
PermitRootLogin without-password
Eu estou querendo restringir o login root ssh vindo de todos, menos de um único endereço IP.
Tive a impressão de que precisava adicionar isso ao /etc/pam.d/sshd:
account required pam_access.so
e isso para /etc/security/access.conf:
-:root:ALL EXCEPT IPADDRESS
mas isso não parece estar funcionando.
Em / etc / ssh / sshd_config
# Disable Root login
PermitRootLogin no
#
# [ . . . ]
#
# At the end of the file, add:
#
# Allow Root Login via Key from Admin Bastion
Match Address 10.9.8.7
PermitRootLogin without-password
Por que permitir acesso root ssh? A lei de Murphy diz que, quando você precisar de acesso root, estará longe do seu endereço IP aprovado.
Esta é apenas a minha opinião, mas a melhor abordagem para isso é efetuar login como um usuário comum e, em seguida, su para root. Para obter acesso ao root, alguém precisaria da senha do usuário e da senha do root. Então, você tem uma conta de usuário regular no grupo admin ou wheel, dependendo da distribuição do Linux que você está usando.
EDIT: Para uma segurança ainda mais aprimorada, permita somente a autenticação de chave pré-compartilhada para conectividade ssh. Isso pode ser uma faca de dois gumes, embora você não esteja em uma máquina que tenha a chave privada necessária.
Suponho que isso seja o RHEL 5+ e que tenha esse problema. As mesmas etapas funcionariam para o RHEL 4. O truque para fazer isso funcionar no RHEL 5 é adicionar conta exigida pam_access.so
para /etc/pam.d/sshd na segunda ou terceira linha. Se você acabou de anexá-lo na parte inferior, não está funcionando.
Como resultado, o /etc/pam.d/sshd seria parecido com o.
# cat /etc/pam.d/sshd
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account required pam_access.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so
O acesso root restrito pode ser necessário para fazer backups e assim por diante, mas pode ser algo muito perigoso de se ter. Felizmente, o acesso direto à raiz pode ser protegido bastante usando as chaves ssh e o arquivo authorized_keys.
Primeiro, permita o login root em sshd_config, mas permita que ele apenas execute o conjunto predefinido de comandos: coloque PermitRootLogin forced-commands-only
em / etc / ssh / sshd_config ou onde quer que sua configuração sshd esteja armazenada. Isso desabilita a autenticação de senha para root, força-a a usar chaves ssh e, mesmo assim, permite apenas os comandos que você definiu.
Em seguida, faça o login no seu cliente que precisa ter acesso root direto e crie uma nova chave ssh: ssh-keygen -t rsa
. Faça essa chave sem senha, se necessário, por scripts.
Em seguida, copie essa chave ssh recém-criada para o seu servidor com ssh-copy-id -i ~/.ssh/id_rsa.pub root@yourserver
(se o login root ainda estiver ativado), se não, apenas copie o conteúdo ~ / .ssh / id_rsa.pub para /root/.ssh/authorized_keys
file.
Agora, vamos supor que seu cliente precisa executar /root/bin/startup_skynet.sh
como root via ssh. Seu arquivo authorized_keys existente se parece com algo assim:
ssh-rsa FASBFAFfasdföjasfABGVEAGUPEGDJfsadnö2314235dfbösadköjsdfösdklf==
Modifique-o para ser
no-pty,no-X11-forwarding,no-agent-forwarding,no-port-forwarding,command="/root/bin/startup_skynet.sh" ssh-rsa FASBFAFfasdföjasfABGVEAGUPEGDJfsadnö2314235dfbösadköjsdfösdklf==
e salve-o.
Em seguida, tente executar do seu cliente algo como ssh root@myserver ls
- isso deve falhar. Em seguida, vá em frente e execute ssh root@myserver /root/bin/startup_skynet.sh
- agora isso deve funcionar.
Desta forma, logins diretos podem ser muito mais seguros. Como a segurança é uma coisa em camadas e não algo que um único recurso forneceria, você ainda pode fazer mais. Se você tem um subconjunto limitado de usuários que precisam se conectar, é melhor usar o parâmetro AllowUsers
em sshd_config para permitir conexão de um conjunto predefinido de endereços IP, algo como AllowUsers [email protected] [email protected] johndoe
permitiria root a partir de 192.168.1.2 e 192.168. 1.3 e johndoe de todos os lugares.
você tentou:
-: ALL EXCEPT root:your_ip_address
?
Você tentou duas linhas:
+:root:<your_ip>
-:root:ALL
Você está procurando a opção AllowUsers para o arquivo sshd_config (geralmente encontrado em / etc / ssh /). A saber:
AllowUsers [email protected]
Que permitirá que apenas a raiz faça o login a partir do IP 10.200.0.1 - a configuração padrão é para todos os usuários de todos os hosts serem permitidos ...
A única desvantagem que posso ver é que se você usar AllowUsers , deverá listar todos usuários que você precisa ter acesso - o que definitivamente seria difícil de administrar com uma lista grande de usuários (por exemplo, sendo extraída do LDAP ou outro diretório).
Isso deve ser possível para contornar até certo ponto, já que a opção faz permitir o uso de padrões de caractere curinga, de acordo com a página man:
This keyword can be followed by a list of user name patterns, separated by spaces. If specified, login is allowed only for user names that match one of the patterns. '*' and '?' can be used as wildcards in the patterns. Only user names are valid; a numerical user ID is not recognized. By default, login is allowed for all users. If the pattern takes the form USER@HOST then USER and HOST are separately checked, restricting logins to particular users from particular hosts.
Ainda assim, pode ser bastante restritivo, YMMV. Espero que isso ajude.
Sugiro que você use o recurso Match
em sshd_config
e combine com o IP (ou sub-rede).
Isso permitiria que você também especificasse a funcionalidade permitida. Por exemplo: você pode dizer que apenas usuários de conjuntos de sub-redes "internos" podem usar PasswordAuthentication
(e que AllowRoot
pode vir apenas de um único / pequeno intervalo de IPs que exigem isso).
Note também que a autenticação via chave pública não passa pelo PAM, então o pam_access não funcionará se você usar autenticação de chave pública.
veja /etc/hosts.allow e /etc/hosts.deny
Definir
PermitRootLogin without-password
em sshd_config e, em seguida, insira a chave pública da máquina permitida em authorized_keys2 no sistema de destino.
Se você não sabe como fazer isso - no "sistema permitido" faça como root (aceite os padrões e não configure uma senha):
# ssh-keygen -t rsa -b 2048 # scp /root/.ssh/id_rsa.pub targetsystem:/tmp
No sistema "alvo", faça:
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys2 rm -f /tmp/id_rsa.pub
Como alternativa, você pode definir uma senha na chave ssh. Esta é uma solução simples que proíbe qualquer autenticação baseada em senha pelo root para efetuar login, usando a chave pública apenas do sistema "permitido" para acessá-la.
Mentes são como pára-quedas, só porque você perdeu o seu não significa que você pegou o meu ...
Eu amo discussões sobre segurança, todo mundo pensa que o caminho é o único caminho. Aqui está o que você faz, dê um passo para trás, olhe para sua infra-estrutura, considere os pontos de acesso e, em seguida, crie um modelo que ofereça segurança suficiente para que você não precise se preocupar muito com isso.
Dito isto, minha opinião abaixo:
logando como root francamente, estúpido. Simplesmente não há razão para isso ... então não faça isso. Para usuários com privilégios suficientes para sudo para root, assegure-se de que seu sistema esteja configurado apropriadamente. Autenticação por senha, desabilite-a, use somente chaves SSH.
A partir de hosts confiáveis, um número limitado de endereços / 32 faz o login, já que sua conta de usuário não deve exigir nada além de sua chave ssh ... de hosts não confiáveis, use autenticação de dois fatores. Nome de usuário / senha ... + 6-8 mudando o número a cada 30 segundos ...
NOTA: Esta configuração pode ser realizada configurando em sshd_config:
PermitRootLogin no
PasswordAuthentication no
Confira o Google-Authenticator, é super fácil de configurar e configurar, e faz o trabalho muito bem. É como RSA ou qualquer outra configuração de dois fatores, o Google tem um aplicativo para o Android e o iPhone, por isso é bonito e fácil para configurar. E quando a conexão de hosts não confiáveis, senhas serão permitidas se a autenticação de dois fatores estiver configurada corretamente.