打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux 下关闭 SELinux?

这个问题……答案和“为什么让新手退出vim时他们要敲出一长串随机数”是一样一样的——笨呗!不懂呗!业余呗!

其实SELinux是非常好用、非常人性化的;但如果你对它没有丝毫了解……那你就敲随机数去吧。

SELinux是美国国家安全局为Linux开发的一套安全增强套件;它的作用是审核每一个程序的行为,有任何异常之处它都会立即警告用户,从而避免我们被恶意软件、木马、黑客等侵害。

它的工作原理类似防火墙,就是设置一系列的规则,这些规则可以精细到每个软件。

举例来说,你在Linux上面装了个即时通讯软件,比如叫OO;但这个软件不是个好鸟,背地里偷偷摸摸干坏事——这要在Windows下,除非你是专业人员,否则根本不可能察觉到丝毫异常(这就是Windows上面木马、病毒、流氓软件泛滥成灾的根本原因之一)。

但在Linux下,SELinux会立即发现并阻止它;然后跳出来给你打小报告——你安装的那个OO,它只是个聊天工具,但它却去翻你的文档!我按住它了,你快来看

类似的,你在Linux上装了个购物软件并夕夕,它偷偷摸摸的自我提权、拿了你的root权限然后全盘扫描……这在Windows、Android下面,你都蒙在鼓里。

但在Linux下,SELinux也会第一时间跳出来,按住它,阻止它——你安装的那个并夕夕,它居然想要拿root权限、翻看你的文档!我按住它了,你快来看

这个报告大概长这个样子:

Sep 22 13:35:24 server setroubleshoot[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module. For complete SELinux messages run: sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b
Sep 22 13:35:24 server platform-python[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module.#012#012*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************#012#012If you want to allow daemons to dump core#012Then you must tell SELinux about this by enabling the 'daemons_dump_core' boolean.#012#012Do#012setsebool -P daemons_dump_core 1#012#012*****  Plugin catchall (11.6 confidence) suggests   **************************#012#012If you believe that rhsmcertd-worke should be allowed read access on the virt.module file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke#012# semodule -X 300 -i my-rhsmcertdworke.pp#012

Sep 22 13:35:24 server setroubleshoot[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module. For complete SELinux messages run: sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b Sep 22 13:35:24 server platform-python[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module.#012#012*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************#012#012If you want to allow daemons to dump core#012Then you must tell SELinux about this by enabling the 'daemons_dump_core' boolean.#012#012Do#012setsebool -P daemons_dump_core 1#012#012*****  Plugin catchall (11.6 confidence) suggests   **************************#012#012If you believe that rhsmcertd-worke should be allowed read access on the virt.module file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke#012# semodule -X 300 -i my-rhsmcertdworke.pp#012

第一条日志意思是,SELinux阻止了rhsmcertd-worke这个程序去读取virt.module。

为什么会阻止它呢?

它告诉你了,执行这条命令:

sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b

你就能看到详细信息。

第二条日志是一个友好提示——这就是我说SELinux非常用户友好、非常人性化的原因。

它的意思是,当你看完详细信息、知道rhsmcertd-worke是做什么的、为什么要读取virt.module之后,如果你觉得这个行为是正常的,那么请向开源社区提交bug报告;或者,如果你希望添加一条策略、允许rhsmcertd-worke读取文件,可以执行这两条命令:

ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke
semodule -X 300 -i my-rhsmcertdworke.pp

最后这个提示在上面引用的SELinux报警日志的黑体部分。

如你所见,当你遭遇SELinux警告时,你可以采取不同的措施。

当然,SELinux disable是最简单、最彻底,但也最小白的做法——要知道,Linux不需要什么管家什么杀毒软件,因为SELinux本身就是最专业的安全软件。你把它关掉,那就和裸奔没啥差别了。

稍微精细一点的,你可以像我上面的举例一样,看到SELinux警告,复制日志里面附带的命令然后执行(需要root权限),它以后就不会再阻止这个软件的类似行为了。

不过,触发SELinux往往是你有严重的安全违规行为。比如,你搞了个www网站,却不知道怎么正确设置它。于是你建立了一个目录叫/web,然后把网站内容都放进去——然后,为了解决各种无法运行、权限不足问题,你干脆给它设置为任何人都能查看、运行、修改(chmod 777 /web就是爽利,哈哈),甚至切换到root账号运行它……

这是赤裸裸的作死行为。因为这是web服务,任何一个脚本小子都可能抓住你的漏洞、直接得到root权限——那么,SELinux当然就应该严厉警告你,对吧。

可想而知,如果你真的照我前面教的、一行行复制SELinux提供的授权命令解除了警告……

你知道的越多,你可以采取的措施就越精致、越合理。

事实上,我做了近十年Linux开发了,桌面、server、www、pad,全都玩过;一开始当然也经常一头撞在SELinux身上;但很快的,我就再也看不到哪怕一个SELinux警告了。

很简单,SELinux是一个非常好的老师;我的任何可能引起安全问题的错误举动,它都会严厉警告我;然后呢,我就到处查资料、学习理解Linux的权限管理规则以及web业务等可能招致攻击的业务常用的安全策略——这玩意儿还经常升级,两年前的安全做法在两年后就可能因为发现漏洞而变得不推荐、甚至招惹到SELinux警告。

但,只要你真的明白了来龙去脉,你就可以轻松应对它——不是傻呵呵的禁止SELinux警告,而是从根本上堵上漏洞、采用更安全的权限方案。

举例来说,前面提到过,你要在Linux上提供一个网站服务、招惹了SELinux警告,那么不要敲命令关闭它,而是去查找更好、更安全的配置策略。

比如,把网站放在/var/www目录,专门建立一个www组的www用户来提供web服务;这个www用户禁止登录、连执行find /命令的权限都没有……

……其实,你压根不需要自己去做这些事。这都是Linux内置的。把你的网站放进它预置给你的/var/www目录就行了。

类似的,你的日志输出也要用合适的权限写入/var/log;有时候日志包含敏感信息,那么你可能需要建立一个/var/log/you_app目录,权限设置为www可写,但禁止root之外的任何人读取。

事实上,SELinux提供的仅仅是一组相当基本的安全策略。因为它只是个程序,绝不可能比我们更了解我们的设计目标;除非你有严重违规的危险操作,否则它是不会跳出来的。

而且,俺可能有点安全强迫症;俺安装的组件只从发行版自己的、带数字签名的标准软件仓库安装,哪怕它陈旧一些也无所谓;俺设计的程序会主动放弃任何不该有的权限、尽可能以“能够完成任务的最低特权级运行”:于是,俺就离SELinux越来越远、越来越看不见它的警告了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Open vSwitch安装手册
嵌入式驱动入门
mmap
Centos 6.4 virt-who启动失败:No module named rhsm.connection 解决方案
Linux 关闭 selinux
了解linux系统目录,proc,root,sbin,selinux,srv!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服