新サーバーにApacheをいれて特定のファイルにアクセスしようとしたところ、
以下のようなエラーがでてしまいました。
1 |
[core:error] [pid 3989] (13)Permission denied: [client 192.168.1.29:52190] AH00035: access to /cgi-bin/hoge/index.cgi denied (filesystem path '/var/www/cgi-bin/hoge/index.cgi') because search permissions are missing on a component of the path |
ただPermissionは適切に設定しているんですよね・・・
調べてみるとSELinuxが稼働しており、ファイルにアクセスできないとのこと。
聞いたことはあったけどよくは知らなかったな・・・ということでこれを機に調べてみることにしました。
Contents
SELinuxとは
CentOSではSeLinuxというセキュリティを向上させるための拡張機能です。
一般的にLinuxではパーミッションによるアクセス権はユーザーやグループごとに、ファイルやディレクトリの書き込み、読み込みを制御しますが、SELinuxを使うことによりプロセスやユーザーごとにファイルなどのきめ細かいアクセス制限が可能になります。
一時的にSELinuxを無効にするには
1 |
setenforce 0 |
と入力すればOKです。ただしこの設定はOSを再起動したりすると設定ファイルに書かれている状態に戻ってしまいます。
OSを再起動してもSELinuxを無効にしたりするためには
1 2 3 4 5 6 |
vim /etc/selinux/config #下記のような状態にすればOKです。 SELINUX=enforcing ↓ SELINUX=disabled |
MySQLの接続エラー
ファイルだけでなく、DBのアクセスなどができなくなることもあるようです。※サーバー側ではなくクライアント側です。
パスワード、ユーザー名が間違っていないのにPermission denied・・というエラーがでて迷いましたが、SELinuxが原因でした。
SELinuxをオフにしてもよいですが、特定の機能だけをONにすることもできます。
1 2 3 4 5 |
getsebool httpd_can_network_connect httpd_can_network_connect --> off #これがoffになっているとエラーが出ます。この部分だけON #にすることも可能です。 setsebool -P httpd_can_network_connect 1 |
参考文献
Apache経由でのMysql接続時に「[2002]Permission denied」というエラーが起きてしまう場合の対処法
[…] 単純なPermisson以外にもSELinuxの設定が不適切という可能性もありえます。その場合はこちら […]