Linuxを利用している方なら、見たことのある「SELinux」です。
セキュリティ向上のためのものですが、開発環境を作る際には煩わしかったりするため、気にせずOFFなんてことも多いと思います。
SELinuxとは
引用になりますが・・・
SELinux (Security-Enhanced Linux) とは、システムにアクセス可能なユーザーをより詳細に制御できるようにする、Linux® システム 用のセキュリティ・アーキテクチャです。もともとは、Linux Security Modules (LSM) を使用した Linux カーネルへの一連のパッチとして、アメリカ国家安全保障局 (NSA) によって開発されました。
https://www.redhat.com/ja/topics/linux/what-is-selinux
何かよくわからないですが、ファイルへ簡単にはアクセスできないようにする仕組みの様です。
そのため、設定がちゃんとされていない場合、WEBサーバ(Apacheなど)でアクセス時に403エラーが発生するようです。
まずは確認から
現在のSELinuxの設定状態を確認してみましょう。
getenforce
実行すると、以下の3つのうちのどれか、現在のSELinuxの設定状態が表示されます。
- enforcing
SELinuxが有効(アクセス制限も有効) - permissive
SELinuxが有効(アクセス制限は行わず警告) - disabled
SELinuxが無効
よくあるOFF設定について
SELinuxを無効にしたい場合には、以下のコマンドを実行します。
setenforce 0
実行することで、permissiveとなり一時的にファイルへのアクセス制限が解除された状態となります。
ただし、再起動をした場合などには、設定が戻ってしまうためenforcing、有効な状態となってしまいます。
一時的にOFFにしたけど戻したい
あんまりそんな状況はないのかもしれませんが、以下のコマンドで可能です。
setenforce 1
よくあるずーっとOFF設定について
CentOS7では、以下のファイルを編集することで、再起動した場合にもSELinuxを無効にした状態とすることが可能です。
/etc/selinux/config
SELINUX=enforcing
設定した上で、Apacheを利用したい
せっかく用意されたツールを使わないのは勿体ないです。
ちゃんと設定して使えるようにしましょう。
とは言っても、SELinux側で何かをする必要はありません。
CentOS7でApacheをインストールしている場合、ドキュメントルートは「/var/www/html」になっているはずです。
※こちらの場合を想定し、設定を行っていきます。
上記、ドキュメントルートのディレクトリについて、SELinux コンテキストを確認してみます。
SELinux コンテキストを確認するには、以下のコマンドになります。
ls -Z
実行すると、以下のようなリストが表示されます。
[root@localhost www]# ls -Z drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
通常、「ls」した場合よりも、表示される項目が増えているのが確認できると思います。
SELinux コンテキストは、「sysytem_u…..」の部分となり「:」で区切られた 4 つの項目から構成されています。
それぞれ、ユーザー、ロール、タイプ、機密ラベルとなります。
では、実際にSELinux コンテキストの内容を正しい状態にしていきます。
・・・と言っても、1ファイルずつやるのは骨が折れるので、以下のコマンドで一括で実施します。
restorecon /var/www/html
これにより、SELinux コンテキストが正しい状態となり、SELinuxが有効な状態でもApache経由(外部からのアクセス)でファイルへのアクセスが可能となります。