目次
SElinuxとは?
SELinux (Security-Enhanced Linux ) は簡単に言うとファイルに対するアクセス制御を行う機能です。SElinuxによる制御はカーネルレベルで提供されます。SElinuxが原因で接続できないなどのトラブルが起こることからよくわからないまま無効にしている場合も多いと思います。
任意アクセス制限(DAC)との違い
SElinuxが無くてもファイルに対するアクセス制御はLinuxに存在しています。一般ユーザが/rootや/etcなどにアクセスしようとすると権限がないからアクセスできないという表示が出てきた経験はありませんか?
このようにLinuxにはユーザや所属するグループに対して任意アクセス制御(DAC)が効いています。
左側にあるdrwxなどの英語は所有者-グループ-それ以外のユーザに対する権限を記載したファイルのモードと呼ばれるものです。その隣にはユーザとグループが記載されています。rootが作成したファイルで所有者にしか読み書きの権限が与えらえていなければ一般ユーザのpiは読み書きのためにファイルにアクセスしようとしても権限がないと拒否されます。
DACの問題点はユーザーにアクセス制御の設定権限が委ねられていて、さらにrootユーザはすべてのファイルにアクセス可能であるという点です。
SElinuxによる強制アクセス制御(MAC)
SElinuxのもとではポリシーという設定でアクセス制御を管理しています。SElinuxのポリシーはユーザによって変更できない別のユーザーによって変更できないので安全性が高いです。
SElinuxはセキリュティ機能の一つであるため、無効化することでセキリュティが低下する可能性がありますが、SElinuxは複雑なため適切に設定することができない場合は無効化したほうが良いかもしません(よくわからない機能をわからないまま使うべきではない)
SELinuxはホワイトリスト形式といって基本的に禁止されているアクセスを許可するようにポリシーの設定を加えていきます。ポリシー設定はシステム管理者(root)のみが設定変更可能です。DACによる管理ではユーザーごとでアクセス制御の設定が可能ですが、SELinuxで設定すればユーザーの設定に関係なくアクセス制御が可能になります。ユーザーが増えるとアクセス制御の管理が難しくなりますが、SELinuxを使えば一元管理できます。
SELinuxにはroot権限を最小化するための仕組みも備わっています。rootが乗っ取られると本当になんでもできてしまうので、被害を少なくするための対策です。一つがTE(Type Enforcement)です。TEではプロセスごとにアクセス制限をかける機能やユーザーごとにアクセス制限をかけるRBACがあります。
SELinuxの制御モード
SELinuxの3つのモード、SElinuxにはdisable, enforcing, permissiveの3つのモードがあります。
- disable:無効状態
- permissive:アクセスは許可・ログ
- enable:アクセスは拒否・ログ
それぞれの設定でアクセス制御が異なります。disableは無効状態のことです。permissiveモードはポリシーに無いアクセスも許可されますが、ログに残ります。enableモードはポリシーにないアクセスは拒否されログに残ります。permissiveモードではSELinuxは有効ですがファイルアクセスの制御は行われないので、もしもpermissiveモードでアクセス制御の問題が出てきた場合はSELinuxが原因ではないです。
SELinuxの無効化、設定
SELinuxの設定方法を紹介します。
SELinux設定の確認コマンド
$ getenforce
enforcing
と出てきたら有効です。
SELinuxの無効化
SELinuxを無効化(disable)に変更する場合は設定ファイルの書き変えが必要です。
# vi /etc/selinux/config
SELINUX=enforcing→disabledに書き変えて再起動
これで無効化できます。
またpermissiveモードに変更するだけであれば、
# setenforce 0
とすることでpermissiveモードに変更できます(1の場合はenforcing)
ポリシーへの設定追加方法
ポリシーに設定を追加するには
- semanage
- setsebool
- chcon
- ausearch
- semodule
などのコマンドを使います。