![]() |
Segurança no boot
| Linux in Brazil Documentação original e de qualidade em bom português |
A maior parte das instalações de Linux utiliza o gerenciador de boot
lilo (LInux LOader) como um facilitador do processo; entre outras
vantagens, o lilo permite escolher entre múltiplos kernels de Linux que você
tenha instalado, e até entra mais de um sistema operacional presente na
mesma máquina.
E é no momento da carga do sistema operacional que ocorre um dos momentos
mais críticos da segurança do Linux (e da maior parte dos sistemas
operacionais, já que praticamente todos contam com recursos semelhantes ao
que apresentaremos a seguir): o operador do console tem a possibilidade de
ordenar ao sistema operacional que não proceda à sua inicialização completa,
e ao invés disso entrando no chamado modo monousuário, onde quem estiver
operando o console tem poderes de usuário root, mesmo sem ter
fornecido senha, em alguns casos.
Esta característica é muito útil para resolver problemas de inicialização,
quando a configuração do sistema operacional apresenta falhas críticas e não
pode se completar; por exemplo, quando a inicialização é dependente da
disponibilidade de uma rede local que no momento está inoperante, ou se a
inicialização em modo gráfico entra em loop por erros de sintaxe na
configuração do servidor X. O boot em modo monousuário também é uma das
soluções mais simples para um problema clássico: a perda da senha de root da
máquina.
Para entrar em modo monousuário, basta passar alguns parâmetros específicos
ao kernel. Isto pode ser feito através do prompt do lilo (o tradicional
"lilo boot:"), através do prompt do próprio kernel, quando
disponível, ou por maneiras específicas de outros gerenciadores de boot dos
quais você possa dispor. O parâmetro mais comumente encontrado é o
single, mas usuários experientes utilizam diretamente o single
rw ou o single rw init=/bin/bash, quando o diretório /bin
residir no mesmo sistema de arquivos que o root. A discussão sobre cada uma
destas opções pode ser encontrada no BootPrompt-HOWTO em linuxdoc.org.
Comumente se questiona a possível falha de segurança que este boot em modo
privilegiado oferece, já que qualquer pessoa pode se tornar superusuário sem
saber a senha, bastando para isto provocar uma reinicilização da máquina.
Esta questão é objeto de debates há muitos anos, e sua solução se encontra
em um axioma da segurança de dados: não há segurança se é possível obter
acesso físico ao console ou ao conjunto CPU/discos de um servidor.
Senão vejamos: uma pessoa com acesso físico pode forçar o reboot e inicializar
o servidor com uma mídia removível (disquete ou CD-ROM de boot) que lhe dê
direitos especiais. Se a máquina tiver senha na BIOS que impeça este tipo de
inicialização, há uma série de técnicas (que não serão discutidas aqui) para
contornar este tipo de senha simples; no limite, um invasor cujo intuito
seja causar dano pode danificar fisicamente a máquina, ou sua estrutura de
suporte (eletricidade, cabeamento de rede), ou até mesmo roubar os discos
rígidos e posteriormente montá-los como secundários (e ter acesso irrestrito
ao seu conteúdo) em outro computador. O livro Practical Unix and Internet
Security (da editora O'Reilly
) conta com um capítulo inteiro sobre as razões da segurança física, se você
quiser se aprofundar.
Considerando todos estes riscos que uma pessoa com acesso físico a um
sistema pode impor, os projetistas dos sistemas operacionais com
características de segurança assumem que o administrador de sistemas (você!)
irá cuidar da tarefa de protegê-los fisicamente. Isto posto, dadas as
possíveis circunstâncias de necessidade expostas acima, e considerando que
todo sistema com intenção de ser seguro deve contar com restrição física de
acesso ao console, não há porque impedir que o operador do sistema (com
acesso físico) possa forçar o modo monousuário.
Mesmo com todo o exposto acima, muitos administradores tem razões para
deixar os seus servidores expostos. Podem ser máquinas utilizadas para
treinamento, ou pode não haver disponibilidade de um local seguro; as razões
não importam. Assume-se que neste caso o administrador não busca a proteção
contra a interrupção do serviço (já que é muito fácil cortar um cabo,
derrubar a CPU no chão ou até mesmo colocar o cabo de rede em uma tomada de
220V - e não duvide!), mas apenas a segurança das informações armazenadas.
O que se pode fazer?
Como raramente se dispõe de recursos para o nível de criptografia necessário
para garantir a segurança contra alguém com poderes de superusuário, podemos
assumir que nossa solução será através da tentativa de impedir a
inicialização em modo monousuário. E é o que veremos a seguir.
Em primeiro lugar, garanta que sua BIOS permita apenas o boot pelo disco
rígido, e jamais pelo disquete ou CD-ROM. Coloque senha para alteração das
opções da sua BIOS, e verifique junto ao fornecedor se ela não dispõe de uma
senha mestra - muitos modelos de BIOS comuns possuem senhas padronizadas
pelo fabricante, que funcionam em todos os computadores, em adição à senha
selecionada pelo proprietário. Se o seu gabinete dispuser de tranca ou
cadeado, utilize-o, e guarde a chave em local seguro.
Em segundo lugar, instale o gerenciador lilo de maneira adequada às suas
necessidades, mas incluindo as seguintes opções no /etc/lilo.conf:
Não permita a execução de nenhum outro sistema operacional além do Linux.
Existem utilitários de outros sistemas operacionais que podem ser utilizados
para dar um boot na máquina e entrar no linux sem passar pelo lilo, e você
estará tão desprotegido como se estivesse com o boot por disquete
habilitado.
Com isto você tornará seu sistema bem mais restrito, e o invasor casual terá
um pouco mais trabalho para obter o acesso privilegiado. Mas cuidado para
não esquecer a senha e ao mesmo tempo perder a chave do gabinete ;)