SElinux


1.SElinux简述


  SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是为了结束DAC(自主访问控制,任何程序对其资源享有完全的控制权,每个用户或进程可以随意修改自己的文件的权限,将其他权限授予给任何其他人而具有任意的访问机制.标准Linux访问控制、所有/组+权限标记(例如rwx)通常被称为自主访问控制(简称DAC)。)而设置的,后来就有了MAC(强制访问控制,一个进程能否访问某个资源,取决于运行这个进程的用户权限以及访问的资源的属主属组等属性)控制机制,但是如果管理员把一个资源属性的其他设置为rwx,那怎么办呢?于是后来有了沙箱(sandbox)的机制,对于进程只赋予最小的权限,比如运行httpd的用户apache,在普通情况下,apache作为一个普通的用户,他能访问大多数资源,如/etc等,但是apache作为一个专门控制httpd的服务,我们把他的活动范围控制在/var/www,只给他最小的权限,而这个范围就是沙箱。


2.selinux核心概念


2.1在Linux中,大多数的操作可以总结成主谓宾,SELinux也不例外,他把大多数操作总结成主谓宾,

Subjects:(主) processes...

Object:(宾) open, close, read, write, modify, delete, chmod, chown, ...

actions:(谓) 文件,进程,套接字,链接,...


    SELinux中通主语能对哪些宾语进行操作,靠的是标签来限定的,SELinux为每个文件提供了安全标签,也同样为进程提供了安全标签;这些称为SELinux的安全上下文,secure context;

user-identify:role:domain|type:sencitivity

user-identify:SELinux的用户身份标识,跟文件系统的user不一样;

role:角色

domain|type:域(进程),类型(文件)

sencitivity:敏感度,s0


2.2操作系统有安全级别的概念:

D

C:C1,C2

B:B1,B2,B3

A:

共ABCD四类7个安全级别,D级是安全级别最低的,C类为自主保护级别,B类为强制保护级别,A类为验证保护级别。


2.3 SELinux有两种工作级别:

strict:对于每个文件都要严格规定其类型,对于每个进程都有特定的域,进程的域和文件的类型必须要严格匹配,才能使进程访问此文件;

targeted:仅有限个进程受到SELinux的管控;在RHEL系系统中为默认级别;

只监控那些容易被入侵并且会对系统造成安全隐患的进程;


2.4 SELinux几种工作模式:

enforcing:启用

permissivs:警告

disabled:关闭

targeted:仅对目标进程进行保护

mls:对大多数进程进行安全保护

  查看/etc/selinux/config文件中的配置信息

selinux_sellinux

1)凡是从enforcing或Permissive模式切换值disabled模式,或者从disabled模式切换至enforcing或Permissive模式,都必须要经过操作系统重新引导才能生效;

2)使用setenforce命令修改的模式不会永久生效,如果想要使SELinux的工作模式永久生效, 需要修改/etc/sysconfig/selinux文件中的SELINUX=enforcing

3)enforcing到Permissive之间的模式转换可以使用setenforce命令来完成;

setenforce {0|1}

0:Permissive

1:Enforcing

4)可以使用getenforce命令来查看当前SELinux的工作模式;



3.常用命令


  chcon:改变标签(打标)

chcon [options]... CONTEXT FILE...

-t type 修改为指定类型

-R:递归修改目录中的所有文件

--reference=FILE:参考FILE的安全上下文,为目标文件设置相同的安全上下文;


使用场景:

使用httpd创建虚拟主机之后,目标页面文件的类型与httpd进程的域不相符合,将虚拟主机服务器根目录中的所有文件修改为httpd_sys_content_t即可;


可以使用restorecon命令还原某文件或目录的安全上下文为默认值;

restorecon

-R:递归


 布尔型规则:  

getsebool

-a:显示所有已经生效的布尔型规则;


setsebool

-P:写入策略文件,使更改永久生效;


使用场景:支持二进制策略修改的系统服务

ftp的匿名用户上传功能:

~]# setsebool -P ftpd_full_access=1

~]# setsebool -P ftpd_anon_write=1


samba用户访问自己的家目录:

~]# setsebool -P samba_enable_home_dirs=1


 semanage:

需要通过安装policycoreutils-python获取该应用程序


semanage port -a -t http_port_t -p tcp 8077