O que são NPTL, Exec-Shield e porque meus programas de uma hora para outra crasham adoidamente? Se você usa RedHat 9, Fedora Core 1, kernel 2.6 e/ou kernel 2.4 patcheado, seus problemas podem se resolver após a leitura deste artigo.
O patch marca largos pedaços do código de um programa, incluindo aí
o stack, não executáveis. Com isso, ele cumpre dois papéis:
Protege contra toda a maléfica família Overflow: stack,
buffer e function pointer (ponteiro de função). De quebra,
acaba com uma das críticas do pessoal de BSD contra o Linux,
a facilidade de crashar um kernel com buffer overflows :D
Torna aleatório o ponto na VM onde o binário é carregado,
com isso torna mais difícil a vida dos exploits que tentam
acessar código ou dados para fins de ataque.
Mas como nem tudo na vida é perfeito, alguns programas não querem
nem saber e saem crashando. E agora? O problema pode ser resolvido de
diversas formas:
1) Você pode desabilitar o Exec-Shield apenas para o programa
infrator, utilizando o programa 'setarch'. Utilizando a
técnica do alias:
alias programa_crashento="setarch i386 programa_crashento"
2) Desabilitando o Exec-Shield, temporariamente ou direto.
2.1) Desabilitando temporariamente:
O arquivo /proc/sys/kernel/exec-shield controla o
comportamento do Exec-Shield. Quando está em 0, o Exec-Shield é
desabilitando. Então, como root, digite:
# cat 0 > /proc/sys/kernel/exec-shield
para desabilitar a partir do momento da digitação.
2.2) Desabilitando em tempo de boot:
Você pode utilizar o parâmetro de kernel exec-shield (exec-shield=0)
ou então colocar kernel.exec-shield=0 em /etc/sysctl.conf.
Reboote após as alterações, e o Exec-Shield será desabilitado.
[2] Comentário enviado por PlainSpooky em 23/12/2003 - 16:34h
Só uma correção...
ao invés de "cat 0 > /proc/sys/kernel/exec-shield" usa-se "echo 0 > /proc/sys/kernel/exec-shield", uma distração boba que vez ou outra em também cometo. :)