HTTP公開(suEXEC)

以前の記事で、CentOSのhttpd公開フォルダを通常のドキュメントルートと各ユーザの特定の
公開フォルダの2種類にする事をあげましたが、通常運用の際にFTPを使ってファイル転送をする
前提で考えると、このままではまずい事がわかりました。

というのも、FTPでファイルをアップロードすると、そのファイルの所有者はアップロードを行った
ユーザになりますが、公開フォルダでCGIを動かそうとするとapacheが所有者になっていないと
実行権限が無くてエラーとなってしまいます。

一旦は、SSHで接続して変更しましたが、これでは友人にサーバーを使ってもらう時に
非常に使いづらいサーバーとなってしまいますので(掲示板などを自分で設置できない)
これの対応をしてみました。

この対応方法を調べてみると2種類あり、1つ目の方法では、通常UNIX系のOSでは
httpdの実行権限者をnobodyとして実行するという事があげられて、誰でもCGIなどの
プログラムを実行する~という事が書かれていましたが、普通に誰でもアクセスや書き込みが
できてしまうと、セキュリティが無いのと同じですので、非常に危険なので、この方法は却下。

2つ目の方法として、suEXECなるものを使って各ユーザの公開フォルダ内はユーザの権限で
CGIが動くようにしてあげる方法がありました。 しかも、この機能はapacheに付随した機能との事。
迷わずこれを選択しようと思いましたが、調べてみるとapacheをインストールする時のみしか
suEXECの設定内容を変更できないというセキュリティがあり、削除~再インストールでは満足に
動くかどうか怪しい(apacheのバージョンなど不具合により。と各サイトでは書かれています)

さて、どうするかと思いきや、CentOSにはsuEXECが標準でサポートされているのでは?という
考えに至りました。 というのも各サイトの説明や資料の中に多少なりsuEXECの設定に絡んだ
内容が出ている(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”
これを使うとsuEXECの設定内容がわかるので、これを見ると既に入っていて動いている事と
DOC_ROOTを/var/wwwにして、ユーザ用の公開フォルダをpublic_htmlにしてあげると機能する
事がわかり、httpd.confを修正した所、無事にFTPで書くユーザ名で接続してアップロードした
CGIファイルが動く事がわかりました。

結論としては、/homeの中が良いからと/var/www/htmlを移動した事と、個人用の公開フォルダも
public_htmlではなく気持ちセキュリティを考えhtmlにした等が全て余計な事だったという訳で解決。

ただ、これだと/var/www/htmlにFTPでアクセスするのに/var以下のパーミッションをいじる必要が
あるので、もう少し余裕ができたら試験機でapacheの再インストールをしてみたいなと思います。

カテゴリー: Linux パーマリンク