openSUSE 没有编译 Yama

所以我按照网上的教程自己编译,然后我发现编译内核需要那么那么那么长的时间。
所以我想问一下:
我已经编译好了,下次更新内核时是不是还要重新编译?
如果还要重新编译,可不可以只编译 Yama?

openSUSE 为什么不编译 Yama 呢?

第一,是的,只要你想更新内核就得重新编译。
第二,不可以,因为它是内置的。

而且还很难通过 OBS 这种自动化编译技术来省力,原因见下。

为什么不编译 Yama :joy:

因为 Yama 并没有什么普遍适应性啊,只有 chrome os 和 ubuntu 用…Ubuntu 现在可能也已经换成 apparmor 了。于是,前车之鉴,Ubuntu 都不用了跟 openSUSE 弄一样的了,为什么还要尝试?(我对 Ubuntu 了解的不多,情况也许是正好反过来的,我只知道 Ubuntu 用过 apparmor,但是用 yama 是在之前还是之后没有考证)

你要了解 Yama 这种东西叫 LSM,内核安全框架,说到 LSM 话就多了,著名的 LSM 是 Redhat 家的 Selinux 和 SUSE 家的 Apparmor。完整的可以看这个论文:

我没仔细看,直接猜想一下,应该是同质的东西没必要开多个或者彼此之间要控制的对象都一致所以开了这个就很难再开那个?

于是理由就很简单了,openSUSE 在 apparmor 和 yama 之间,肯定是选亲儿子了呗 :nerd_face:

至于为什么很难通过 OBS 自动化,因为我们默认的内核已经开了 apparmor 了 :joy:

简单说如果你 branch 了 openSUSE 的默认内核直接去开 Yama,编译也许能过但运行可能出问题。你想用默认内核得自己去把 apparmor 的部分关掉。:joy: 但是你要知道 openSUSE 所有跟安全有关的支持都是围绕着 apparmor 来做的,几十年下来积累有多少补丁和修改…怎么关

于是只能用 vanilla 内核,就是上游内核,这样的话 openSUSE 的专有补丁又没了(大公司和发行版的专有内核补丁还是挺好的),其它应用万一因为没补丁出问题了 debug 起来更麻烦,因为所有用 openSUSE 的开发者都想不到你没那个补丁。

而且这还只是第一步。我试过在 openSUSE 上搞 Selinux,内核没问题(openSUSE 内核支持 Selinux 和 Apparmor),但是生态惯性太大了。openSUSE 只有基础包,就是用来调试规则那些东西,但是上游那些 vanilla 的规则全不敢用,因为全是针对 CentOS 的,发行版之间差别还是挺大的,Fedora 可以 openSUSE 不一定,Selinux 发展这么多年积累下来的规则我全部要自己 review,最关键的是 Selinux 搞不对开不开机 :joy:

所以我最后还是不搞 Selinux 了。同样你的 yama 肯定第二差也是 Ubuntu 向的,咱们社区其它人第一句肯定是问为啥不用 apparmor。有些因为 openSUSE 不是 Ubuntu 导致的问题你可能只好自己去体会 :nerd_face:

1赞

感谢解答!
不过 Yama 好像只是一个简单的用来限制 ptrace 的模块,所以好像可以和 Apparmor 或 Selinux 叠加(同时运行),Ubuntu 同时编译启用 Yama 和 Apparmor,Fedora 也是同时编译启用 Yama 和 Selinux,所以我才奇怪openSUSE 没有编译 Yama。

似乎 yama 本身并不安全。

我下午的时候搜了一下,我们 openSUSE 12.2 的时候把 yama 作为一个 feature 在 release notes 里面介绍过。

然后到了 2014 年,我们的 kernel mailinglist 又有了这个 post:

https://lists.opensuse.org/opensuse-kernel/2014-09/msg00012.html

大意就是 yama 是玩票性质的,本身没什么用。

我在网上搜 yama 的时候,又看到了这个 reddit 指向的 debian bug report,说 yama 不安全,还会与 gdb 冲突。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=712740

我还搜过 openSUSE 默认内核的 changelog,里面没有 yama 的添加移除原因,我觉得是维护者加上的时候没觉得有什么新鲜的,出了问题又偷偷去掉了,具体原因你可以发邮件问问 kernel mailing list。我觉得是因为 Debian 的那个 bug report。

好的,谢谢!

最近想试用 TOMOYO (和 Selinux 一样 openSUSE 内核默认已经编译好了),所以我想问一下:
启用 TOMOYO 对 openSUSE 的补丁或其他安全应该没有太大的影响吧?
启用 TOMOYO 后是不是应该到 YaST 的 AppArmor 配置 中关掉 AppArmor?