Aapcheのsuexecを設定した時の備忘録です。

■説明
ApacheでCGIを動作させる時は、デフォルトだとApacheを起動しているユーザー権限で動作します。
しかし、それだとセキュリティー上問題があったり多くのユーザーが使用している場合(バーチャルドメインなど)に不便です。
そこで、suexecの設定をしてみます。
suexecは、設定されているユーザーにスイッチしてCGIを動作させます。
例えば、suexecにkurobutiユーザー(OSに登録されている)を設定しておくことでCGIを実行する時にapacheユーザーがkurobutiユーザーにスイッチしてCGIを実行します。

■OS
CentOS 6 64bit

■httpd
httpd-2.2.3-53.el5.centos.1

■suexecでスイッチするユーザー
kurobuti

前提条件
Apacheはインストール済みとします。

(1)suexecの設定

[root@example ~]# vi /etc/httpd/conf/httpd.conf
# -- 最終行にでも追加 -- #
SuExecUserGroup kurobuti kurobuti
※「LoadModule suexec_module modules/mod_suexec.so」がロードされていること

(2)簡単なCGIを作成
[root@example ~]# mkdir /var/www/cgi-bin/test
[root@example ~]# vi /var/www/cgi-bin/test/test.cgi
#!/usr/bin/perl

print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<head>\n";
print "<title>テスト</title>\n";
print "</head>\n";
print "<body bgcolor=\"#ffcccc\">\n";
print "これはCGIのテストです。\n";
print "</body>\n";
print "</html>\n";
[root@example ~]# chown kurobuti:kurobuti -R /var/www/cgi-bin/test/
[root@example ~]# chmod 750 /var/www/cgi-bin/test/test.cgi
※CGIを保存するディレクトリのオーナー、グループはCGIを実行するユーザー、グループにしなくてはなりません

・パーミッション情報など
[root@example ~]# ls -ld /var/www/cgi-bin/test/
drwxr-xr-x 2 kurobuti kurobuti 4096 10月  2 22:22 /var/www/cgi-bin/test/
[root@example ~]# ls -l /var/www/cgi-bin/test/test.cgi
-rwxr-x--- 1 kurobuti kurobuti 276 10月  2 22:22 /var/www/cgi-bin/test/test.cgi

(3)Apacheの起動
[root@example ~]# service httpd start
httpd を起動中:                                            [  OK  ]

(4)動作確認
「http:// IP or Domain/cgi-bin/test/test.cgi」にアクセスしてCGIが実行できるか確認する。
SuExecUserGroupディレクティブはバーチャルドメイン毎に書く事も可能です。

参考文献
1. http://httpd.apache.org/docs/2.0/ja/mod/mod_suexec.html
2. http://www.tohoho-web.com/wwwcgi2.htm#CgiReadme (テストCGIをお借りしました)

補足
suexecのPHP版(SuPHP)があります。
http://www.kurobuti.com/blog/?p=3270
http://www.kurobuti.com/blog/?p=4013


10月 2, 2011 at 10:29 pm by 黒ぶちメガネ
Category: Apache, Linux