RestricoesDeSeguranca - UFSC/moodle-provas-livecd-provas GitHub Wiki
As regras básicas do firewall são instaladas pelo pacote moodle-provas no diretório /etc/iptables, há um arquivo para cada versão do protocolo IP: rules.v4 e rules.v6. O carregamento das regras é feito pelo script iptables-persistent, instalado em /etc/init.d/iptables-persistent.
Os objetivos das regras básicas são os seguintes:
- Bloquear qualquer tipo de acesso a servidores externos.
- Permitir a sincronização de data e horário com qualquer servidor NTP na porta 123.
- Permitir consultas a servidores DNS.
- Permitir acesso a servidores NFS caso o sistema seja iniciado via boot remoto.
- Permitir acesso via SSH caso um usuário administrativo seja ativado na geração do LiveCD (somente para fins de diagnóstico).
- Registrar em arquivos de log todos os pacotes negados na entrada e na saída.
Além das regras básicas instaladas pelo pacote moodle-provas, há também as regras de acesso a HTTP e HTTPS, elas são adicionadas na inicialização do sistema pelo script /opt/provas/start_user_apps.sh , baseado nos dados configurados no arquivo global de configuração. Os objetivos principais dessas regras adicionais são:
- Permitir acesso ao servidor do Moodle Provas na porta 80 (HTTP) e 443 (HTTPS).
- Permitir acesso ao servidor de autenticação via CAS na porta 443 (HTTPS).
OBSERVAÇÕES:
- O endereço IP do servidor do Moodle Provas é obtido através do nome do host, definido no arquivo de configuração /opt/provas/moodle_provas.conf.
- O endereço IP do servidor de autenticação CAS também é obtido através do nome do host, definido no arquivo de configuração /opt/provas/moodle_provas.conf.
- A configuração dos arquivos de log do firewall é definida pelo arquivo de configuração /etc/rsyslog.d/21-firewall.conf, instalado pelo pacote moodle-provas.
- O arquivo /opt/provas/moodle_provas.conf é instalado pelo pacote moodle-provas-config.
Combinações de teclas que envolvem a tecla SysRq são interpretadas diretamente pelo kernel Linux e permitem ao usuário executar alguns comandos de baixo nível, essa tecla é útil para finalizar o Xorg quando ele congela e para reiniciar o computador sem corromper o sistemas de arquivos, mas no LiveCD nada disso é necessário, portanto ela deve ser desativada. Mais detalhes sobre esta tecla em Magic SysRq Key.
A tecla SysRq é desativada pelo sysctl através do arquivo /etc/sysctl.d/10-moodle-provas.conf, que é instalado pelo pacote moodle-provas.
Esta combinação de teclas permite alternar do ambiente gráfico para os consoles em modo texto, Fn é uma das teclas de funções, que geralmente vão de F1 até F12.
Ela é desativada pela diretiva Option DontVTSwitch "true"
no arquivo de configuração /usr/share/X11/xorg.conf.d/60-moodle-provas.conf instalado pelo pacote moodle-provas.
OBS: No modo multiterminal essa opção foi adicionada ao arquivo /opt/provas/multiseat/templates/xorg-seat#.conf.tpl, que é utilizado para gerar os arquivos de configuração do Xorg de cada seat. Neste modo, o arquivo /usr/share/X11/xorg.conf.d/60-moodle-provas.conf é desativado para evitar conflito nas configurações.
Esta combinação de teclas permite ao usuário encerrar o Xorg, nas versões atuais do Xorg por padrão ela já é desativada, mas por precaução ela é desativada explicitamente nas configurações do LiveCD.
Ela é desativada pela diretiva Option "DontZap" "true"
no arquivo de configuração /usr/share/X11/xorg.conf.d/60-moodle-provas.conf instalado pelo pacote moodle-provas.
OBS: No modo multiterminal essa opção foi adicionada ao arquivo /opt/provas/multiseat/templates/xorg-seat#.conf.tpl, que é utilizado para gerar os arquivos de configuração do Xorg de cada seat. Neste modo, o arquivo /usr/share/X11/xorg.conf.d/60-moodle-provas.conf é desativado para evitar conflito nas configurações.
Esta é uma restrição que não é eficaz sozinha, pois ela é baseada na remoção da permissão de execução para os usuários que não são o proprietário ou não estão no grupo proprietário do executável. Ela não é eficaz sozinha, pois o usuário poderia copiar o programa para seu HOME e utilizando o chmod dar permissão de execução a ele (Os comandos chmod e chown não devem ser desativados, sob pena de quebrar algum script de inicialização da sessão do usuário), por isso deve-se Remover a permissão de execução dos diretórios /home e /tmp também.
Os comandos bloqueados são adicionados à variável blocked_commands utilizando o caminho completo do executável e separados por um espaço em branco, esta variável está disponível no arquivo de configuração config/livecd_provas.conf, ela é utilizada no final da geração do LiveCD para remover a permissão de execução dos comandos listados.
Não é viável deixar o HOME do usuário em modo somente leitura, pois alguns processos e os scripts de inicialização da sessão precisam gravar arquivos lá, e também não é eficaz apenas mudar o proprietário e o grupo proprietário de um arquivo, pois o usuário pode sobrescrever esses dados, já que o proprietário do HOME é ele próprio.
A única forma encontrada de proteger um diretório e seu conteúdo contra alterações no LiveCD foi montando o diretório em modo somente leitura, isso é possível utilizando o parâmetro --bind
do comando mount
e em seguida utilizando a opção remount,ro
, estas ações são executadas pelo script /opt/provas/start_user_apps.sh, instalado pelo pacote moodle-provas.
Este recurso é utilizado apenas para proteger o arquivo de configuração da interface do navegador Firefox, arquivo userChrome.css.
Esta é uma restrição adicionada especialmente para o modo multiterminal, mas que estará ativa mesmo em modo mono terminal. Ela faz com que um diretório /tmp seja montado para cada usuário que inicia uma sessão, proporcionando o isolamento deste diretório quando há mais de um usuário no sistema, desta forma os usuários do multiterminal não podem compartilhar arquivos entre si através do /tmp.
Esta funcionalidade é ativada da seguinte forma (tudo isso é instalado e executado pelo pacote moodle-provas):
- Adicionar a seguinte linha ao arquivo /etc/pam.d/common-session, após a linha
session optional pam_umask.so
.
session required pam_namespace.so
- Criar o arquivo /etc/security/namespace.d/moodle-provas.conf com o seguinte conteúdo:
/tmp /tmp/tmp-users/ level root,provas
/var/tmp /var/tmp/tmp-users/ level root,provas
/dev/shm /dev/shm/tmp-users/ level root,provas
OBS: Os usuários listados na última coluna, são os usuários para os quais este recurso não será ativado ao iniciar uma sessão.
- Criar os diretórios listados na segunda coluna do arquivo criado no passo 2 com a permissão
000
.
mkdir -pm 000 /tmp/tmp-users/
mkdir -pm 000 /var/tmp/tmp-users/
mkdir -pm 000 /dev/shm/tmp-users/
Remover a permissão de um diretório é possível se ele for montado como uma partição, adicionando o parâmetro noexec
para o comando mount
. Esta restrição é necessária no /home e /tmp, pois como existem comandos que foram bloqueados apenas removendo a permissão de execução, os usuários poderiam copiar o executável e adicionar a permissão de execução com o comando chmod, montando as partições com a opção noexec
isso não será possível.
Adicionalmente pode-se bloquear binários com bit suid (opção nosuid
) e bloquear dispositivos especiais (opção nodev
).
Esta restrição é aplicada pelo pacote moodle-provas, através de um patch para o script do Casper responsável por gerar o arquivo /etc/fstab no boot, o patch altera o arquivo /usr/share/initramfs-tools/scripts/casper-bottom/12fstab, adicionando os parâmetros restritivos ao /tmp e adicionando a linha do /home com os mesmos parâmetros, ficando desta forma:
tmpfs /tmp tmpfs nosuid,nodev,noexec 0 0
tmpfs /home tmpfs nosuid,nodev,noexec 0 0
OBS: A opção noexec
inibe a execução de arquivos somente na partição especificada, scripts que são executados com arquivos binários de outras partições que não possuem o parâmetro noexec
, funcionarão, por exemplo um shell script chamado meu-script.sh gravado no HOME do usuário iniciado desta forma: $ bash meu-script.sh
, será executado sem problemas.