/tmp には noexec オプションをつけよう

Web アプリケーションのセキュリティホールを突いて変なスクリプトを /tmp にアップロードされちゃうことがあります。もしそういうことをされても、 /tmp パーティションに noexec オプションが付いてれば、被害を食い止めることができる…かもしれません。ただし、 Slackware のインストール時に /tmp 専用パーティションを作成してないとこの技は使えません。

で、 noexec オプションて何やねん。man mount 曰く:

noexec
マウントされたファイルシステム上の任意のバイナリの直接実行を禁止する。 (最近になるまで /lib/ld*.so /mnt/binary のようなコマンドを使って、 バイナリを何とか実行することが可能であった。 このトリックは Linux 2.4.25 / 2.6.0 以降では失敗する。)

http://linuxjm.sourceforge.jp/html/util-linux/man8/mount.8.html より抜粋

バイナリと書いてありますが、シバンの付いたスクリプトの直接実行も禁止してくれます。

/etc/fstab の /tmp のレコードのオプションフィールドに noexec を追加しましょう。

# 例です
/dev/sda6        /tmp             ext4        defaults,noexec         1   2

編集し終えたら、/tmp を再マウントします。

sudo mount -o remount /tmp

ちょっと実験してみましょう。こんなシェルスクリプトを用意します。

#!/bin/bash

echo "こんにちは、世界!"

実行権限を付けて実行してみます。

ls -l hoge.sh 
# 実行結果
#-rwxr-xr-x 1 kozu kozu 48  1月  9 17:23 hoge.sh*
/tmp/hoge.sh
# 実行結果
#-bash: /tmp/hoge.sh: 許可がありません
bash /tmp/hoge.sh 
# 実行結果
#こんにちは、世界!

bash /tmp/hoge.sh だと実行できちゃいますが、 bash は /bin にあるので、しょうがないですね。

なお、 /tmp に noexec オプションが付いてると、 SlackBuilds のビルドが失敗します。そういう時は、一時的に exec オプションを付けます。

sudo mount -o remount,exec /tmp

用が済んだら元に戻します。

sudo mount -o remount /tmp

面倒くさいのが難点です。

※ SlackBuilds の一時ファイル保存先は TMP 環境変数で設定できるみたいです。

sudo TMP=~/tmp bash cronie.SlackBuild

出来上がったパッケージはやはり /tmp に書きだされます。

(コウヅ)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中