var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

Dicas de Segurança Linux - Kapil Sharma

Traduzido por: Renato Murilo Langona (Linuxsecurity)
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

Compartilhe: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Google
  • E-mail this story to a friend!
  • Live
  • Rec6
  • Slashdot
  • StumbleUpon
  • Technorati
  • TwitThis

Comente este artigo.