[CentOS7][Nginx] SELinuxを設定しホームディレクトリ配下のWebコンテンツを公開を許可
Nginxにホームディレクトリ配下に設置したsocketを接続させようとしたところ、SELinuxの都合で503になった。
(今までもホームディレクトリ配下にpublic_htmlを設置して同様のエラーになったのは経験済み。)
[amazonjs asin="4883379426″ locale="JP" title="小さな会社の新米サーバー/インフラ担当者のためのLinuxの常識"]
今まではSELinuxはOSインストール時に大体オフにしていたが、CentOS7を
使っていてオフにするのもなぁとなったので、オンにしたままどうにか
できないかと思い探したところ、ここを発見。
SELinuxでNginx用のPolicy Moduleを作成すればいいとのこと。
Nginxのエラーログ
Nginxのerror_logには以下のログが残されている。
[shell title="Nginxのeror_log"]
2015/05/21 23:39:01 [crit] 23986#23986: *90 connect() to
unix:/home/centos/app/var/sock/bottle_jinja2.sock failed
(13: Permission denied) while connecting to upstream,
client: *.*.*.*, server: localhost, request: "GET /
HTTP/1.1", upstream:
"uwsgi://unix:/home/centos/app/var/sock/bottle_jinja2.sock:"
, host: "********************"
[/shell]
selinux関連パッケージをインストール
[shell]
yum install -y policycoreutils-{python,devel}
[/shell]
許可する必要のあるポリシー一覧を取得する
許可する必要のあるポリシー一覧を取得したり、実際にポリシーを作成するのには、「audit2allow」コマンドを使用する。
ポリシー一覧を取得し、「nginx.te」ファイルに保存しておく。
[shell title="ポリシー一覧の取得"]
# cd ~
# mkdir selinux
# cd selinux
# grep nginx /var/log/audit/audit.log| audit2allow -m nginx > nginx.te
# cat nginx.te
module nginx 1.0;
require {
type unconfined_t;
type httpd_t;
type user_home_t;
class sock_file write;
class unix_stream_socket connectto;
}
#============= httpd_t ==============
allow httpd_t unconfined_t:unix_stream_socket connectto;
allow httpd_t user_home_t:sock_file write;
[/shell]
ポリシーを作成する
一度、SELinuxをオフにする。
[shell]
# setenforce 0
[/shell]
以下の一行目でポリシー作成に必要なファイル「nginx.pp」を作成し、2行目で作成する。
[shell title="ポリシーを作成"]
# cd ~/selinux
# grep nginx /var/log/audit/audit.log| audit2allow -M nginx
******************** IMPORTANT ***********************
To make this policy package active, execute:
# semodule -i nginx.pp
# semodule -i nginx.pp
[/shell]
最後にSELinuxをオンにする。
[shell]
# setenforce 1
[/shell]
上記作業でアクセスが可能になった。
ディスカッション
コメント一覧
まだ、コメントがありません