SELinux(Security-Enhanced Linux)は、Linuxのセキュリティを強化するための仕組みです。
システム内のプロセスやファイルに対して「この人はここまでしか触れないよ」といったルールを設定するものです。
ディストリビューションによってはデフォルトで有効になっています。手元のCentOSではデフォルト有効でした。
活用シーン、用途
1. サーバーのセキュリティ強化
例えば、外部からの攻撃によりrootユーザの権限が奪われてしまったケースであっても、サーバー上のプロセスや重要データへのアクセス権限を必要なユーザのみに限定しておくことで、被害を最小限に抑えられます。
2. コンテナのセキュリティ
Dockerなどのコンテナ技術と組み合わせることで、コンテナ内のプロセスがホストシステムに悪さをしないようにできます。
3. アプリケーションの分離
SELinuxを使うと、異なるアプリケーション同士のアクセスを制限できるので、一つのアプリが他のアプリに影響を与えるのを防ぐ、といった用途でも利用できるようです。
状態確認、機能有効/無効方法について
1. SELinuxの状態確認
sestatus
このコマンドで、SELinuxが有効かどうかを確認できます。
下記は手元の環境の実行例ですが、有効/無効のほか各種パラメータを確認できます。
# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
2. SELinuxのモード変更
SELinuxには、enforcingモードとpermissiveモードがあります。
enforcingモードではポリシーが強制され、permissiveモードではポリシー違反がログに記録されるだけです。
sudo setenforce 1 # enforcingモードに設定
sudo setenforce 0 # permissiveモードに設定
アプリケーションへの影響
SELinuxが有効な場合、アプリケーションの動作に影響を与えることがあります。
具体的には、SELinuxのポリシーによってアプリケーションが必要とするリソースへのアクセスが制限されることにより、アプリケーションが正常に動作しない、といったことが起こり得るものになります。
このような問題を解決するためには、SELinuxのポリシーを適切に設定し、必要なアクセス権をアプリケーションに付与する必要があります。
場合によっては、SELinuxを一時的にpermissiveモードに設定して、どのアクセスがブロックされているかを確認し、その後ポリシーを調整する、といったチューニングが有効です。
今回の記事は以上になります。

