2013年9月9日月曜日

セキュリティコンテキストの設定

SELinuxが有効になっているCentOS6上にpukiwikiを設置しようとして, セキュリティコンテキストの設定に手こずった.
SELinuxが有効になっている場合, とあるセキュリティコンテキストが設定されているディレクトリ配下のファイルには, セキュリティコンテキストが適切に設定されている必要があるようだ(経験上そうらしいというだけしか知らない).
SELinuxを無効にするのが手っ取り早いのだが, 悔しいのであえて有効のままやった.

手こずった経緯を書くのは面倒なので, 結論と注意事項くらいにまとめる.
今回, ドキュメントルートは「/var/www/html」とし, pukiwikiのディレクトリ名を「wiki」にして設置した. この場合, セキュリティコンテキストは以下のように設定する.
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wiki/(attach|backup|cache|diff|wiki)(/.*)?"
# semanage fcontext -a -t httpd_sys_htaccess_t "/var/www/html/wiki/(.*/)?\.ht[^/]*"
# restorecon -R /var/www/html/
これでうまくいった.
「semanage」コマンドは, セキュリティコンテキストを定義するコマンドなのだが, デフォルトではインストールされていないので, 以下を参考にインストールしておく.

【参考】
RHEL 6: semanage SELinux Command Not Found

「restorecon」は, 定義したセキュリティコンテキストを適用するコマンド. このコマンドは, 私の環境にデフォルトでインストールされていた.ちなみに, 適用されたセキュリティコンテキストは「ls -Z」で確認することができる.
# ls -aZ /var/www/html/wiki
・・・
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_htaccess_t:s0 .htaccess
-rw-r--r--. apache apache system_u:object_r:httpd_sys_htaccess_t:s0 .htpasswd
-rw-rw-rw-. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 COPYING.txt
-rw-rw-rw-. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 INSTALL.txt
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 README.en.txt.gz
-rw-rw-rw-. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 README.txt
-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 UPDATING.en.txt.gz
-rw-rw-rw-. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 UPDATING.txt
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 attach
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 backup
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 cache
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 counter
・・・
はじめ, セキュリティコンテキストをすべて「httpd_sys_content_t」で設定したら(/var/www/html/index.htmlがそうだったから), pukiwikiにアクセスしたときに以下のエラーがでてしまった.
Runtime error
Error message :

Directory is not found or not writable (DATA_DIR)
Directory is not found or not writable (DIFF_DIR)
Directory is not found or not writable (BACKUP_DIR)
Directory is not found or not writable (CACHE_DIR)
そこで, 「semanage fcontext -l | grep wiki」で調べたら, mediawiki用に「httpd_sys_rw_content_t」が定義されていたので真似をした. 「httpd_sys_htaccess」は, ググってたら見っけた.

0 件のコメント:

コメントを投稿