CentOSにdjangoを入れるには...

CentOSでは、Apacheのドキュメントルート(/var/www/...)の外、例えばユーザディレクトリにデプロイしようとすると、パーミッションで引っかかりやすい。これに対処するための覚書を以下に記す。

1. UNIXのpermissionの変更

デプロイ先のユーザ・グループ名をapacheにする

$ chown -R apache:apache target_dir

ユーザディレクトリの根っこからパーミッションを緩くすることも考えられるが、これは非推奨。

2. SELinuxの設定を変更

アクセス対象ディレクトリに対して、

$ chcon -R -t httpd_sys_content_t target_dir

対象フォルダーのセキュリティーコンテキストを確認するには、

$ ls -ldZ target_dir

SELinuxを一時的に無効にして、監視を行いたい場合(permissive)は、

$ setenforce 0

(getenforceで現状の確認。setenforce 1でSELinuxを有効にする)

そして、セキュリティーで引っかかっていたアクセスを行い、

$ tail /var/log/audit/audit.log

でログを確認。あるいは、

$ ausearch -m avc

の方が見やすいかも知れない。

そしてエラーを出している行を探して、

grep "type=AVC.*denied.*httpd" /var/log/audit/audit.log | tail -1 | audit2allow -m django_SELinux

のように、セキュリティーを適切に解除するための、設定ファイル内容およびコマンドを出力する。

これを元にセキュリティーを登録するには、

(対象行の抽出コマンド) | audit2allow -M django_SELinux

これでdjango_SELinux.ppというファイルが生成されるので、

semodule -i django_SELinux.pp

ちなみに、djangoの場合は、以下の2つのコマンドが必要となりそうだが、どうだろうか。

$ setsebool httpd_execmem on
$ setsebool httpd_tmp_exec on

setseboolに-Pオプションを付けると、再起動しても設定内容が無効にならないようだ。

起動時のSELinuxの設定は/etc/selinux/configに書かれている。現在のSELinuxの主な状態は、sestatusコマンドによって確認可能。

パスに応じて設定されているべき SELinux コンテキストの定義があるので、restorecon コマンドでこれに合わせることができる。