Como restringir o acesso de usuários em uma máquina Linux
Objetivo
Aprenda como restringir o acesso de usuários em uma máquina Linux
Sistema operacional e versões de software
Sistema operacional: – Todas as distribuições Linux
Requisitos
Permissões de raiz
Dificuldade
FÁCIL
Convenções
# – requer que determinados comandos do Linux sejam executados com privilégios de root
diretamente como usuário root ou usando o comandosudo
-
$ – requer que determinados comandos do Linux sejam executados como um usuário normal sem privilégios
Introdução
Neste tutorial aprenderemos como restringir o acesso a uma máquina Linux interagindo com dois arquivos: /etc/securetty
, que nos permite especificar de qual console é possível fazer login diretamente como root, e /etc/security/access.conf
, no qual podemos definir algumas regras para restringir o acesso de usuários ou grupos específicos de determinadas origens.
Restringir login root
A primeira coisa que faremos é aprender como editar o arquivo /etc/securetty
para permitir acesso root direto apenas em alguns consoles específicos. Vamos dar uma olhada no arquivo: é assim que fica em uma máquina CentOS7:
console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
ttyS0
ttysclp0
sclp_line0
3270/tty1
hvc0
hvc1
hvc2
hvc3
hvc4
hvc5
hvc6
hvc7
hvsi0
hvsi1
hvsi2
xvc0
O que vemos lá é apenas uma lista de todos os terminais a partir dos quais é permitido o acesso direto como usuário root. Vamos nos concentrar nos dispositivos tty
por enquanto. Abra o arquivo com um editor de texto e comente a entrada tty1
:
[...]
#tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
[...]
Salve e saia do editor de texto. Agora, se mudarmos para o primeiro tty
pressionando CTRL + alt + 1
ou executando chvt 1
, e tentarmos fazer login como root, teremos o seguinte resultado:
Como esperado, o sistema nos negou acesso como root do tty especificado. Para obter privilégios de root e realizar tarefas administrativas, devemos então fazer login como um usuário normal e então usar sudo
ou su
(ou fazer login de outro tty, se permitido).
Esteja ciente de que isso não afetará a capacidade de fazer login como root ao usar ssh. Para evitar esse comportamento específico você deve configurar o servidor ssh, modificando o arquivo /etc/ssh/sshd_config
, e definir a diretiva PermitRootLogin
como no
Configure regras de acesso em /etc/security/access.conf
Se o arquivo /etc/securetty
nos permite especificar de qual terminal é possível fazer login diretamente como root, configurando regras de acesso no /etc/security/access.conf
arquivo, podemos permitir ou negar acesso a usuários ou grupos específicos de origens específicas.
Insira o módulo pam_access.so
Antes de configurar nossas regras, precisamos modificar /etc/pam.d/login
, para adicionar o módulo pam_access.so
que permitirá o pam
para verificar o arquivo access.conf
em busca das regras que definiremos. Use seu editor de texto favorito para modificar o arquivo para que fique assim:
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth substack system-auth
auth include postlogin
account required pam_nologin.so
account required pam_access.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
O que fizemos foi adicionar a linha account required pam_access.so
no final da seção account
. Agora que configuramos o pam
podemos começar a falar sobre regras de acesso.
A sintaxe das regras
Para definir uma regra no arquivo access.conf
devemos respeitar uma sintaxe muito simples e clara. Uma regra é composta de três seções, separadas por dois pontos:
permission : users : origins
A primeira parte da regra especifica as permissões e consiste em um sinal -
ou +
: a primeira cria o que podemos chamar de regra 'negar', enquanto a última especifica uma regra onde as permissões de acesso são concedidas.
Na segunda parte fornecemos os assuntos da regra. A seção consiste em uma lista de grupos ou nomes de login. Para evitar conflitos entre usuários e grupos que podem ser nomeados da mesma maneira, as entradas do grupo podem ser especificadas entre colchetes, mas somente se a opção nodefgroup
estiver definida no arquivo /etc/pam. d/login
que modificamos acima, no final da linha que adicionamos.
A terceira parte da regra especifica a fonte a partir da qual o acesso é permitido ou negado, sendo ela: um ou mais ttys
, nomes de host, endereços de host ou domínios.
Palavras-chave
A sintaxe da regra nos permite usar algumas palavras-chave poderosas. Primeiro de tudo temos ALL
. Esta palavra-chave sempre corresponderá: por exemplo, quando usada na segunda seção, corresponderá a todos os usuários ou grupos possíveis, ou quando usada na terceira, a todas as fontes possíveis.
A palavra-chave NONE
tem o efeito exatamente oposto de ALL
e LOCAL
, o que faz sentido apenas na seção origins
da regra, corresponderá a todas as strings que não contenham um '.'. Finalmente, uma palavra-chave muito poderosa é EXCEPT
, que nos permite especificar exceções a uma regra definida.
Alguns exemplos
O arquivo fornece alguns exemplos úteis, vejamos alguns deles. Em primeiro lugar temos o seguinte:
- : ALL EXCEPT root : tty1
Esta linha nos permitiria obter o resultado oposto que obtivemos antes modificando o arquivo /etc/securetty
: primeiro temos o sinal -
, o que significa que é uma regra negar
. Na próxima seção, separados por dois pontos, temos ALL EXCEPT root
, que especifica que a regra deve ser aplicada a todos os usuários, exceto root
, e na terceira seção, vemos que a regra especificada é válida apenas quando alguém tenta acessar a partir de tty1
.
Outro exemplo, desta vez com vários nomes de usuário:
-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL
A regra proíbe o acesso aos usuários wsbscaro, wsbsecr, wsbspac, wsbsym, wscosor e wstaiwde de todas as fontes (veja a palavra-chave ALL
em ação)
Algo mais complexo. Desta vez, a regra nega acesso a todos os usuários que não são membros do grupo wheel em logins locais
:
-:ALL EXCEPT (wheel):LOCAL
Finalmente, um exemplo que especifica uma regra para login remoto:
+ : root : 192.168.200.1 192.168.200.4 192.168.200.9
Como devemos entender agora, esta regra permite que o root
acesse o sistema apenas a partir dos endereços IP especificados.
Um caso de teste
Podemos verificar o que dissemos acima com um caso de teste: vamos construir uma regra para negar acesso a egdoc
(minha conta neste sistema) a partir de tty1
e anexá-la no final do arquivo /etc/security/access.conf
:
-:egdoc:tty1
Agora, se mudarmos para tty1
e tentarmos fazer login, obteremos esta resposta rude do sistema:
Observe que a ordem das regras especificadas no arquivo /etc/security/access.conf
é muito importante, pois as regras são avaliadas em ordem de aparição.