[Apache] CGI 使うなら suEXEC 設定しとこ

[Apache] CGI 使うなら suEXEC 設定しとこ

正月気分が抜けねぇぜ〜・・・。2012 年初投稿!今年もよろしくお願いします。nakamura です。

今年の一発目は Apache のちょいネタ。Movable Type などの CGI プログラムを Apache で動かす際に設定しておくとちょっといい感じになる suEXEC について解説してみます。Apache をよくさわる人なら何を今更なエントリーだと思いますので、華麗にスルーしちゃってください。

suEXEC ってなんなの

su して exec するんです。要は CGI の実行ユーザを任意のものに指定する為の仕組みです。デフォルトでは Apache の起動ユーザになります。

詳細はマニュアルを参照してください。

suEXEC を使わない場合の問題点

CentOS のデフォルトでは Apache の起動ユーザである apache ユーザによって CGI プログラムは実行されます。suEXEC を使わない場合、この状態で例えば MT を動かすには二通りの方法があります。

  1. CGI プログラム、及び MT がファイルを出力するディレクトリのオーナーを apache ユーザに変える
  2. apache ユーザでも実行、書き込みができるよう CGI プログラム、及び MT がファイルを出力するディレクトリのパーミッションをゆるくする

1 の方法でもひとまず MT 自体は問題なく動くでしょう。ただ現実的には全てのファイルを MT で管理するわけではなく、css や js など手動でアップロードしたいファイルも多いはずです。でもオーナー apache のディレクトリにアップロード用のユーザで書き込みはできない・・・、となると MT で出力するディレクトリと手動でアップロードするディレクトリでオーナーを細かく分けて・・・云々カンヌン・・・。あーもうシャラクセェ!パーミッション変えちまえ!という事でよくないとは思いつつも結局 2 の方法に逃げてしまったりするんですね~。

suEXEC を使ってみる

suEXEC を使うと上記のようなメンドクサイ状況があっさり解決できてしまいます。要は CGI の実行ユーザとファイルアップロード用のユーザが同じならいいわけですね。

まずはファイルアップロード用のユーザを作成します。ユーザ名はお好みで。

useradd deployer
passwd deployer

CGI と出力先のディレクトリのオーナーをアップロード用のユーザに変更します。

chown deployer:deployer -R /var/www/cgi-bin/mt/
chown deployer:deployer -R /home/projects/c-brains.jp/htdocs/

CGI ファイルには実行権限が必要です。念のため。

find /var/www/cgi-bin/mt -maxdepth 1 -mindepth 1 -type f -name "*.cgi" | xargs chmod +x

CentOS のデフォルトであれば、後は Apache の設定をして再起動するだけです。ソースからコンパイルしているとか、OS が違うとかであれば、mod_suexec が有効になっているか確認してください。

Apache の設定はだいたいこんな感じ。

<VirtualHost *:80>
	ServerName www.example.com
	DocumentRoot /home/projects/c-brains.jp/htdocs
	ServerAdmin nakamura@example.com

	# これを追加するだけ
	SuexecUserGroup deployer deployer

	<Directory "/home/projects/c-brains.jp/htdocs">
		Options FollowSymLinks
		AllowOverride All
		Order Deny,Allow
	</Directory>

	Alias /cgi-bin /var/www/cgi-bin
	<Directory /var/www/cgi-bin>
		AllowOverRide All
		Options ExecCGI
		AddHandler cgi-script .cgi .pl
		Order Deny,Allow
	</Directory>
</VirtualHost>

Apache を再起動して反映します。

httpd -t
/etc/init.d/httpd restart

以上で終わりです!特にパーミッション云々を意識せずとも CGI は動くし、ファイルのアップロードもできるようになっているはずです。

終わりに

セキュリティ的にもよいですし、何よりパーミッションやらオーナーやらの設定が劇的にシンプルになるので CGI を使う際は必ず設定しています。機会があればぜひ試してみてください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