[CentOS7][Nginx] SELinuxを設定しホームディレクトリ配下のWebコンテンツを公開を許可

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

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]

上記作業でアクセスが可能になった。

Related posts

コメントを残す