はじめに
今回は、Raspberry PiのRaspbianにSELinuxを導入します。
タイトルにあるように失敗したのですが、一応記録に残しておきます。
環境
今回使用した環境は以下の通りです。
その1
MacBook Pro (Retina, 13-inch, Late 2013)
macOS 10.14.2
VMware Fusion 11.0.2
Debian Stretch with Raspberry Pi Desktop 2018-11-26
その2
Raspberry Pi 3 Model B
Raspbian Stretch with desktop 2018-11-13
環境1は比較用です。特に断りが無い限り、両方の環境で操作を行っています。
SELinuxパッケージのインストール
Raspbianは、Debianを元にしたパッケージなので、ここを参考に必要なパッケージをインストールします。
環境その1
特に問題なくインストール完了。
pi@raspberry-vm1:~ $ sudo apt-get install selinux-basics selinux-policy-default auditd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
checkpolicy gawk libauparse0 libsigsegv2 m4 policycoreutils policycoreutils-dev policycoreutils-python-utils python3-audit python3-decorator python3-ipy python3-networkx python3-scipy python3-selinux python3-semanage python3-sepolgen python3-sepolicy python3-setools python3-yaml selinux-policy-dev selinux-utils setools
提案パッケージ:
audispd-plugins gawk-doc m4-doc python-networkx-doc python-scipy-doc logcheck syslog-summary setools-gui
以下のパッケージが新たにインストールされます:
auditd checkpolicy gawk libauparse0 libsigsegv2 m4 policycoreutils policycoreutils-dev policycoreutils-python-utils python3-audit python3-decorator python3-ipy python3-networkx python3-scipy python3-selinux python3-semanage python3-sepolgen python3-sepolicy python3-setools python3-yaml selinux-basics selinux-policy-default selinux-policy-dev selinux-utils setools
アップグレード: 0 個、新規インストール: 25 個、削除: 0 個、保留: 1 個。
15.3 MB のアーカイブを取得する必要があります。
この操作後に追加で 65.4 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
(省略)
pi@raspberry-vm1:~ $ sudo sestatus
SELinux status: disabled
環境その2
いろいろと警告やエラーが発生。特にauditdのインストールに失敗。
pi@raspberrypi1:~ $ sudo apt-get install selinux-basics selinux-policy-default auditd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
checkpolicy libauparse0 m4 policycoreutils policycoreutils-dev policycoreutils-python-utils python3-audit python3-decorator python3-ipy python3-networkx python3-scipy python3-selinux python3-semanage python3-sepolgen python3-sepolicy python3-setools python3-yaml selinux-policy-dev selinux-utils setools
提案パッケージ:
audispd-plugins m4-doc python-networkx-doc python-scipy-doc logcheck syslog-summary setools-gui
以下のパッケージが新たにインストールされます:
auditd checkpolicy libauparse0 m4 policycoreutils policycoreutils-dev policycoreutils-python-utils python3-audit python3-decorator python3-ipy python3-networkx python3-scipy python3-selinux python3-semanage python3-sepolgen python3-sepolicy python3-setools python3-yaml selinux-basics selinux-policy-default selinux-policy-dev selinux-utils setools
アップグレード: 0 個、新規インストール: 23 個、削除: 0 個、保留: 0 個。
14.1 MB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 59.2 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
(省略)
auditd (1:2.6.7-2) を設定しています ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Job for auditd.service failed because the control process exited with error code.
See "systemctl status auditd.service" and "journalctl -xe" for details.
invoke-rc.d: initscript auditd, action "start" failed.
● auditd.service - Security Auditing Service
Loaded: loaded (/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2018-12-21 06:59:09 JST; 35ms ago
Docs: man:auditd(8)
https://people.redhat.com/sgrubb/audit/
Process: 8294 ExecStartPost=/sbin/augenrules --load (code=exited, status=1/FAILURE)
Process: 8293 ExecStart=/sbin/auditd -n (code=exited, status=1/FAILURE)
Main PID: 8293 (code=exited, status=1/FAILURE)
12月 21 06:59:09 raspberrypi1 systemd[1]: Starting Security Auditing Service...
12月 21 06:59:09 raspberrypi1 augenrules[8294]: /sbin/augenrules: No change
12月 21 06:59:09 raspberrypi1 auditctl[8305]: Error - audit support not in kernel
12月 21 06:59:09 raspberrypi1 systemd[1]: auditd.service: Main process exited, code=exited, s…ILURE
12月 21 06:59:09 raspberrypi1 systemd[1]: Failed to start Security Auditing Service.
12月 21 06:59:09 raspberrypi1 systemd[1]: auditd.service: Unit entered failed state.
12月 21 06:59:09 raspberrypi1 systemd[1]: auditd.service: Failed with result 'exit-code'.
Hint: Some lines were ellipsized, use -l to show in full.
dpkg: パッケージ auditd の処理中にエラーが発生しました (--configure):
サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
(省略)
policycoreutils (2.6-3) を設定しています ...
selinux-autorelabel-mark.service is a disabled or a static unit, not starting it.
(省略)
selinux-policy-default (2:2.20161023.1-9) を設定しています ...
Updating selinux default policy (this step might take a moment)...libsemanage.semanage_direct_install_info: abrt module will be disabled after install due to default enabled status.
libsemanage.semanage_direct_install_info: certwatch module will be disabled after install due to default enabled status.
(以下同様&省略)
処理中にエラーが発生しました:
auditd
E: Sub-process /usr/bin/dpkg returned an error code (1)
pi@raspberrypi1:~ $ sudo sestatus
SELinux status: disabled
SELinuxの有効化
とりあえず続けます。
環境その1
selinux-activateコマンドを実行して、指示通りOSを再起動するだけです。
/.autorelabelファイルが作成されているので、起動時にファイルシステムの再ラベル付けが行われます。
pi@raspberry-vm1:~ $ sudo selinux-activate
Activating SE Linux
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Linux イメージを見つけました: /boot/vmlinuz-4.9.0-8-amd64
Found initrd image: /boot/initrd.img-4.9.0-8-amd64
完了
SE Linux is activated. You may need to reboot now.
pi@raspberry-vm1:~ $ ls -la /.autorelabel
-rw-r--r-- 1 root root 0 12月 21 07:15 /.autorelabel
pi@raspberry-vm1:~ $ sudo shutdown -r now
pi@raspberry-vm1:~ $ 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
Max kernel policy version: 30
環境その2
どうやら、RaspbianのKernelにSELinuxが組み込まれていないのが原因のようです。
解決するには、Kernelの再ビルドが必要なため、今回はここまでです。
参考
The Debian Administrator's Handbook
14.5. Introduction to SELinux