作業メモ: setuid/setgidされているコマンドを見てみる

Linuxサーバを堅牢化する方法のひとつに、「余計なsetuidやsetgidを無効にする」というのがあります。

rootが不正利用されたときの危険性を減らすためです。

サーバを構築する際には、常にその用途を心にとどめておき、それに応じてシステムを構築します。可能な場合は、不要な機能を提供する権限やパッケージ全体を削除するようにします。あるバイナリが実行する処理や、setuidされている理由が不明な場合は、manページを参照してください。manページが役に立たないときはそのソースにあたることを忘れないでください。

Rod Flickenger著,山口晴広監訳:『LinuxサーバHucks』,p.29,オライリージャパン,2003.10.

・・・

つまり、次の作業が必要です。

  • 手元のサーバでsetuid/setgidされているコマンドやライブラリをすべて把握する
  • それぞれの役割をmanやコードを読んで理解する
  • そのままにしておいてよいか、ビットを外すか、検討して対処する

しかし、自分はそのへんサボってきました。

たとえば、手元のFedora 15ではgnome-pty-helperがsetuidされていますが、このライブラリがそもそも何なのかも説明できなければ、なぜsetuidされているのかも知らず、そのままにしておいてよいかを考えたこともない・・・というカンジです。万死。

「しぬがよい」

というわけで、手元のマシンで、setuidビットが立っているコマンドを把握するところから始めることにしました。

ためしに一覧表示してみたら40個以上ありました。今後の自分の勉強のために、適当に分類してメモしておきます。

# 表示コマンドは、上の本や20 Linux Server Hardening Security Tipsの「#15: Disable Unwanted SUID and SGID Binaries」あたりを参考に。

以下のメモは、上記作業の素振りが目的です。「こうすべき」とか「こうすれば安全」という話ではありません。

ジョブ管理

atは、高々一回だけ実行するcronのようなコマンド。使わなければ無効にしてよいでしょう。

-rwsr-sr-x. 1 root root 55600 May  9 16:47 /usr/bin/crontab
-rwsr-xr-x. 1 root root 53696 Feb  8 13:38 /usr/bin/at

与えられたコントロールグループのタスクを実行するコマンド。使ったことがない。詳細は未調査。

-rwxr-sr-x. 1 root cgred 12768 Mar  3 17:58 /bin/cgexec

アカウント管理

パスワード管理

上から、パスワード変更、ユーザ名や住所の変更、パスワード期限変更のコマンド。(特に、本番環境では)使わなければ無効にしてよいでしょう。

-rwsr-xr-x. 1 root root 35032 Feb  9 00:40 /usr/bin/passwd
-rws--x--x. 1 root root 20184 May  6 21:36 /usr/bin/chfn
-rwsr-xr-x. 1 root root 55400 Feb 10 19:29 /usr/bin/chage

セキュリティ機構

SSH

