一、基础概念

SELinux的全称为安全加强的linux(Secure Enhanced Linux),工作于Linux内核中,用于实现强制访问控制机制。它实现的方式类似于将一个进程的运行环境限制在一个沙箱中,使得某个进程只能拥有沙箱中限定的权限,从而实现对进程的控制,避免其风险

1. 访问控制机制

  • DAC:自主访问控制机制,linux原生的访问控制机制,安全上下文
  • MAC:强制访问控制,SELinux引入的访问控制机制

2. SELinux的监控级别

设定selinux的监控严苛程度

  • strict级别:严格级别,centos 5上的级别,每个进程都受到selinux的控制
  • targeted级别:仅有限个进程受到selinux控制,这里指的有限的进程通常为比较著名的程序,比如httpd、vsftpd
  • mls级别:分级别保护
  • minimum级别:修改过的targeted级别,只有选定进程才被限制

3.安全标签

selinux为每个文件及进程都提供了安全标签,可以使用命令ll -Zps auxZ查看,显示为用冒号分割的四个字段,格式为user:role:type:敏感度,通过第一个字段来限定进程活动范围内,通过第三个字段来限定文件支持的操作,从而形成沙箱

  • user:selinux的user,用来标识某个进程或文件属于哪个域
  • role:角色,有点类似于系统的组
  • type:类型,以文件类型为例,它支持的操作open、read、write、close、chown、chmod
  • 敏感度:用来定义进程或文件的重要程度,和监控级别中的mls挂钩

访问模型:假设一个A进程访问B文件

  • 第一步:进程会基于安全上下文机制进行权限匹配,这时与没有selinux无异。如果有权限访问,则进行第二步
  • 第二步:检查selinux的规则库,查看A进程所属的域是否授权了访问B文件所属的类型,如果有授权,则继续检查A进程发起的操作是否在B类型中被允许,如B文件类型仅允许read,但是A进程发起的操作是write,则被selinux规则所拒绝,在selinux中,只要没有允许的操作,都会被禁止

二、配置selinux

1. 通过配置文件关闭、启用selinux

selinux的配置文件位于/etc/sysconfig/selinux/etc/selinux/config,日志文件位于/var/log/audit/audit.log

  • enforcing:强制,每个受限的进程都必然受限
  • permissive:启用,每个受限的进程违规操作是不会被禁止,但会被记录
  • disabled:禁用selinux

2. 通过命令配置selinux

通过命令配置selinux只能在permissive和enforcing中切换,并且重启后失效,想永久有效或禁用必须在配置文件中定义,获取当前系统selinux状态可以使用命令getenforce,而设定selinux需使用命令setenforce #,#表示数字,取值为0或1

  • 0:设置为permissive
  • 1:设置为enforcing

3. 设定selinux布尔型标签

selinux在内部为很多常用服务做了布尔型限制,如httpd服务、vsftpd服务、named服务等等,这些服务提供的功能有很多,而selinux对一些不安全的功能都进行了限制,如匿名写、匿名登录、匿名读等等,使用getsebool -a可以查看selinux布尔型标签是否启用

  • setsebool命令
    命令格式:setsebool [-P] boolean value
    -P:保存在策略中,永久有效
  • 命令示例:setsebool ftp_home_dir 0

4. 修改文件标签

  • chcon命令,格式:chcon [OPTION] [-t TYPE] FILE...
    -R:递归打标
  • 示例:chcon -t httpd_sys_content_t a.txt

5. 将文件标签还原为默认值

  • restorecon命令,格式restorecon [-R] /path/to/somewhere
    -R:递归
  • 示例:restorecon a.txt