SELinux
全称:Security-Enhanced Linux,安全增强的Linux;
SELinux系统的原本名称为MAC:强制访问控制;SELinux就是MAC访问控制机制在Linux系统中的实现;python
操做系统安全等级标准(橙皮书): D级别(最低安全级别) C级别:C1, C2 (DAC自主访问控制,例如windows等系统的安全级别为C1级别) B级别:B1, B2, B3 (强制访问控制级别MAC) A级别(最高安全级别) 访问控制机制: DAC:Discretionary Access Control,自主访问控制: 基于文件或数据被文件系统赋予的访问权限(r,w,x)的方式实现的访问控制机制; MAC:Mandatory Access Control,强制访问控制: 对于文件或数据的访问权限不是针对用户身份来设定,当某个用户发起某个进程以后,该进程是否可以操纵或处理此文件或数据,取决于进程和文件是否具有能够匹配的domain(进程的域)和type(文件的类型); SELinux工做于Linux内核中: RHEL 4.0:测试性的加入了SELinux安全组件; RHEL 5.0:在安全操做系统时强制安装此组件,但能够在安装时选择关闭相应功能; RHEL 6.0+:在安装操做系统时强制安装此组件,且在系统启动以后自动启动其功能; SELinux依赖于安全策略结果进行相应的访问控制管理,策略结果已知的有三种: 一、strict(严格策略):对于每一个文件都要严格的规定其类型,对于每一个进程都要设定特定的域,进程的域和文件的类型必须严格匹配,才能容许进程访问此文件; 二、mls:multi-level security,多级安全策略结果集; //发行版内被去除 三、targeted:仅对有限个进程进行SELinux的强制访问控制管控;只要进程的域和文件的类型属于某同一大类,就能够匹配,就能够容许进程访问文件;在RHEL系操做系统中为此策略结果; //全部有限个进程:指的是那些容易被***而且会对系统形成安全隐患的进程 注意:在targeted策略结果集中,仅关心进程的domain和文件的type可否匹配,与其余的安全上下文标识没有关系; Sandbox(SELinux须要在沙箱中完成): 在Linux系统中,可以完成真实操做的实体,是进程; subject, action(operation), object subject:进程 action(operation)动做:open, close, read, write, modify, delete, chmod, chown, ... object:文件,进程,套接字,连接,... SELinux为每一个文件和进程提供了一套安全标签,这些安全标签能够称为SELinux的安全上下文(security context); user-identify:role:domain|type:sencitivity user-identify:SELinux的用户身份标识,一般指用户的类型; role:角色 domain|type:进程的域或文件的类型; sencitivity:敏感度; SELinux的策略库(规则库):用来存放规则 规则:进程的哪一个域能够以哪一种方式访问或操纵哪些类型的文件;存放于/etc/selinux/targeted/policy目录中; /etc/sysconfig/selinux文件中定义了SELinux的工做模式和使用的策略结果集; SELINUX=enforcing SELINUXTYPE=targeted SELinux的工做模式(/etc/sysconfig/selinux文件中定义SELinux工做模式): enforcing - 强制开启SELinux机制 permissive - 警告模式,全部动做被记录下来,但并不会阻止操做 disabled - 关闭SELinux机制 注意: 1.凡是从enforcing或permissive模式切换至disabled模式,或者从disabled模式切换至enforcing或permissive模式,都必须通过操做系统的从新引导才能生效; 2.从enforcing模式到permissive模式的切换,能够直接使用命令行工具完成且当即生效; setenforce命令:切换SELinux的工做模式 setenforce [ Enforcing | Permissive | 1 | 0 ] 1:Enforcing 0:Permissive getenforce命令:显示SELinux的工做模式 注意:使用setenforce命令修改的SELinux的工做模式会当即生效,但并不是永久有效;若是想要使被修改的SELinux的工做模式永久有效,则须要修改/etc/sysconfig/selinux文件中的SELINUX参数的值,并从新引导操做系统; 查看进程或文件的SELinux的安全上下文: 文件安全上下文查看: ls -Z|--context [file] 进程安全上下文查看: ps auxZ|-efZ 修改文件的安全上下文: chcon命令: 经常使用选项: -t, --type=TYPE:直接设置目标文件的类型; -R, --recursive:递归地修改目录中全部文件,包括子目录中的文件; --reference=RFILE:参考RFILE所表明的文件的安全上下文,为目标文件设置彻底相同的安全上下文; 使用场景: 一般在进程的安全上下文与文件的安全上下文类型不相符合或不能匹配的时候使用; 示例: 设置httpd虚拟主机对应的文档根目录的安全上下文: ~]# chcon -t httpd_sys_content_t -R /myweb ~]# chcon --reference=/var/www -R /myweb restorcon命令: 经常使用选项: -R, -r:递归修改指定目录及其子目录的安全上下文为默认值; 示例: 撤销httpd虚拟主机对应的文档根目录的安全上下文: ~]# restorcon -R /myweb 查看或修改策略中的内容: getsebool命令:查看SELinux的布尔值 经常使用选项:-a:查看全部SELinux的布尔值 setsebool命令:修改SELinux的布尔值 经常使用选项: -P:若是添加-P选项,则将附加的值直接写入磁盘中的策略文件中,永久生效;若是不添加-P选项,则重启后恢复默认布尔值 使用场景:支持二进制策略修改的系统服务; 1.vsftpd的匿名用户的上传功能被SELinux限制的场景: ~]# setsebool -P ftpd_anon_write on ~]# setsebool -P ftpd_full_access=1 2.samba服务中samba用户访问本身的家目录的共享结果被SELinux限制的场景: ~]# setsebool -P samba_enable_home_dirs on 3.samba服务中共享的目录是由管理员自行建立并指定的: chcon -t samba_share_t /path/to/directory semanage命令:SELinux的策略管理工具 //若是没有此命令,安装policycoreutils-python程序包 semanage port命令: -a, --add:添加一个端口号 -d, --delete:删除一个端口号 -m, --modify:修改一个端口号 -l, --list:列出已被定义的端口号 示例: ~]# semanage port -a -t http_port_t -p tcp 8088