鍵交換方式でSSHを使うなら、ssh-agentもssh-keysignも有効にしておく必要があります。ssh-keysignは、ユーザ認証の方法にHostbased認証を使う場合のみ、有効にします。(2011/06/23 訂正: メモ: ssh-keysignはHostbased認証を使うときのみsetuidする - 虎塚

# ssh-keysignが2つあるのは、プリインストール版の他にパッケージからインストールしたものがあるため。

---x--s--x. 1 root nobody 116808 Apr 29 16:21 /usr/bin/ssh-agent
---s--x--x. 1 root root 237216 Apr 29 16:21 /usr/libexec/openssh/ssh-keysign
-rws--x--x. 1 root root 230744 Jun 12 14:56 /usr/local/libexec/ssh-keysign
sudo関連

sudoはrootにsetuidしていないと動かないので、sudoで動かすプログラムがある限り必要です。

sudoeditは、sudoコマンドに「e」オプションを付けたハードリンクです。無効にしてよいでしょう。

---s--x--x. 2 root root 207576 Feb 10 01:36 /usr/bin/sudo
---s--x--x. 2 root root 207576 Feb 10 01:36 /usr/bin/sudoedit
PAM関連

PAMのためのヘルパーインタフェース。…とマニュアルにあるけれども、PAMの理解が足りないので要勉強。(passwd、chfn、chshあたりを有効にするなら、これも有効にしておかないと動かないのではと思う)

-rws--x--x. 1 root root 44152 Apr  1 06:25 /usr/sbin/userhelper

PAMのタイムスタンプをチェックするコマンド。これも要勉強。

-rwsr-xr-x. 1 root root 9496 Feb  8 23:19 /sbin/pam_timestamp_check

現在のユーザのパスワードを認証するpam_unixモジュールのヘルパープログラム。

-rwsr-xr-x. 1 root root 32000 Feb  8 23:19 /sbin/unix_chkpwd
認証関連

Kerberosのバージョン5を必要とする何か。要勉強。ユーザIDを安全に変更する、らしい。

-rwsr-xr-x. 1 root root 197637 Apr 14 04:10 /usr/bin/ksu
デフォルトシェル変更

無効にしてよいでしょう。

-rws--x--x. 1 root root 20088 May  6 21:36 /usr/bin/chsh

I/Oまわり

ユーザ端末への書込み

操作が必要ならそのままで。書き込まないなら、無効にしてよいでしょう。

-r-xr-sr-x. 1 root tty 16088 Feb 10 02:57 /usr/bin/wall
-rwxr-sr-x. 1 root tty 12136 May  6 21:36 /usr/bin/write
擬似端末の操作

未調査。よくわからないので今後調べる(…と思ったら、コードを読んでいる方がいた。自分も読もう)

-rwx--s--x. 1 root utmp 17016 Apr  5 00:59 /usr/lib64/vte-2.90/gnome-pty-helper

ネットワークまわり

MTA(Mail Transport Agent)

MTAのsendmail。メールを扱わないのなら無効にしてよいでしょう。

-rwxr-sr-x. 1 root smmsp 829896 Feb  9 22:36 /usr/sbin/sendmail.sendmail
ネットワークインタフェース関連

権限のあるユーザに、ネットワークインタフェースを手動で操作させるコマンド。未調査。

-rwsr-xr-x. 1 root root 9112 Apr 28 04:41 /usr/sbin/usernetctl

ネットワークインタフェースのステータスの変更を受けて、プロセスにSIGIOシグナルを送る。SIGIOは、入出力可能になったことをファイルディスクリプタに知らせるシグナル。未調査。

-rwxr-sr-x. 1 root root 8720 Apr 28 04:41 /sbin/netreport

排他制御

バイスに排他ロックをかける。

-rwx--s--x. 1 root lock 15712 Apr  5 21:45 /usr/sbin/lockdev

制限付きのセマフォファイルを作る。

-rwxr-sr-x. 1 root mail 20352 Jul 28  20:09 /usr/bin/lockfile

このあたりは有効なままでよいと考えます。

X

X.orgのプログラム。Xを使わないなら無効にしてよいでしょう。というか、その場合はXごと消すべきでしょう。

-rws--x--x. 1 root root 1981320 Apr 28 12:52 /usr/bin/Xorg

ゲーム

オセロとマインスイーパ。無効にしてよいでしょう。

-r-xr-s--x. 1 root games 143320 Apr 20 04:10 /usr/bin/iagno
-r-xr-s--x. 1 root games 189576 Apr 20 04:10 /usr/bin/gnomine

その他

分類からしてよく分からない。

nspluginwrapperというrpmに入っているライブラリ。これを使うと、32bit用プラグインを、64bit環境で動かしたりできるらしい。

-rwsr-xr-x. 1 root root 59168 May  4 18:06 /usr/lib64/nspluginwrapper/plugin-config

D-Bus(というメッセージバスの)デーモンの、ヘルパープログラム。

-rwsr-x---. 1 root dbus 50672 May  3 01:23 /lib64/dbus-1/dbus-daemon-launch-helper

以下は、まったくもって分からない。OSの中の何が使っているのだろう?

-rwsr-xr-x. 1 abrt abrt 8992 May 14 02:04 /usr/bin/abrt-action-install-debuginfo
-rwsr-xr-x. 1 root root 20416 May  3 00:10 /usr/libexec/polkit-1/polkit-agent-helper-1
-rwsr-xr-x. 1 root root 13056 Apr  8 18:42 /usr/libexec/pulse/proximity-helper

以上のようなカンジに。

知らないことがたくさんあるので、少しずつ勉強します。