Particionamento do HD do Servidor

No Linux, e em todos os sistemas UNIX, existe o que se chama de transparência de localidade. O diretório /usr, por exemplo, pode ser local da máquina, ou montado via NFS de um servidor que está em outro lugar. Para todos os efeitos, é como se fosse local. Assim como esse diretório pode estar em outra máquina, ele também pode estar em outro meio físico, como um segundo disco rígido ou uma outra partição no mesmo disco.

Há várias vantagens, e algumas poucas desvantagens, em se usar um esquema de particionamento. Serão vistos aqui alguns aspectos do particionamento do disco rígido de um servidor Linux, tendo em vista aspectos de segurança.

Disco Cheio

A proteção mais básica que se consegue com um bom esquema de particionamento é com relação ao problema de disco cheio. Para partições que armazenam dados de usuários, como a /home ou a de e-mail, isso pode ser contornado até certo ponto com o uso de quotas (ver a seguir). Mas, por exemplo, o diretório de logs, /var/log, é usado pelo sistema, e não por um usuário específico (usuário aqui no sentido de pessoa). Se não houvesse particionamento, o único limite para o tamanho desses arquivos seria o HD inteiro. Se, por exemplo, um ataque inundar os logs, se o disco estiver corretamente particionado isso somente afetará a partição dos logs: os usuários ainda terão o mesmo espaço livre no /home, o espaço para programas continuará o mesmo, etc. O mesmo vale para o outro sentido. Se não houver sistema de quotas, usuários poderão criar arquivos de qualquer tamanho e simplesmente acabar com o espaço em disco. Se houver particionamento, no máximo acabarão com o espaço em disco daquela partição.

Quotas

No Linux, quotas de disco são aplicadas por partição. Se houver somente uma partição no disco (a partição /, por exemplo), as quotas somente se aplicarão a ela por inteiro. Não há como definir quotas para diretórios específicos, a não ser que eles sejam pontos de montagem de alguma outra partição. Usando quotas, podemos definir alguns limites interessantes para usuários e/ou grupos. O sistema de quotas trabalha com os seguintes limites:

  • soft limit: ao atingir este limite, o usuário infrator é avisado via e-mail e possui um período de tempo para voltar a ficar abaixo do limite;

  • grace period: período em que o usuário pode ficar acima do soft limit. Após este período, o usuário não poderá mais criar arquivos nesta partição, devendo remover algo para voltar a ficar abaixo do limite;

  • hard limit: é o limite que jamais será ultrapassado. Por exemplo, um usuário pode ultrapassar o soft limit e receber o aviso, mas continuar a aumentar o espaço ocupado no disco, ignorando o aviso. Mas do hard limit ele não poderá passar.

O pacote quotas possui diversos utilitários para manipular as quotas, mas o Webmin possui uma interface bastante agradável para fazer a mesma coisa. Antes de poder usar as quotas é necessário ativar seu suporte na hora de montar o sistema de arquivos. Na prática, o Webmin alterará o /etc/fstab para isso, e depois as funções de quotas poderão ser manipuladas à vontade.

Opções especiais de Montagem

Esta é a parte do particionamento que é mais interessante do ponto de vista de segurança. Pode-se fazer com que o sistema trate certos arquivos de forma diferente com uma série de opções. As opções de montagem podem ser fornecidas como parâmetro para o comando mount ou direto no arquivo /etc/fstab:

Via linha de comando:
# mount /dev/hda6 -t ext3 -o nosuid,nodev /mnt/tmp

Pelo arquivo:
/dev/hda6   /mnt/tmp  ext3  nosuid,nodev 0 0

A Tabela 15.1. Opções para sistemas de arquivos ext2 ilustra algumas opções existentes para sistemas de arquivos dos tipos mais comuns (como ext2, ext3 e reiserfs). Outras, marcadas com um asterisco (*), também estão disponíveis para qualquer sistema de arquivos.

Tabela 15.1. Opções para sistemas de arquivos ext2

Opção

Efeito

nodev(*)

Dispositivos especiais de bloco ou caractere do sistema de arquivos não serão interpretados se nodev estiver especificado.

nosuid(*)

Bits SUID e SGID não terão efeito. Se um usuário comum executar um programa SUID ou SGID que force a troca para outro usuário, receberá o erro de permissão negada.

noexec(*)

Não permite a execução de binários. Note que scripts ainda poderão ser executados usando, por exemplo, bash foo.sh em vez de ./foo.sh.

ro, rw

A partição será montada somente para leitura (read-only) ou para leitura e escrita (read-write), respectivamente.

user, nouser(*)

A partição pode (user) ou não (nouser) ser montada por usuários que não sejam root.

usrquota

Ativa a quota de disco por usuário.

grpquota

Ativa a quota de disco por grupo.

sync(*)[a]

Toda a operação de entrada e saída nesta partição será síncrona. Isto tornará a escrita nesta partição mais lenta, mas também menos suscetível a problemas caso, por exemplo, falte energia elétrica logo após a operação de escrita.

[a] Esta opção não é mais tão útil, devido ao uso de sistemas de arquivos com journalling, como ext3.

Estas opções são muito interessantes e se aplicam a diversas partições do nosso servidor. A seguir serão mostrados alguns exemplos de uso dessas opções em diferentes partições:

/usr: nodev,ro

Nesta partição se encontram normalmente os programas do sistema. De forma alguma devem existir arquivos de dispositivo aqui, por isso foi colocada a opção nodev. Também não deve ser necessário escrever nesta partição, salvo instalação ou remoção de algum programa. Nestes casos, ela deve ser remontada com a opção rw e depois novamente remontada com a opção read-only. Note que os direitos dos diretórios por si só já não permitem a qualquer usuário realizar operações de escrita ali, mas o read-only é uma medida adicional, pois nem o usuário root poderá alterar algo ali antes de remontar a partição como read-write.

/var: noexec,nosuid,nodev

O diretório /var é usado para guardar e-mails, arquivos de log, dados de programas (banco de dados RPM, por exemplo) e outras coisas. Mas /var/tmp pode ser utilizado pelo processo de compilação de um pacote RPM para guardar os scripts que serão usados. Se noexec for usado, esses scripts não funcionarão. Portanto, use noexec com cuidado, pois alguma aplicação pode ter o funcionamento comprometido. Uma outra opção é colocar /var/tmp em uma outra partição, e permitir a execução nesta.

Outra exceção: caso existam pacotes que usem o /var, como ambiente de chroot, e necessitem de arquivos de dispositivos, como o BIND, a opção nodev deve ser removida.

/boot: noexec,nosuid,nodev,ro

Esta partição possui bem pouca atividade no sistema. Na verdade, após o boot (que nem sabe o sistema de arquivos que roda ali, quanto menos opções de montagem da partição), ela só é usada quando se faz uma atualização do kernel ou da imagem de disco inicial (initrd). Nada deve ser executado ali, arquivos de dispositivos não são bem-vindos e ela deve ser montada read-only. Quando se fizer uma atualização do kernel, basta remontá-la com a opção read-write.

/home: nosuid,nodev,noexec

Aqui depende do administrador da máquina quais das opções acima serão usadas. Recomenda-se pelo menos usar nosuid e nodev. Pode-se ainda usar a opção noexec, mas o usuário sempre poderá executar binários, bastando, por exemplo, copiá-los para o /tmp[56].



[56] Somente se este diretório estiver sem a opção noexec.