9.1、SELinux介绍
selinux(Security Enhanced Linux ):SELinux 是在进行程序、文件等细部权限配置依据的一个核心模块!由于启动网络服务的也是程序,因此刚好也能够控制网络服务能否存取系统资源的一道关卡!其通过MAC(委任式存取控制) 的方式来控管程序。组成部分
主体 (Subject):程序 目标 (Object):文件系统 策略 (Policy): targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策; strict:完整的 SELinux 限制,限制方面较为严格。 |
9.2、SELinux架构
要了解SELinux架构,首先需要了解一些相关的术语:
身份(identify)
在SELinux中,身份概念不同于传统UNIX uid,他们可以共存于一个系统,但却是不同的概念。身份是安全上下文的一部分,它会印象那个域可以进入。一个SELinux的身份会根标准UNIX登录名有相似的文本表示,但是运行su命名不会改变SELinux中的身份。常见的身份类型有:
root:表示 root 的帐号身份 system_u:表示系统程序方面的识别,通常就是程序 user_u:代表的是一般使用者帐号相关的身份 |
策略
策略就是可以设置的规则,决定了一个角色的用户可以访问什么、哪个角色可以进入那个域,用户可以根据想要建立的系统特点来决定设置什么策略。
域
所有进程在域中进行,域直接决定了进程的访问。域基本上是一个进程允许做的操作列表,或者说它决定了一个进程可以对哪些类型进行操作。
root:表示 root 的帐号身份 system_u:表示系统程序方面的识别,通常就是程序 user_u:代表的是一般使用者帐号相关的身份。 |
类型
类型是分配给一个对象的并决定谁可以访问这个对象。它的定义和域基本相同,不同点在于域是对进程的应用,而类型是分配给目录、文件和套接字的。
角色
角色决定了哪些域可以使用。如果一个策略数据库中定义了一个角色不可以使用一个域,那么它将拒绝。如果允许一个属于user_t域的用户执行passwd命令,那么必须在相关的策略配置文件中进行设置
role user_r types user_passwd_t
SELinux系统示意图如图所示。首先提供策略语言供系统管理者来制定安全策略,并由核心层进行存取控制检查。SELinux将系统核心及安全策略绑在一起,并经由系统呼叫方式检查是否有存取权限。
9.3、SELinux相关的文件
selinux伪文件系统。/selinux/即selinux伪文件系统,它包括了内核子系统最常使用的各种命令。此文件系统与/proc伪文件系统非常相似。系统管理员和用户通常不需要直接操作该部件。
/etc/selinux/目录,所有策略文件和主要配置文件所在的首要目录。
[[email protected] selinux]# cat /etc/selinux/config selinux配置文件 # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted [[email protected] selinux]#
/etc/selinux/config 配置文件控制系统下一次启动过程中加载哪个策略,以及系统运行在哪个模式下,可以使用sestatus密令确定当前selinux的状态。该文件控制两个配置设置:selinux模式和活动策略。selinux模式由SELINUX此变量确定,可以有三种状态:enforcing、permissive、disabled。
在Enforcing模式下,策略完整执行,应当在所有要求增强Linux安全性的操作系统上使用。在Peimissive模式下,策略规则不被强制执行;相反,只是审核遭受拒绝的消息。Disable模式下,selinux内核机制策略关闭,只有在系统启动时策略载入前系统才会处于Disable模式。
9.4、SELinux布尔值和上下文配置
当使用者要执行程序或这进程要执行动作时,系统会依照policy所制定的内容来检查使用者或进程的应用权限,如果权限符合,系统决会允许这个操作执行。SELinux检查方式独立于传统的使用者权限,在selinux中,必须要同时符合传统使用者权限和selinux权限才能顺利执行。
在Centos系统中使用targeted policy保护系统上的各项服务,其主要分为两种类型的属性:布尔值及安全上下文。布尔值属性用来控制每个守护进程的权限,除了可对单一守护进程做selinux机制开关外,还可以对该进程的局部权限做控制。上下文属性用来控制文件系统中每个文件及目录的selinux权限。简单来说布尔属性控制进程行为本身,文件上下文属性控制进程读/写文件的权限。
[[email protected] targeted]# tree /etc/selinux/targeted/ #targeted policy设定文件的架构 /etc/selinux/targeted/ ├── contexts │ ├── customizable_types │ ├── dbus_contexts │ ├── default_contexts │ ├── default_type │ ├── failsafe_context │ ├── files │ │ ├── file_contexts │ │ ├── file_contexts.homedirs │ │ ├── file_contexts.pre │ │ └── media │ ├── initrc_context │ ├── netfilter_contexts │ ├── removable_context │ ├── securetty_types │ ├── sepgsql_contexts │ ├── userhelper_context │ ├── users │ │ ├── guest_u │ │ ├── root │ │ ├── staff_u │ │ ├── unconfined_u │ │ ├── user_u │ │ └── xguest_u │ ├── virtual_domain_context │ ├── virtual_image_context │ └── x_contexts ├── logins ...
contexts/:存储这个targeted policy的安全上下文 modules/:多层次policy模块化目录 modules/active:多层次policy模块化目录,系统目前正在使用的policy modules/previous:多层次policy模块化目录,系统之前使用的policy policy/:存放二进制的policy文件 modules/*/booleans:存放targeted policy中每个限制的布尔值 modules/*/booleans.local:管理者自定义的targeted policy布尔值 contexts/files:domain type的policy设定文件 contexts/files/file_contexts.local:管理者自定义的policy文件 |
- targeted policy布尔属性设定
getsebool:取得目前系统上selinux布尔属性状态
格式:getsebool [-a] [boolean]
setsebool:立即变更selinux布尔属性
格式:setsebool [ -PV] boolean value | bool1=val1 bool2=val2 ...
-P选项表示将此配置写入配置文件中,永久有效。不添加此选项只在当前系统下有效,开机后失效。
- targeted policy上下文属性设定
上下文属性空来控制系统的每个用户、进程、文件等权限。selinux的上下文格式:
user_u:system_r:unconfined_t #第一个字段用户,第二个字段角色,第三个字段类型。
ls -alZ:查看文件目录的上下文属性
id -Z:查看目前使用者身份的上下文属性
ps -eZ:查看进程的上下文属性
restorecon:改写部分目录内所有文件及目录的上下文
-R:递归
chcon:手动更改文件或目录的上下文