Como permitir que o ssh faça root no usuário apenas da rede local?

38

Instalei o Google-Authenticator em uma máquina CentOS 6.5 e configurei determinados usuários para fornecer OTP.

Durante a edição /etc/ssh/sshd_config, vi uma diretiva " PermitRootLogin" comentada por padrão.

Eu gostaria de definir " PermitRootLogin no" mas ainda poder ssh na máquina como root somente da rede local.

Isso é possível?

Itai Ganot
fonte
5
Nunca faça isso. Faça o SSH como seus usuários e use o sudo para elevar as permissões. Faça isso para deixar um rastro de papel e assim você saberá qual conta foi comprometida.
SnakeDoc 18/07/19
3
@SnakeDoc: Essa é uma escola de pensamento, mas não é clara e eu argumentaria o contrário. O sudo é uma enorme superfície de ataque complexa e não é algo que eu gostaria de instalar. A autenticação pubkey do SSH é uma superfície de ataque muito menor. Qualquer um pode ser registrado, mas o registro não é muito útil quando o usuário (raiz) pode editar ou excluir registros, o que sempre é o caso, a menos que você faça logon no armazenamento externo somente de anexação.
R ..
1
@R .. Se você configurar os sudoers corretamente, usando o princípio de menor privilégio, esses problemas que você descreveu não serão um problema. Nenhum usuário deve poder fazer o ssh dentro e sudo - suno root ou fazer qualquer coisa que os usuários não precisem (em sudoers, você usa a lista branca para comandos). Se você precisa de root, deve estar fisicamente no console - ou seja. Raiz sobre SSH nunca deve ser permitida ... chaves ou não.
SnakeDoc 18/07/19
1
@SnakeDoc: Você está enganado. O Sudo possui suas próprias superfícies de ataque complexas e uma superfície de ataque complexa fundamental que é inerente a ser um binário suid, na forma de todo o estado que é herdado entre execve. Em alguns casos, um bug no próprio programa suid (suid) nem é necessário; erros na infraestrutura subjacente, como o vinculador dinâmico (por exemplo, CVE-2010-3856), podem ser suficientes.
R ..
1
@R .. Você supõe que sempre saberá se uma chave vazou. Essa é uma suposição. Além disso, quando o invasor tem privilégios de root. Ainda é melhor enviá-los através de uma conta sem privilégios e fazer com que eles precisem elevar para a raiz. Dessa forma, você tem uma chave que deve ser vazada, uma frase secreta para quebrar e, em seguida, uma senha de conta de usuário comum para quebrar. E se o invasor passar por tudo isso ... ele não poderá fazer nada porque esse usuário está configurado em sudoers com capacidade muito limitada ... Veja o benefício agora? Não permita login root direto durante o período ssh .... É uma boa higiene
SnakeDoc

Respostas:

54

Use o Matchparâmetro de configuração em /etc/ssh/sshd_config:

# general config
PermitRootLogin no 

# the following overrides the general config when conditions are met. 
Match Address  192.168.0.*
    PermitRootLogin yes

Vejo man sshd_config

Sven
fonte
Por que eu não pensei nisso? Obrigado companheiro
Itai Ganot
8
Você também pode restringir a fonte de chaves de autenticação ~root/.ssh/authorized_keys. Prefixe a chave com from="192.168.0.0/24 ".
BillThor
9
Eu mudaria para permitir também endereços locais de link IPv6. A maneira como os endereços locais de link funcionam no IPv6 os tornam muito robustos para redes mal configuradas. O que significa que, se você precisar efetuar ssh para corrigir uma configuração incorreta da rede, é possível que o uso de um endereço local de link IPv6 seja a única opção restante.
21416 kasperd
Para sua informação, se você usar adicionalmente a diretiva AllowUser , também precisará (e contra-intuitivamente) tambémAllowUser root
Robert Riedl
14

O Match addressmétodo já foi mencionado, mas você também pode restringir os usuários (ou grupos) com permissão para efetuar login em um sistema. Por exemplo, para limitar logins ao usuário itai(de qualquer lugar) e root(de uma rede específica), use:

AllowUsers itai [email protected].*

Isso impede que todos os outros usuários (como apache ) façam login através do SSH.

Veja também a AllowUserspalavra - chave no manual sshd_config (5) .

Lekensteyn
fonte
4
Eu prefiro AllowGroupse adicionando todos os usuários que devem poder fazer login usando SSH em um grupo específico. Acho que é uma questão de gosto, mas isso parece menos edição do sshd_config (que se traduz em menos risco de bagunçar e bloquear todo mundo).
um CVn
1
@ MichaelKjörling Além disso, AllowGroups significa que você não precisa de permissões de edição para sshd_config se a sua equipe expandir ou diminuir. Isso pode até permitir que mais tipos gerenciais ou estagiários o façam.
Nzall 19/07
Bons pontos, nota que você pode combinar opções, tem AllowUsers itai [email protected].*e AllowGroups ssh-userse você não vai acidentalmente causar um bloqueio no caso do estagiário apaga acidentalmente o grupo :)
Lekensteyn