sudo apt-get install nginxでインストールしたnginxのディレクトリ及びファイルのディレクトリは、
ディレクトリのファイルと所有者、グループがrootアカウント及びrootグループに設定されます。
前頁で説明したドキュメントルートのように他のディレクトリ・ファイルの所有者・グループ・パーミッションを変更します。
nginxの設定ファイル格納先ディレクトリの所有者・権限・パーミッションを変更します。
nginxの設定を許可する対象は、nginxグループとします。本書では、ユーザアカウントinfra01にnginxグループを付与しています。
/etc/nginxのパーミッションを確認する
$ cd /etc
$ ls -la | grep nginx
drwxr-xr-x 6 root root 4096 5月 19 19:10 nginx
/etc/nginxのパーミッションを確認する
$ cd /etc
$ sudo systemctl stop nginx
$ chown -R nginx:nginx nginx
$ find nginx -type d -print | xargs sudo chmod 770
$ find nginx -type f -print | xargs sudo chmod 660
$ sudo systemctl start nginx
ただし、上記000だと色々実害がでてきます。cd,grep,findにもsudoが必要になります。
重要なのは、nginxグループに何処まで許可をするかです。770は、nginxグループに全ての操作を許可しています。
誤操作防止のために運用で変更できないようにするには、ディレクトリは550、ファイルは440で良いと思います。
書込み処理ができなくなるため設定変更時には、sudoによる操作や作業前にsudo chmodで権限の変更を手順とする設計です。
/var/log/nginxディレクトリは、nginxのアクセスログ(access.log)及び実行ログ(error.log)を保管するディレクトリです。
ログファイルを操作するプロセスは以下となります。
1.masterプロセスは、sudo systemctl strat nginxとサービスから起動していればrootアカウントプロセスで実行されるので、 ログファイルの権限は何を設定されても実行できます。 2.workerプロセスは、nginxアカウントのため、ファイルの書込み、読込みの権限が必要です。 3.ログローテションは、/var/logrotate.d/nginxファイルにローテーション時に作成するパーミッション、所有者、グループを定義しています。
/var/logrotate.d/nginxファイル
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
8行目の「create 640 nginx adm」がログローテション後に新しく作成するログファイルの権限です。
この所有者:nginx グループ:adm パーミッション:640は、理に適っているので/var/log/nginxに適用します。
/etc/nginxのパーミッションを確認する
$ cd /var/log
$ sudo systemctl stop nginx
$ sudo chown -R nginx:adm nginx
$ find nginx -type d -print | xargs sudo chmod 750
$ find nginx -type f -print | xargs sudo chmod 640
$ sudo systemctl start nginx
ログファイルの閲覧は、admグループのみ(作業用ユーザinfra01には付与しています)が閲覧可能となります。
ログファイルはwebサーバの証跡なので、前記3つのプロセス以外からは変更不可能とします。
/usr/sbin/nginxファイルは、nginxのバイナリー本体(コマンド)です。
sudo apt-get install nginxでインストールしたデフォルトのパーミッションは以下の通りです。
/usr/sbin/nginxのパーミッションを確認する
$ cd /usr/sbin
$ ls -la | grep nginx
$ -rwxr-xr-x 1 root root 1255432 4月 12 22:05 nginx
$ -rwxr-xr-x 1 root root 1390600 4月 12 22:05 nginx-debug
ここで2つのバイナリーファイルのパーミッションをみて一番問題な点は何でしょうか?
正解は、パーミッションがその他にも実行権限が付与されている点です。
nginxのサービスの実行は、nginxグループのみ許可するポリシーを私は推奨します。
/usr/sbin/nginxのパーミッションを変更する
$ cd /usr/sbin
$ sudo systemctl stop nginx
$ sudo chown -R nginx:nginx nginx
$ sudo chown -R nginx:nginx nginx-debug
$ sudo chmod 750 nginx
$ sudo chmod 750 nginx-debug
$ sudo systemctl start nginx
nginxのproxy機能などを有効にした場合のキャッシュファイルなどを格納するディレクトリです。
他のディレクトリと同様にworkerプロセスのnginxアカウントに対して全権限を付与し、nginxグループに読取りと実行権限を付与します。
/var/chche/nginxのパーミッションを変更する
$ cd /var/chache
$ sudo systemctl stop nginx
$ sudo chown -R nginx:nginx nginx
$ sudo find nginx -type d -print | xargs sudo chmod 750
$ sudo find nginx -type f -print | xargs sudo chmod 640
$ sudo systemctl start nginx
※.「sudo find nginx -type f -print | xargs sudo chmod 640」コマンドは、proxy機能を有効にしていない場合には、
ファイルが存在しないため、「chmod: `640' の後にオペランドがありません」が出力される可能性があります。
nginxのモジュール別(proxy,fastcgiなど)の作業用ディレクトリです。
nginxのworkerプロセスnginxアカウントに対する権限を付与します。
/var/lib/nginxのパーミッションを変更する
$ cd /var/lib
$ sudo systemctl stop nginx
$ sudo chown -R nginx:nginx nginx
$ sudo find nginx -type d -print | xargs sudo chmod 750
$ sudo find nginx -type f -print | xargs sudo chmod 640
$ sudo systemctl start nginx
※.「sudo find nginx -type f -print | xargs sudo chmod 640」コマンドは、各種モジュールを有効にしていない場合には、
ファイルが存在しないため、「chmod: `640' の後にオペランドがありません」が出力される可能性があります。
nginxの動的モジュールの格納先ディレクトリです。
コンパイルを利用して動的モジュールを利用した場合にモジュールを格納します。
/usr/lib/nginxのパーミッションを変更する
$ cd /usr/lib
$ sudo systemctl stop nginx
$ sudo chown -R nginx:nginx nginx
$ sudo find nginx -type d -print | xargs sudo chmod 750
$ sudo find nginx -type f -print | xargs sudo chmod 640
$ sudo systemctl start nginx
※.「sudo find nginx -type f -print | xargs sudo chmod 640」コマンドは、動的モジュールをインストールしていない場合には、
ファイルが存在しないため、「chmod: `640' の後にオペランドがありません」が出力される可能性があります。