在Ubuntu桌面上使用SELinux
首先
您是否正在使用SELinux?您是否已经将其禁用了呢?
こんにちは!cl0wnです!TUTアドベントカレンダーの8日目です。よろしくおねがいします!
最近我在研究中使用Ubuntu上的SELinux,因此想要分享一些在此过程中获得的经验。
前提 tí)
让root用户可以登录。
请不要因为可以通过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模式,重新启动时会导致桌面管理器违反策略,登录界面将无法显示。因此,我们决定根据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
....
好的,现在我们来进入强制模式。
我要修改/etc/selinux/config文件。
将以下内容用中文重新叙述,只需要提供一种选择:
这里
SELINUX=permissive
将如此更改。
SELINUX=enforcing
当更改完成后,请重新启动。
如果您重新启动,可能会出现桌面环境登录界面无法正确显示的情况。在这种情况下,请切换到TTY,并以root身份登录。您可以使用Ctrl + Alt + F3或类似的按键组合来切换TTY。
如果能够以root身份登录,我们可以使用audit2allow命令来创建并加载策略,方法与之前相同。策略的名称可以相同也可以不同,没有关系。
動作確認&audit2allowを何回か繰り返すと、デスクトップ環境が使えるようになります。
请提供更多上下文信息来帮助我正确地回答您的问题。
我会在这里分享一篇对使用SELinux非常有帮助的文章。
老实说,希望你看这篇文章而不是我的文章!!!
如果你打算自己运用SELinux,你将会明白应该做些什么。
在我的研究中,我也从中受益良多。在此借此机会表示感谢。
最后
您正在使用SELinux吗?您是否将其禁用了?
我是残疾人!