たとえば、CentOS5のApacheなんかだと、最初からsuexecが有効になっています。
# suexec -V -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="apache" -D AP_LOG_EXEC="/var/log/httpd/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=500 -D AP_USERDIR_SUFFIX="public_html"
まあ、コンパイル時に有効になっていますからね。仕方がないってものです。
# httpd -V
Server version: Apache/2.2.3
Server built: Jan 15 2008 20:33:30
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
しかし、suexecは無効にしてしまいます。
# cd /usr/sbin # mv suexec suexec.disabled # /etc/init.d/httpd restart
多アカウント環境のApacheで、代わりになにを使うかというと、
mod_ruidがいいかもしれません。
http://websupport.sk/~stanojr/projects/mod_ruid/
インストールの仕方は超簡単 最初にlibcapと、apxsがすでに入っていることを確認してください。
# rpm -qa | grep libcap libcap-1.10-26 libcap-devel-1.10-26# which apxs /usr/sbin/apxs
# apxsはhttpd-devel.i386パッケージに入っています。 # libcapもhttpd-develもなかったらyumなどでインストールしてください
ダウンロードしてインストールします。
# wget http://websupport.sk/~stanojr/projects/mod_ruid/mod_ruid-0.6.tar.gz # tar xvzf mod_ruid-0.6.tar.gz # cd mod_ruid-0.6 # apxs -a -i -l cap -c mod_ruid.c # /etc/init.d/httpd restarthttpd.confにはすでにモジュールをロードする設定が書き込まれています。
# # The following modules are not loaded by default: # #LoadModule cern_meta_module modules/mod_cern_meta.so #LoadModule asis_module modules/mod_asis.so LoadModule ruid_module /usr/lib/httpd/modules/mod_ruid.so
Defaultの設定でstat
(ファイルの所有者のユーザーにsetuid/setgidされる)になっているので、
特に追記せず、そのままでも動きます。
RDefaultUidGid apache apacheこういう設定が一行必要になってくるでしょう。
ただし、suexecと違って、public_htmlだけに効くとかいうわけではなく、
もう、全部に効いてしまうので、すでに動いているシステムに導入するには
(特にCGIの)注意が必要でしょう。
RMode config RUidGid username groupname
