Ubuntu DesktopでSELinuxを使う
はじめに
SELinux使っていますか...?Disabledにしていませんか...?
こんにちは!cl0wnです!TUTアドベントカレンダーの8日目です。よろしくおねがいします!
最近研究でUbuntu上でSELinuxを使うことがあったので、その際に得られた知見を共有しようと思います。
前提
ルートユーザーでログインできるようにしておきましょう。
一般ユーザーからsudoで昇格できるからといって安心しないでください。
設定ミスがあると一般ユーザーから昇格できなくなります。
SELinuxのインストール
インストールはこちらの記事が参考になりました。ありがとうございます。
$ sudo apt-get install -y selinux-basics selinux-policy-default selinux-policy-dev selinux-policy-src selinux-utils
$ sudo selinux-activate
$ sudo shutdown -r now
$ check-selinux-installation
$ sudo apt install -y auditd
ポリシーの追加
上のコマンド入力を終えると、SELinuxはPermissiveモードで動作するようになっているはずです。
このモードはポリシー違反が発生しても動作を拒否せずに、「ポリシー違反が発生したよ」ということを報告するだけのモードになっています。
- どのようなコンテキストのプロセスが
- どのコンテキストのオブジェクト(ファイルやネットワーク)にアクセスしようとして
- ポリシーがその操作をどうしたか
が、/var/log/audit/audit.log
に記録されます。
このファイルの内容を整形して表示してくれるのがausearchコマンドです。
このコマンドを使って、最近どのようなアクセス可否の判断がされたかを確認してみましょう。
$ sudo ausearch -m avc -ts recent
----
time->Wed Dec 8 15:06:10 2021
type=AVC msg=audit(1638943570.986:724): avc: denied { search } for pid=271 comm="systemd-journal" name="user" dev="tmpfs" ino=1201 scontext=system_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:user_runtime_root_t:s0 tclass=dir permissive=1
----
time->Wed Dec 8 15:06:10 2021
type=AVC msg=audit(1638943570.986:725): avc: denied { search } for pid=271 comm="systemd-journal" name="/" dev="tmpfs" ino=1 scontext=system_u:system_r:syslogd_t:s0 tcontext=unconfined_u:object_r:user_runtime_t:s0 tclass=dir permissive=1
----
time->Wed Dec 8 15:06:10 2021
type=AVC msg=audit(1638943570.986:726): avc: denied { search } for pid=271 comm="systemd-journal" name="systemd" dev="tmpfs" ino=9 scontext=system_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:user_runtime_t:s0 tclass=dir permissive=1
----
time->Wed Dec 8 15:06:10 2021
type=AVC msg=audit(1638943570.986:727): avc: denied { read } for pid=271 comm="systemd-journal" name="invocation:vte-spawn-440bfdce-96b7-482f-993a-4ed22e47d13d.scope" dev="tmpfs" ino=94 scontext=system_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:user_runtime_t:s0 tclass=lnk_file permissive=1
....
audit.logにはシステムのセキュリティに関する多種多様なメッセージが記録されます。その中で今回着目しているのは、誰がどのオブジェクトにアクセスして、アクセス可否はどうだったかという情報です。この情報はavc(アクセスベクターキャッシュ)と呼ばれています。
上の例だと、
-
systemd-journal
というコマンドを実行している最中に、 -
system_u:system_r:syslogd_t:s0
というコンテキストのプロセスが、 -
system_u:object_r:user_runtime_root_t:s0
というラベルがついているディレクトリにアクセスしようとして - ポリシー違反として拒否されます
- ただし、Permissiveモードで動作しているので動作の拒否は実際にはされませんでした
という読み方をします。
enforcingモードへの以降
さて、このままEnforcingモードに移行すると、再起動したときにデスクトップマネージャがポリシー違反となりログイン画面が表示されなくなります。したがって、Permissiveモードで記録された監査ログから動作を許可するポリシーを生成して、システムに読み込ませることにします。
以下のコマンドはルートで実行します。
$ audit2allow -a -M new_policy
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i new_policy.pp
$ semodule -i new_policy.pp
audit.log
の内容全て(-a)から、new_policyという名前で(-M new_policy
)ポリシーを作成しました。
モジュールがちゃんと読み込まれたか確認します。new_policy
が出力に含まれていればちゃんと読み込まれています。
$ semodule -l
...
new_policy
....
さて、ではEnforcingモードに入りましょう。
/etc/selinux/config
を編集します。
ここを
SELINUX=permissive
このように変更します。
SELINUX=enforcing
変更が終わりましたら再起動です。
再起動すると、デスクトップ環境のログイン画面がうまく表示されないかもしれません。そういうときはTTYを切り替えてrootとしてログインしましょう。Ctrl + Alt + F3とかでTTYを切り替えられます。
rootとしてログインできたら、先程と同様にaudit2allow
コマンドでポリシーを作成&ロードします。ポリシー名は同じでも別でも構いません。
動作確認&audit2allowを何回か繰り返すと、デスクトップ環境が使えるようになります。
参考
SELinuxを使う上でとても勉強になった記事を載せておきます。
正直自分の記事よりこちらを見ていただきたいです!!!
自分でSELinuxをちゃんと運用しようと思ったらどのようなことをすればいいのかイメージが付くようになります。
研究でも大変お世話になりました。この場を借りて感謝を申し上げます。
終わりに
SELinux使っていますか...?Disabledにしていませんか...?
私はDisabledにしています!
Author And Source
この問題について(Ubuntu DesktopでSELinuxを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/cl0wn/items/ffd1920be4752eeffb86著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .