Capítulo 6. Restrições de acesso, recursos e serviços

Índice

Limitando recursos no bash
Uso do comando readonly para exportar variáveis
Restrições nos diretórios de usuários e root
Restrições básicas do shell bash com bash -r/--restricted, rbash
Finalizando consoles inativos
Desabilitando o registro de comandos digitados
Desabilitando serviços de shell para usuários
Limitação de recursos usando PAM
Descobrindo se um determinado programa tem suporte a PAM
Definindo uma política padrão restritiva
Restringindo/Bloqueando o login
Restringindo o acesso a root no su
Restrições de serviços PAM baseados em dia/hora
Permitindo acesso a grupos extras
Limitação de recursos do shell
Restrições de acesso a programas/diretórios/arquivos usando grupos
Dando poderes de root para executar determinados programas
Restringindo o comando su
Restrições baseadas em usuário/IP
Restrições por MAC Address/IP
Desabilitando serviços não usados no Inetd
Evitando o uso de hosts.equiv e .rhosts
Restringindo o uso do shutdown
Restringindo o acesso ao sistema de arquivos /proc
Limitando o uso de espaço em disco (quotas)
Instalando o sistema de quotas
Editando quotas de usuários/grupos
Modificando a quota de todos os usuários de uma vez
Verificando a quota disponível ao usuário
Verificando a quota de todos os usuários/grupos do sistema
Avisando usuários sobre o estouro de quota
Suporte a senhas ocultas
Suporte a senhas com algorítmo SHA e md5
Restrições no hardware do sistema
BIOS do sistema
Retirada da unidade de disquetes
Placas de rede com eprom de boot
Protegendo o LILO
Disco rígido

Este capítulo documenta diversos métodos de fazer restrições de contas, limitação de acesso interno/externo, de recursos por usuários/grupos, login, tempo máximo ocioso, e outros modos para limitar o uso de recursos do sistema. Também são descritos métodos para aumentar a segurança do acesso físico a seu servidor e maneiras de restringir o uso de serviços disponíveis no sistema.

Se você deseja restringir o acesso de máquinas na rede ou portas específicas em sua máquina , veja também Capítulo 5, Firewall iptables .

Limitando recursos no bash

Uso do comando readonly para exportar variáveis

Variáveis exportadas na forma comum podem ser modificadas a qualquer momento pelo usuário, e isso pode trazer problemas de acordo com o tipo de sistema que administramos. A definição da variável como somente leitura (readonly) evita a maioria destes problemas:

readonly TESTE="123"

A variável TESTE não poderá ser modificada ou excluída. Com isto o administrador pode "bloquear" a modificação de variáveis que controlam o funcionamento de determinados recursos do interpretador de comandos (alguns deles serão vistos ainda nesta seção).

OBS1: Algumas variáveis de controle de ambientes ambiente do interpretador de comandos já são iniciadas com valores somente leitura (como as variáveis EUID e PPID)

OBS2: Variáveis exportadas como somente leitura em shell scripts são mantidas até a finalização do script e depois liberadas.

Restrições nos diretórios de usuários e root

O controle de acesso a diretórios de usuários é importante quando desejamos que outras pessoas não tenham acesso ao diretório de outros usuários, violando a privacidade do mesmo e obtendo acesso a partes indesejáveis, principalmente do usuário root. É recomendado restringir o acesso somente ao dono e grupo do usuário, bloqueando o acesso a outros tipos de usuários:

chmod 2750 /root
chmod 2750 /home/usuario

O exemplo acima permitirá o acesso do diretório /root e /home/usuario somente ao usuário e grupo que pertencem. Este processo pode ser facilitado na criação dos diretórios de usuários em /home especificando a variável: DIR_MODE=0750 no arquivo /etc/adduser.conf.

OBS: Algumas distribuições de Linux garantem o acesso livre a diretórios de usuários por padrão pois alguns daemons que requerem acesso a diretório de usuários rodam sob outros usuários ao invés do root. Um bom exemplo é a utilização do recurso "UserDir" do Apache para servir requisições como http://servidor.org/~usuario.

A restrição de diretório home neste caso bloqueará o acesso do servidor web Apache ao diretório /home/usuario/public_html. Mesmo assim, uma alternativa para garantir a utilização da restrição é incluir o usuário do servidor web Apache (www-data) no grupo "usuario" (que possui acesso ao diretório /home/usuario):

