目录
1 SELinux 的作用
2 LInux对权限的管理
2.1 自主访问控制(DAC)
2.2 强制访问控制(MAC)
3 SELinux可能引起的问题
举例说明:
4 SELinux 操作
SELinux是有关Linux安全的问题,SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块,但是绝大多数 Linux系统管理员嫌麻烦都会选择关闭它(因为会时常回忆起各种设计权限的问题) (为何关闭SELinux:https://www.zhihu.com/question/20559538?sort=created)
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。 设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕? SELinux 就是来解决这个问题的。
在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。 只要访问这个资源的进程符合以上的条件就可以被访问。 而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。
这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。
即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。
这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。
而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式
以上两章出处:https://blog.csdn.net/yanjun821126/article/details/80828908
因为SELinux的特性,极有可能引起在文件有可读写的权限下,仍然无法对改文件读写的情况出现
本人在将kvm的虚拟机开启时,出现了一下错误:
文本形式:
[root@kvm-b2-f6-host07 kvm158]# virsh start ubunt-158 error: Failed to start domain ubunt-158 error: internal error: qemu unexpectedly closed the monitor: 2020-09-03T16:11:47.975724Z qemu-kvm: -drive file=/data/kvm/kvm158/kvm158.qcow2,format=qcow2,if=none,id=drive-ide0-0-0: could not open disk image /data/kvm/kvm158/kvm158.qcow2: Could not open '/data/kvm/kvm158/kvm158.qcow2': Permission denied
kvm158.qcow2 是 ubunt-158 虚拟机的磁盘文件,可看到是由于没有读写磁盘文件的权限导致,但是使用 ll 查看:
[root@kvm-b2-f6-host07 kvm158]# ll total 1326748220 -rwxrwxrwx. 1 root root 972163252224 Jun 22 21:56 kvm158_data.qcow2 -rwxrwxrwx. 1 root root 386405105664 Jun 25 01:52 kvm158.qcow2 -rwxrwxrwx. 1 root root 4581 Nov 22 2019 ubunt-158.xml
可见是有权限的,但还是无法进行读取磁盘文件,启动 ubunt-158 虚拟机,这里就可以猜测是由于 SELinux 开启导致出现读取磁盘文件出现权限错误的问题 (查阅资料:http://www.mamicode.com/info-detail-983960.html)
参考文章:https://blog.51cto.com/bguncle/957315
开启状态查询:
方法1: /usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 方法2: getenforce ##也可以用这个命令检查
临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式 setenforce 1 ##设置SELinux 成为enforcing模式
永久关闭(需要重启机器):
修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled reboot