一、自主访问控制、强制访问控制
- 自主访问控制(DAC):一个文件是否可以被某个进程读写操作,只取决于rwx的权限
- 强制访问控制(MAC):DAC设置针对特定的进程与特定的文件资源来管理权限。一个进程能否操作某个文件,取决于这个进程与这个文件的策略。
二、SELinux的概念
- Security Enhanced Linux的英文缩写,字面的意思就是强化的Linux之意
- SELinux是整合到内核的一个模板,并且SELinux就是采用MAC来管理进程与文件的
- centos默认开启SELinux
三、SELinux的运行模式
- 主体:SELinux主要管理的就是进程,因此主体就是进程
- 目标:相对于上面的进程所能访问读写的目标资源
- 策略:主体与目标之间的策略,用于进程与文件之间的操作
四、SELinux的三种策略
- targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略
- minimum:由target自定义而来,仅针对选择的进程来保护
- mis:完整的SELinux限制,限制方面比较严格
建议使用默认的targeted策略即可
五、安全上下文
1.概念
- 进程能否操作一个文件,与进程和文件之间的策略有关,这个策略就是安全上下文
2.特点
- 安全上下文是放置到文件的inode内的,因此主体想要读取目标文件资源时,同样需要读取inode
- 安全上下文类似于文件的rwx权限,取决于一个进程能否操作这个文件
- 安全上下文只是控制一个进程能否操作这个文件。但最终这个文件能否被这个进程所使用,还是取决于文件的rwx权限
3.安全上下文的查看(ls -Z)
红圈内的信息就是安全上下文,可以分为三部分
第一部分:身份识别
- system_u:系统用户,大部分就是系统自己产生的文件
- unconfined_u:这个文件来自于不受限的进程例如:我们使用可登录账号获取bash之后,默认的bash环境不受SELinux管制,因此这个bash进程所产生的文件,其身份识别大多就是unconfined_u
第二部分:角色
- object_r:代表这个数据是文件/目录等资源,是最常见的
- system_r:代表这个数据是进程,不过,一般用户也会被指定为system_r
第三部分:类型 这个部分是最重要的,因为一个进程能否读取到这个文件资源就与这个字段有关。只有进程的域与文件的类型相匹配时,SELinux才会对进程放行,然后让进程可以操作这个文件
- type:在文件资源上面这个地方成为类型
- domain:在进程上面则成为域(若为unconfined_t,代表该进程不受SELinux的限制)
六、查看进程的安全上下文(ps -eZ)
进程大概分为两个类型
- unconfined_u:unconfined_r ==>一般都是可登录用户的进程,比较没有限制的进程之意。大多是用户已经顺利登录系统后,所用来操作系统的进程,比如basg、X Window相关软件等
- system_u:system_r ==>大多是系统进程,因此是非交互式的系统运行进程
七、安全上下文的案例
1.下面我们拿:/usr/sbin/crond /etc/crontab /etc/cron.d这三者来举例
- /usr/sbin/crond是一个程序,当执行这个程序之后,就会产生crond服务进程,图一为crond服务进程
- /etc/crontab /etc/cron.d这两个都是文件,可以被crond服务进程所操作
2.承上,解释说明为什么crond进程可以操作/etc/crontab /etc/cron.d等这些文件
- 第一步:当开启crond_exec_t这个类型的/usr/sbin/crond程序后,就会产生一个域为crond_t的crond进程
- 第二步:域为crond_t的进程可以读取类型为system_cron_spool_t的目标文件
- 第三步:图中/etc/crontab /etc/cron.d这两个文件都是system_cron_spool_t类型的,因此能够被crond进程所操作
- 第四步:当然,最终crond能否读写/etc/crontab /etc/cron.d这两个文件,还是与这两个文件的rwx权限有关
3.我们创建一个类型不是system_cron_spool_t的文件在/etc/cron.d目录下,然后重启crond服务,看看crond服务能否操作这个文件
- 第一步:我们在家目录下建立一个测试文件,然后移动到/etc/cron.d目录下
- 第二步:强制重新启动crond服务,然后看一下日志文件
systemctl restart crond
tail /var/log/cron
八、查看进程是否被SELinux所管控
- 概念:并不是所有的进程都被会SELinux所管制。因此查看进程的第三字段的内容就可以知道该进程能否被SELinux所管控
- 从下图可以看到bash的第三字段为unconfined_t,代表bash是不受SELinux限制的进程,所以bash不会被SELinux所管控,而直接去与文件进行操作