Linux には、バッファオーバーフロー攻撃を防御するため、exec-shield 設定が設けられています。
- マークされたバイナリを有効にし、以外は無効
- マークされたバイナリを無効にし、以外は有効
- 常に有効
デフォルトの設定値を確認すると CentOS では、1になっています。
# cat /proc/sys/kernel/exec-shield
1
この設定値を、2 (有効) にするには、echo コマンドで
# echo 2 > /proc/sys/kernel/exec-shield
とします。
またこの設定を永続的にするには、
vi /etc/sysctl.conf
[最下行に以下を追記]
kernel.exec-shield = 2
・修正後
# sysctl -p
とします。しかしこの設定は、以下のリンクにもある通り kernel パニックになり最悪、システムが起動しなくなる恐れがあります。
http://ja.528p.com/linux/centos/B007-security_tips.html
実際、当方の環境で上記設定を施したところ、certmonger サービス起動不能となりフリーズしました。試みに、grub 画面からシングルユーザーモードで起動、
startx
コマンドを打つと、/bin/dbus-daemon: failed: Permission denied となりXウィンドウが起動しませんでした。grub の kernel オプションで、[ exec-shield=0 を与えると良い ] とあるのでその通りにやってみましたが、キーレイアウトが違うのか、オプションを読み込んでいない感じでした。
バックアップの HDD に換装してシステム復旧したのですが、どうしても諦められません。
もう一度、HDD を元に戻してシングルユーザーモードから、
vi /etc/sysctl.conf
[以下設定を削除]
kernel.exec-shield = 2
# sysctl -p
# chkconfig certmonger off
# reboot
と、叩いたところ無事起動しました。ついでに、SELinux のリラベルも行われて postfix も自動起動してくれるようになりました。めでたし、めでたし。