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文件中的配置信息
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