Permitir acesso SSH, mas restringir o acesso do root a um determinado conjunto de IPs

3

Eu quero permitir SSH para todos os usuários como normal exceto que eu quero restringir o acesso do root com base em um conjunto de endereços IP. Portanto, os usuários peter , paul , lary podem efetuar login de qualquer lugar, mas root pode efetuar login apenas dos hosts a.b.c.d e q.r.s.t .

  • sshd_config AllowUsers não funciona para isso. Se eu especificar algo, então devo especificar todos os usuários.
  • Ao contrário do que as páginas de manual sugerem, AllowGroups é verificado incondicionalmente, mesmo que o usuário esteja na lista de permissões em AllowUsers ; por isso, se eu tentar listar usuários não raiz colocando-os em um grupo e, em seguida, adicionar o grupo a AllowGroups , a autenticação ainda falhará, pois a raiz não está em um grupo permitido válido.
  • sshd_config DenyUsers pode funcionar se eu puder de alguma forma colocar na lista de permissões o conjunto de IPs da qual a raiz do IP é negada. Se eu tivesse apenas um IP, ele poderia funcionar com o operador ! .
  • Eu posso fazer isso parcialmente com a chave options no arquivo authenticated_keys e desativando completamente a senha do root. O problema é que esse arquivo não é uma política do sistema e pode ser sobrescrito por outro usuário (acesso root). Atualmente, é a melhor opção que eu tenho, e eu não gosto disso. Além disso, se eu nuke a senha de root, alguém do meu grupo ficará muito zangado comigo. (Se eu não eliminar a senha de root, alguém pode logar via root com a senha de qualquer IP.)
  • Eu tentei fazer isso com o PAM, especificamente via pam_listfile , mas minha abordagem não parecia funcionar:

    auth       required     pam_sepermit.so
    auth       required     pam_listfile.so file=/etc/root-whitelist.txt sense=allow item=rhost apply=root
    auth       include      password-auth
    

    Dentro do arquivo root-whitelist.txt , foram permitidos endereços IP, linha por linha. Não consegui obter a regra para negar o acesso a IPs não listado.

A abordagem pam_listfile é utilizável e eu simplesmente entendi errado? Existe uma maneira melhor?

    
por Otheus 31.08.2015 / 15:41

3 respostas

6

Meu colega de trabalho apontou para a mesma direção que o / u / meuh, usando uma abordagem um pouco diferente.

Match Address "172.24.*.33"
  PermitRootLogin yes
Match Address "192.168.1.18,192.168.1.20"
  PermitRootLogin yes
    
por 31.08.2015 / 16:34
3

Dependendo da sua versão do ssh, você pode definir uma condição de correspondência em torno de seus AllowUsers. man sshd_config lista os comandos permitidos em Match. Se AllowUsers estiver lá, tente o seguinte. Certifique-se de que esteja no final do arquivo.

Match User root
 AllowUsers root@ a.b.c.d [email protected]

Por exemplo, não no Debian OpenSSH_6.0p1, mas sim no Ubuntu OpenSSH_6.6.1p1.

    
por 31.08.2015 / 16:26
0

Outro colega de trabalho me apontou a direção do módulo pam_access . Isso usa o formato normalmente encontrado em /etc/security/access.conf , mas qualquer arquivo pode ser especificado; ele pode ser ativado para todo o sistema ou apenas para o processo sshd. Eu não tentei isso, mas presumivelmente eu posso configurar o pam_access usando os padrões (no RHEL) adicionando-o à seção auth em /etc/pam.d/sshd . Então o arquivo access.conf se parece com isto:

+ : root : hosta hostb hostx
- : root : ALL
    
por 08.09.2015 / 17:53