setenforceモードでのsuexec
不特定多数のユーザーからサーバーコンテンツの変更がある場合、
サーバーにそれなりの制限を設けつつ、自由にコンテンツの変更が行われなくてはならない。
redhat系列(fedora,CentOS,RedHat,suse?)の場合、selinuxというセキュリティモジュールがある。
デフォルトではOnのPermissiveになっているはずだ。
これをEnforcingにしたとき、apache(httpd)でsuexecを有効にしている場合、セキュアコンテキスト(ls -lZ とかで出てくるuser_u:object_r:unconfined_t)の問題にあたるはずだ。
setroubleshootdを有効にしている場合は、そのヘルプメッセージに書かれている手順を実行すればよい。
しかし、複数の手順があるので紹介しておく。
セキュアコンテキストスイッチの状態の確認
sudo /usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_network_connect --> off httpd_can_network_connect_db --> off httpd_can_network_relay --> off httpd_disable_trans --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> on httpd_rotatelogs_disable_trans --> off httpd_ssi_exec --> off httpd_suexec_disable_trans --> off httpd_tty_comm --> off httpd_unified --> off
セキュアコンテキストを適切なものに変更
サブモジュールのコンテキストをapache権限で動かす
sudo /usr/sbin/setsebool -P httpd_unified 1
対象のフォルダのコンテキストが今後正しいものになるように修正する
sudo vi /etc/selinux/targeted/contexts/files/file_contexts.local
以下を追記。
/var/www/[^/]+/public_html(/.*)? system_u:object_r:httpd_sys_content_t
設定を反映する
sudo /usr/sbin/setenforce 0 sudo restorecon -R /var/www/*/public_html sudo /usr/sbin/setenforce 1 ls -Zd /var/www/*/public_html
コンテキストスイッチを有効にするためapacheを再起動する
sudo /etc/init.d/httpd condrestart
気が向いたら関連ページの設定一覧を翻訳...