Eu tenho uma sshd
configuração parecida com esta:
DenyUsers *
AllowUsers root@*
AllowUsers user1@*
AllowUsers user2@*
Os documentos sshd afirmam que "As diretivas de permissão/negação de usuários são processadas na seguinte ordem: DenyUsers, AllowUsers", e a intenção aqui é que ninguém tenha permissão para usar ssh
além dos três usuários listados.
No entanto, isso não funciona: se algum desses usuários tentar se conectar ssh
, os logs ( systemctl status ssh
) informam que "Usuário foo do abcd não permitido porque listado em DenyUsers".
Então parece que DenyUsers
sempre tem prioridade (estou no OpenSSH_8.9p1, no Ubuntu 22.04).
Existe alguma maneira de contornar isso? Eu preciso de alguma forma DenyUsers
porque a configuração deste sistema é automatizada e todos os três usuários podem ter acesso negado comentando seus dados individuais AllowUsers
, o que daria:
# AllowUsers root@*
# AllowUsers user1@*
# AllowUsers user2@*
O problema agora é que todos têm acesso, e não ninguém.
Veja esta resposta para obter uma descrição da maneira inesperada como as quatro diretivas de permissão/negação funcionam. As quatro diretivas são
AllowUsers
,AllowGroups
,DenyUsers
, eDenyGroups
. A parte da resposta que descreve isso está perto do fim porque a pergunta tratava de um tópico um pouco diferente (como funcionam as diretivas dentroMatch
dos blocos).A maneira de obter o comportamento de negação desejado é especificar quem deve ter acesso ao servidor nas diretivas
AllowUsers
ou .AllowGroups
Quando usei isso, segui a convenção comum do Linux de que cada conta de usuário no servidor local é criada com um grupo primário com o mesmo nome do usuário. Ou seja, a conta de John Doe seria nomeada
johndoe
e um grupo nomeadojohndoe
seria criado. Pessoas que deveriam ter acesso devido à sua função (como administradores de sistema Linux) teriam suas contas adicionadas a grupos funcionais secundários, comosysadmins
. Com esta configuração a linha:me permitiria (sottovoce) fazer ssh no servidor porque estou no grupo sysadmin. Se eu quiser que alguém tenha acesso sem estar em um grupo, essa conta seria nomeada na mesma linha:
Agora, junto com os administradores de sistemas, John Doe também é permitido porque é membro do
johndoe
grupo. Todos os outros são negados.Não usei
AllowUsers
porque isso bloquearia o pessoal do administrador de sistemas. Adicionar e remover o acesso de administrador de sistema exigiria a alteração dosshd_config
arquivo, o que é mais intrusivo e sensível do que editar o/etc/group
arquivo. Gerenciar o acesso por meio de associação ao grupo é melhor.