Pesquisa de site

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 comando sudo

  • $ – 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.

Artigos relacionados: