Publicado em 9 de Novembro de 2000, para Gazeta do Linux
Irei explicar nesse artigo como tornar seu Linux seguro através da adoção de medidas básicas de segurança. Esse artigo permitirá a qualquer usuário fortalecer a segurança de uma distribuição Linux Redhat.
Segurança BIOS
Sempre configure uma senha em sua BIOS para não aceitar boot feito através de disquete ou a modificação das configurações de sua BIOS. Esse procedimento bloqueará pessoas sem permissão de tentarem realizar boot de seu sistema Linux utilizando um disquete de boot especial e irá proteger você de pessoas tentando trocar características da BIOS como por exemplo a permissão de boot através do drive de disquete ou realizar boot do servidor sem um prompt de senha.
Segurança LILO
Adicione os três parâmetros no arquivo “/etc/lilo.conf” ex: time-out, restricted e password. Essas opções farão com que haja requisição de uma senha caso alguma opção durante o boot (como “linux single”) sejam passadas para o boot loader. Primeiro passo
Edite o arquivo lilo.conf (vi /etc/lilo.conf) e adicione ou altere as 3 opções:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
time-out=00 #Altere essa linha para 00
prompt
Default=linux
restricted #Adicione essa linha
password= #Adicione essa linha colocando sua senha
image=/boot/vmlinuz-2.2.14-12
label=linux
initrd=/boot/initrd-2.2.14-12.img
root=/dev/hda6
read-only
Segundo Passo O arquivo “/etc/lilo.conf” deve ter permissão de leitura apenas para o root porque contem senha não criptografada.
[root@kapil /]# chmod 600 /etc/lilo.conf (o arquivo não terá mais permissão de leitura para todos).
Terceiro Passo
Atualize seu arquivo de configuração “/etc/lilo.conf” para que suas alterações tenham efeito.
[Root@kapil /]# /sbin/lilo -v (para atualizar o arquivo /etc/lilo.conf).
Quarto Passo
Outra medida de segurança que você pode tomar para assegurar o arquivo “/etc/lilo.conf” é configurar o mesmo para ser imutável, utilizando o comando chattr.
* Para configurar o arquivo como imutável, simplesmente utilize o comando:
[root@kapil /]# chattr +i /etc/lilo.conf
Isso irá prevenir que quaisquer alterações (acidentais ou de qualquer forma) no arquivo “lilo.conf” sejam feitas.
Para maiores informações à respeito da segurança do lilo, leia meu artigo em LILO.
Desabilite todas as contas especiais
Voce deve apagar todas os usuários padrões e contas de grupo que você não utilize em seu sistema como lp, sync, shutdown, halt, news, uucp, operator, games, gopher etc
Para apagar uma conta de usuário:
[root@kapil /]# userdel LP # Nota do tradutor: (o path para o programa é /usr/sbin e usualmente nao está incluído no $PATH da distribuição Red Hat)
Para apagar um grupo:
[root@kapil /]# groupdel LP # Nota do tradutor: (o path para o programa é /usr/sbin e usualmente nao está incluído no $PATH da distribuição Red Hat)
Escolha uma senha corretamente
Você deve seguir as seguintes direções antes de escolher uma senha corretamente.
O tamanho da senha: O tamanho mínimo aceitável de uma senha por padrão quando você instala seu sistema Linux é 5. EEle não é suficiente e deve ser de 8. Para alterar isso você deve editar o arquivo login.defs (vi /etc/login.defs) e alterar a seguinte linha:
PASS_MIN_LEN 5
Para o seguinte:
PASS_MIN_LEN 8
O “login.defs” é o arquivo de configuração para o programa login.
Ative o suporte a “shadow password”
Vocêe deve habilitar o suporte a shadow password. Você pode utiliza o utilitário “/usr/sbin/authconfig” para habilitar esse suporte em seu sistema. Caso você queira converter as senhas e grupos já existentes em seu sistema para senhas e grupos shadow então você pode utilizar os comandos pwconv, grpconv respectivamente.
A conta root A conta “root” é a conta com mais privilégios em um sistema Unix. Quando o administrador se esquece de sair de sua sessão no prompt root do sistema antes de sair então o sistema deve automaticamente deslogá-lo da shell. Para que isso seja feito, você deve configurar a variável especial do Linux chamada “TMOUT” com um tempo (em segundos).
Edite seu arquivo profile “vi /etc/profile” e adicione a seguinte linha em algum lugar após a linha
“HISTFILESIZE=”
TMOUT=3600
O valor que atribuímos à variável “TMOUT=” é dado em segundos e representa 1 hora (60*60 = 3600 segundos). Caso você coloque essa linha em seu arquivo “/etc/profile”, então o logout automático após 1 hora de inatividade será válido para todos os usuários do sistema. Você pode configurar essa variável nos arquivos “.bashrc” individuais de cada usuário para que haja o logout automático daquele usuário após um certo tempo.
Depois desse parâmetro ter sido configurado em seu sistema, você deve deslogar-se e logar-se novamente (como root) para que a alteração tenha efeito.
Desativar todo acesso ao console para usuários comuns
Você deve desabilitar todo acesso via console de programas como shutdown, reboot, e halt para usuários comuns em seu servidor.
Para fazer isso, execute o seguinte comando:
[root@kapil /]# rm -f /etc/security/console.apps/
Onde é o nome do programa o qual você deseja desabilitar acesso via console.
Desabilite & desinstale todos os serviços não utilizados
Você deve desabilitar e desinstalar todos os serviços que não utiliza para que você tenha algo a menos para se preocupar. Procure em seu arquivo “/etc/inetd.conf” e desabilite o que você não precisa, comentando os serviços (adicionando o caracter # no início da linha referente ao mesmo), e após enviando um sinal SIGHUP ao inetd para atualizá-lo com o arquivo “inetd.conf” alterado. Para fazer isso:
Primeiro Passo
Altere as permissões do arquivo “/etc/inetd.conf” para 600, assim apenas o usuário root terá permissões de leitura ou escrita no mesmo.
[Root@kapil /]# chmod 600 /etc/inetd.conf
Segundo Passo
CERTIFIQUE-SE de que o dono do arquivo “/etc/inetd.conf” seja o root.
Terceiro Passo
Edite o arquivo inetd.conf (vi /etc/inetd.conf) e desabilite serviços como:
ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth, etc a menos que planeje utilizá-los. Se estiver desligado significa muito menoos risco.
Quarto Passo
Envie um sinal HUP para seu processo inetd
[root@kapil /]# killall -HUP inetd
Quinto Passo
Configure o arquivo “/etc/inetd.conf” como imutável, utilizando o comando chattr para que ninguem possa modificar esse arquivo
* Para configurar esse arquivo como imutável simplesmente execute o seguinte comando:
[root@kapil /]# chattr +i /etc/inetd.conf
Isso irá prevenir quaisquer alterações (acidentais ou de qualquer forma) ao arquivo “inetd.conf”. A única pessoa que poderá configurar ou limpara esse atributo é o superusuário root. Para modificar o arquivo inetd.conf você precisará retirar o atributo de imutável do arquivo:
* Para retirar o atributo de imutável, simplesmente execute o seguinte comando:
[root@kapil /]# chattr -i /etc/inetd.conf
TCP_WRAPPERS
Através da utilização do TCP_WRAPPERS você pode tornar seu servidor seguro contra intrusos de fora. A melhor política é negar todos os hosts colocando “ALL: ALL@ALL,PARANOID” no arquivo “/etc/hosts.deny” e então listar explícitamente os hosts confiáveis que tenham permissão para sua máquina no arquivo “/etc/hosts.allow”. O TCP_WRAPPERS é controlado de 2 arquivos e a procura pára quando coincidir a primeira regra encontrada.
/etc/hosts.allow
/etc/hosts.deny
Primeiro Passo
Edite o arquivo hosts.deny (vi /etc/hosts.deny) e adicione as seguintes linhas:
# Nega acesso a qualquer um.
ALL: ALL@ALL, PARANOID
Que significa que todos os serviços, todas as localidades estão bloqueadas, a menos que tenham acesso permitido através de eentradas no arquivo de permissão (hosts.allow).
Segundo Passo
Edite o arquivo hosts.allow (vi /etc/hosts.allow) e adicione por exemplo, a seguinte linha: Como um exemplo:
ftp: 202.54.15.99 foo.com
Para sua máquina cliente: 202.54.15.99 é o endereço IP e foo.com o nome do host de um de seus clientes com permissão de utilização do ftp.
Terceiro Passo
O programa tcpdchk é o checador de configurações tcpd wrapper. Ele examina sua configuração tcp wrapper e reporta todos os problemas potenciais e reais que ele encontrar.
* Depois de terminada sua configuração, execute o programa tcpdchk.
[Root@kapil /]# tcpdchk
Não deixe que o arquivo issue do sistema seja exibido
Você não deve exibir seu arquivo issue do sistema quando pessoas logam remotamente em seu sistema. Para fazer isso, você pode alterar a opção do telnet em seu arquivo “/etc/inetd.conf”. Para fazê-lo, altere a linha no “/etc/inetd.conf”:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
para:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
Adicionando a opção “-h” no final fará com que o serviço não exiba qualquer informação do sistema e apenas apresente ao usuário um prompt login:. Eu recomendaria a utilização do sshd ao invés do telnet.
Altere o arquivo “/etc/host.conf”
O arquivo “/etc/host.conf” especifica como os nomes são resolvidos. Edite o arquivo host.conf (vi /etc/host.conf) e adicione as seguintes linhas:
# Resolva nomes através do DNS primeiro antes de retornar ao /etc/hosts. order bind,hosts
# Nós temos máquinas com múltiplos endereços IP.
multi on
# Realiza teste para spoofing de endereços IP.
nospoof on
A primeira opção é para revolver nomes de hosts através do DNS primeiro e então através do arquivo hosts. A opção multi determiina se um host no arquivo “/etc/hosts” pode ter múltiplos endereços IP (múltiplas interfaces ethN).
A opção nospoof faz a indicação para tomar cuidado em não permitir spoofing nessa máquina.
Imunize o arquivo “/etc/services”
Você deve imunizar o arquivo “/etc/services” para prevenir apagamentos não autorizados ou adição de serviços.
* Para imunizar o arquivo “/etc/services”, utilize o comando:
[root@kapil /]# chattr +i /etc/services
Não permita login do root de diferentes consoles
O arquivo “/etc/securetty” permite a você especificar em que dispositivos TTY o usuário “root” tem permissão para logar. Edite o arquivo “/etc/securetty” para desabilitar qualquer tty que você não necessita comentando os mesmos (# no início da linha).
Bloqueie qualquer um de utilizar “su” para root
O comando su (Substitute User) permite a voc^e se tornar outro usuário existente no sistema. Se você não quer que qualquer um tenha acesso a “su root” ou deseja restringir o comando su para alguns usuários então adicione as seguintes 2 linhas no início de seu arquivo de configuração do “su” no diretório “/etc/pam.d/”.
Primeiro Passo
Edite o arquivo su (vi /etc/pam.d/su) e adicione as seguintes 2 linhas no início do arquivo:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/Pam_wheel.so group=wheel
Que significa que apenas membros do grupo “wheel” poderão utilizar su para root; Isso também inclui logging. Você pode adicionar os usuários no grupo “wheel” para que apenas esses tenham permissão para utilizar su para root.
Shell logging
O shell bash registra até 500 comandos antigos no arquivo “~/.bash_history” (onde “~/” é seu diretório home) para tornar fácil a você repetir longos comandos. Cada usuário que tenha uma conta no sistema terá seu arquivo “Bash_history” em seu diretório home. O shell bash deeve registrar um número menor de comandos e apagá-los quando o usuário sair do sistema.
Primeiro Passo
As linhas HISTFILESIZE e HISTSIZE do arquivo “/etc/profile” determinam o tamanho de comandos antigos que o arquivo “Bash_history” para todos os usuários em seu sistema pode suportar. Eu realmente recomendaria a configuração do HISTFILESIZE e HISTSIZE no arquivo “/etc/profile” para um valor menor como 30.
Edite o arquivo profile (vi /etc/profile) e altere as linhas para:
HISTFILESIZE=30
HISTSIZE=30
Que significam, o arquivo “Bash_history” de cada diretório home de usuários pode rehistrar até 20 comandos antigos e não mais.
Segundo Passo
O administrador deve também adiciona no arquivo “/etc/skel/.bash_logout” a linha: “rm -f $HOME/.bash_history”, para que a cada vez que o usuário sair do sistema, seu arquivo “Bash_history” seja apagado.
Edite o arquivo .bash_logout (vi /etc/skel/Bash_logout) e adicione a seguinte linha: rm -f $HOME/.bash_history
Desabilite o comando Control-Alt-Delete do teclado para shutdown
Para fazer isso comente a linha (com um “#”) listada abaixo em seu arquivo “/etc/inittab”. ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Para:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Agora, para que a alteração tenha efeito, difite o seguinte no prompt:
[root@kapil /]# /sbin/init q
Corrija as permissões no diretório “/etc/rc.d/init.d” para arquivos script
Corrija as permissões dos arquivos de script que são responsáveis por iniciar e parar todos os seus processes normais que necessitam ser executados durante o boot. Para fazer isso:
[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*
Que significa que apenas o root tem permissão para Ler, Escrever e Executar arquivos script nesse diretório.
Esconda informações de seu sistema
Por padrão, quando você loga em uma estação Linux, ela te diz qual o nome da distribuição, versão, versão do kernel, e o nome do servidor. Isso é informação suficiente para crackers obterem maiores informações de seu servidor. Você deve permitir apenas um prompr “Login:” para usuários.
Primeiro passo
Para fazer isso, edite o arquivo “/etc/rc.d/rc.local” e coloque um “#” na frente das seguintes linhas mostradas abaixo:
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo “” > /etc/issue
#echo “$R” >> /etc/issue
#echo “Kernel $(uname -r) on $a $(uname -m)” >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
Segundo Passo
Então, remova os arquivos “issue.net” e “issue” no diretório “/etc/”:
[root@kapil /]# rm -f /etc/issue
[root@kapil /]# rm -f /etc/issue.net
Desabilite programas SUID/SGID não utilizados
Um usuário comum será apto a executar um programa como root se o mesmo for setado como SUID root. Um administrador de sistemas deve minimizar a utilização desses programas SUID/SGID e desabilitar os progtamas que não sejam necessários.
Primeiro Passo
* Para localizar todos os arquivos com o bit `s’ de arquivos que tenham o root como dono, utilize o comando:
[root@kapil]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls lg {} ;
* Para desabilitar os bits suid dos programas selecionados acima, digites o seguinte comando:
[root@kapil /]# chmod a-s [programa]
Após seguir as linhas de segurança passadas acima, um administrador de sistema pode manter um sistema em um nível básico de segurança. Algumas das tarefas são pprocessos contínuos. O administrador do sistema tem que continuamente seguir as linhas acima para manter seu sistema seguro.
Escrito por: Kapil Sharma Email: kapil@linux4biz.net Website: http://www.linux4biz.net [Kapil Sharma é um consultor de segurança Linux e Internet. Tem trabalhado em vários sistemas Linux/Unix e Segurança Internet por mais de 2 anos. Ele mantém um web site http://www.linux4biz.net para oferecer suporte livre assim como comercial para web, solução Linux e Unix.]
Copyright © 2000, Kapil Sharma Published in Issue 58 of Linux Gazette, October 2000











