晴耕雨読

working in the fields on fine days and reading books on rainy days

Ubuntu 20.04でSELinuxを有効化する

Ubuntuには標準で AppArmor という SELinux に似たMACのアクセス制御システムがあります。 AppArmor と SELinux はどちらもプロセスの動作を制御する仕組みです。 AppArmor の方が簡単で導入しやすいですが、本記事ではより広範囲を守れる SELinux を導入する方法を説明します。

今回の導入環境は Ubuntu 20.04 です。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"

まず、SELinux を入れる前に AppArmor を無効化します。AppArmor と SELinux の競合を避けるためです。

$ sudo systemctl stop apparmor
$ sudo apt remove apparmor

SELinux に必要なパッケージと、auditd サービスをインストールします。 終わったら、SELinux が正しくインストールされたことを確認するために sestatus コマンドを実行します。

$ sudo apt-get install selinux-utils selinux-basics auditd audispd-plugins
$ sudo sestatus
SELinux status:   disabled

次に、SELinuxを有効化するためのコマンド selinux-activate を実行します。

$ sudo selinux-activate
Activating SE Linux
Sourcing file '/etc/default/grub'
Sourcing file '/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-5.11.0-37-generic
Found initrd image: /boot/initrd.img-5.11.0-37-generic
Linux イメージを見つけました: /boot/vmlinuz-5.11.0-36-generic
Found initrd image: /boot/initrd.img-5.11.0-36-generic
Linux イメージを見つけました: /boot/vmlinuz-5.8.0-48-generic
Found initrd image: /boot/initrd.img-5.8.0-48-generic
Adding boot menu entry for UEFI Firmware Settings
完了
SE Linux is activated.  You may need to reboot now.

完了したら、サーバを再起動します。

$ sudo reboot

再起動後に再度 sestatus コマンドを実行して、enabled になっていれば SELinux が有効になっています。 デフォルトでは permissive モードで動いているので、有効化されていますがアクセス拒否はしないモードで動いている点に注意です。

$ sudo sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             default
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     requested (insecure)
Max kernel policy version:      33

まず、sudo setenforce 1 で問題なく動作することを確認したら、/etc/seinux/config を編集して SELINUX=enforcing に書き換えて再起動すると、強制モード (Enforcing) になります。

以上です。

参考文献