(UNIX全般?) suEXECとは? & suEXEC時のパーミッション(属性)について [FreeBSD]

(mod_userdir配下にもsuEXECが適用されているものとして解説します。導入の説明はこちら)
suEXECとは何?と思いますが、
通常時:nobody(やwww)ユーザが実行
CGI呼び出し時:そのユーザ(例えばfoo)が実行
というふうにできるシステムです。

なにがいいかというと、共用サーバでの他ユーザからのいたずらができなくなるということです。
パーミッションの基本からなんですが、
まず「所有者 グループ 他人」の3つの数字でできています。
そしてそれらの数字は

r(read) 読み 4
w(write) 書き 2
x(excute) 実行 1

の足し算の結果がそれぞれ書かれています。(硬い言葉ではそれぞれ閲覧、書込、実行というらしい)
つまり、ファイルの所有者が読み書き実行でき、グループ、他人は何もできないという設定にするには
700(内訳4+2+1,0+0+0,0+0+0)にすればいいということです。
数字が大きいほど、多くの権限を与えられていることになります。逆に、セキュリティの為、必要最低限の権限しか与えないほうが得策でしょう。

所有者、グループ、他人の内訳は、共用レンタルサーバではこんな感じになります。

所有者:自分
グループ:誰もいない、又は他ユーザ
他人(第三者):他ユーザ、nobody(Apacheがそれで動いている)

suEXECでなくてサーバが共用だと、例えばこのようないたずらを出来てしまうことになります。
普通のデータファイル(CGIで読み書きする)の権限は何にするかというと「606」(666も同じ)が普通ですよね。というか、それ未満にするとうまく動かないはずです。
(読み4+書き2で6、自分と、CGIの実行ユーザ(nobody等全員共通ユーザ)にもこの権限を与えなくては書き込めないからです。)
すると、「他人」に読み書きの権限を与えざるをえません。すなわち、他の共用サーバを利用しているユーザにも読み書きをする権限が与えられてしまったということになります。これでは、いたずらで中身を滅茶苦茶にされてもおかしくありません。

suEXECというのは、CGIの実行時のみ、自分(=所有者)が実行主?となることが出来るというわけです。つまり、最悪、CGIのみで読み書きしたいデータファイルなどは、自分に権限を置いてグループや他人には何も権限を与えなければ良いのです。そうすれば勿論、他人がそのファイルを触ることは出来ません。Apacheもこれないので、ブラウザから覗かれる心配もなくなります。これは便利。
ちなみに、自分(mod_userdirででのユーザ)と所有者が違っている場合、実行されないと思います。

以下に、そういったsuEXEC環境下でのパーミッションの設定を書いておきます。基本原則を理解すれば怖いもの無しだと思います。
(suEXECでは、CGIは自分として動きますが、Apacheは他人として動くことに注意。)

基本原則

・パーミッションは、最も低く設定できているのがベスト。
・「グループ」の権限は全部0でよい。
・「他人」が「書き」権限を持つと危険(いたずらで書き込まれる)
・CGIを動かすのは「所有者」がする。「他人」の権限は0でよい。
・CGIで書き込むデータファイルもやはり上と同じである(実行権限は外す)
・画像、htmlなどの普通ファイル(HPで公開するもの)は、他人が読めなくてはならない。

.html file:604(普通に公開するファイル;自分が読み書き、他人(Apache)が読み)
.cgi file:700(CGI実行ファイル;自分がCGIを動かし、読み書き実行。)
.dat file:600(データ保存(by CGI)ファイル;自分が読み書きできる。)
.php file:705(PHP等CGI以外実行ファイル;自分が読み書き実行、他人(Apache)が読み実行)
.dat file:606(データ保存(by CGI以外)ファイル;自分と他人(Apache)が読み書きできる。)
cgi dir:701(実行CGIを置くディレクトリ;なんでか解っていないが)

phpではsuEXECを利用することが出来ないので、それによって書き込まれるファイルは必然的に他人にも書き込まれる危険性を孕むということです。(moduleモードではなくCGIモードならsuEXECが可能)
上の例を良く見てみてください。「他人」の権限に、「書き」権限が入っているのがほとんどないということがわかります。2が入っているということは、2か3か6か7ということですね。これらが避けられています。
どれもこれも、他人からの書き込みを防ぐ為のものです。基本原則にも書きましたが、他人が書き権限を持たないように気をつけてください。それさえすればいたずらはなくなるかと思います。
また、「他人」に「読み」権限を与えると、無用なファイルを読まれてしまう危険性もある、ということも念頭においてください。

Trackback address for this post

Trackback URL (right click and copy shortcut/link location)

Feedback awaiting moderation

この投稿にはモデレーション待ちのフィードバックが 227 件あります....

コメントを残す


あなたのメールアドレスはこのサイト上には公開されません

頂いたURLは表示されます。
(改行が自動で <br /> になります)
(Name, email & website)
(利用者がメッセージ・フォームを用いてあなたにメール送信することを許可します (あなたのメールアドレスは公開されません)。)