adduser www-data usuario

Isto garantirá que o servidor Apache continue servindo as requisições dentro do diretório /home/usuario, com acesso garantido via grupo. O mesmo principio pode ser aplicado em outros programas, apenas leve em consideração que se um cracker tomar conta do processo que tem acesso ao seu diretório home restrito, ele certamente também terá acesso.

Restrições básicas do shell bash com bash -r/--restricted, rbash

Quando o bash é iniciado com o parâmetro -r, --restricted ou como rbash, o shell restringe o uso dos seguintes recursos em sua seção:

  • Usar o comando cd para mudar de diretório.

  • Definindo, modificar ou apagar a variáveis SHELL, PATH, ENV, BASH_ENV.

  • Nomes de comandos que contém /

  • Especificar um nome de arquivo contendo uma / como argumento para o comando builtin (embutido no interpretador de comandos).

  • Especificar uma / como argumento a opção -p no comando hash (embutido no interpretador de comandos).

  • Importar a definição de funções do ambiente do shell atual.

  • Analisar o valor da variável SHELLOPTS do ambiente do shell atual.

  • Redirecionando a saída padrão usando os operadores de redirecionamento >, >|, <>, >&, >&; e >>.

  • Usando o comando embutido exec para substituir o shell por outro comando.

  • Usar as opções -f ou -d com o comando enable (embutido no interpretador de comandos).

  • Especificar a opção -p ao comando interno command.

  • Desativar o modo restrito com set +r ou set +o restricted *

Estas restrições são ativadas após a leitura dos arquivos de inicialização do interpretador de comandos. O shell restrito desliga as restrições quando um shell script é executado.

Finalizando consoles inativos

A variável TMOUT determina o tempo de inatividade de um shell para que ele seja terminado.

export TMOUT=600

Terminará o bash caso nenhum comando seja executado no período de 600 segundos (5 minutos). Veja “Uso do comando readonly para exportar variáveis” como complemento.

Desabilitando o registro de comandos digitados

Todos os comandos que digitamos em uma seção do shell são registrados no arquivo ~/.bash_history, as seguintes variáveis fazem seu controle:

  • HISTFILE - Nome do arquivo que armazenará o histórico de comandos. O padrão é ~/.bash_history. Caso não seja especificado, os comandos não serão gravados após finalizar o shell.

  • HISTSIZE - Define o número de comandos que o arquivo de histórico poderá armazenar, o padrão é 500.

  • HISTFILESIZE - Define o número máximo de linhas no arquivo de histórico.

Se você possui muitos usuários em seu sistema, é recomendado ajustar estas variáveis como somente leitura para que o usuário não desative o logging por qualquer motivo (veja “Uso do comando readonly para exportar variáveis”).

Desabilitando serviços de shell para usuários

Existem casos onde o usuário precisa estar cadastrado no sistema mas não precisa ter acesso a uma conta de login válida (como um sistema servidor de e-mail ou outros serviços). Neste caso a desabilitação dos serviços de shell aumentará um pouco a segurança do sistema, mesmo conseguindo acesso a conta/senha estará impedido de entrar no sistema (pelo menos terá um pouco mais dificuldade para conseguir isso).

Um programa que é muito usado para desabilitar o shell exibindo uma mensagem ao usuário que fez a tentativa é o falselogin. Ele deve ser colocado como o "shell padrão" no arquivo /etc/passwd e exibirá a mensagem contida no arquivo /etc/falselogin.conf quando o login para aquele usuário for tentado. Esta operação pode ser facilitada usando a variável DSHELL=/usr/bin/falselogin no arquivo /etc/adduser.conf.

Uma forma alternativa de desativar o serviço de login de TODOS os usuários (exceto o root e os já logados no sistema) é criar um arquivo chamado /etc/nologin e colocando uma mensagem dentro dele, que será exibida quando tentarem efetuar o login no sistema.

OBS: Tome cuidado ao usar esta alternativa, este método deve ser usado somente em caso de EMERGÊNCIA, as distribuições Linux usam este método para bloquear o login de outros usuários durante o processo de inicialização, removendo assim que o processo é terminado. Esteja consciente disso.

Em alguns casos, o uso do PAM pra desabilitar os serviços de login pode ser mais adequado (veja “Restringindo/Bloqueando o login”).