アプリケーションがSUIDを設定したときにコアダンプが生成されないのはなぜですか?

アプリケーションがSUIDを設定したときにコアダンプが生成されないのはなぜですか?

すべての競合に対してコアダンプを生成するように環境を設定しましたが、実行ユーザーとは異なるユーザーに対してSUIDが設定されたプログラムを実行すると、コアダンプは生成されません。なぜこれを知っていますか? Web のどこにも見つかりません。一種のセキュリティ機能のようですが、無効にしたいのですが…

質問:

$ cd /tmp
$ cat /etc/security/limits.conf | grep core
*     -     core     unlimited
root  -     core     unlimited

$ ls -l ohai
-rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai

$ ./ohai
...
Floating point exception

$ sudo -i
# ./ohai
...
Floating point exception (core dumped)
# chmod -s ohai
# exit
$ ./ohai
...
Floating point exception (core dumped)

編集する: できるだけ安全に動作させるために、次のスクリプトを使用して環境を設定します。

mkdir -p /var/coredumps/
chown root:adm /var/coredumps/
chmod 772 /var/coredumps/

echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf

echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf
echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf

これで残っているのは、/var/coredumps に ACL を追加することです。唯一の範囲を絞り込むことができるのは、ルートを指定するかbind mount類似する必要があるアプリにまだ問題があることです。

ベストアンサー1

setuidプログラムのメモリには機密データを含めることができます(おそらく)。したがって、コアダンプはルートのみを読み取ることができなければなりません。

カーネルが既存のファイルを上書きしないように注意する必要がありますが、コアダンプをルートが所有している場合、明らかなセキュリティ脆弱性は見られません。

Linuxはsetxidプログラムのコアダンプを無効にします。これを有効にするには、少なくとも次のことを行う必要があります(これが十分であることを確認していません)。

  • Setuid コアダンプは通常設定で有効になります。fs.suid_dumpableシステム制御echo 2 >/proc/sys/fs/suid_dumpable(注:1ではなく2です。1は「システム全体をデバッグしており、すべてのセキュリティを削除したい」を意味します。)
  • 呼ぶprctl(PR_SET_DUMPABLE, 1)プログラムから。

おすすめ記事