SElinux ========================================================================================================================================= 1、SElinux 安全增强式 Linux (Security-Enhanced Linux),实现了强制访问控制的功能。在 Linux 内核中实现,在内核 2.6 版本之后集成于 内核中。 DAC Discretionary Access Control 自由访问控制 MAC Mandatory Access Control 强制访问控制 DAC环境下进程是无束缚的,MAC环境下策略的规则决定控制的严格程度,MAC环境下进程可以被限制的。 策略被用来定义被限制的进程能够使用那些资源(文件和端口)默认情况下,没有被明确允许的行为将被拒绝 2、2种工作级别 SElinux 类型 /etc/selinux/config 配置文件中 SELINUXTYPE=targeted 配置段 : SElinux 的工作类型 strict # 每个进程都受 SElinux 控制(CentOS7中已被弃用) targetd # 有限的进程受 SElinux 控制。用来保护常见的网络服务,仅有限进程受到 selinux控制,只监控容易 被入侵的进程,centos4只保护13个服务,centos5保护88个服务 minimum # centos7,修改的targeted,只对选择的网络服务 mls # 提供 MLS(多级安全)机制的安全性 SELINUX=permissive 配置段 : SElnux 限制类型 enforcing # 强制,每个受限的进程肯定受到限制 permissive # 受限的进程违规操作不会被禁止,但会记录到日志 disabled # SElinux 完全关闭。改变 SElinux 的状态必须重启 3、SElinux状态 getenforce # 获取 selinux 的状态 setenforce o|1 # 临时开启或关闭 SElinux 状态。1 表示enforcing ,0 表示 permissive,设置临时生效。 4、 对进程可以访问的资源进行限制;每一个进程启动时将进程启动在一个类似"沙箱"的模型内,将进程访问资源的范围 控制在一个可控的范围内,以此达到安全的目录。 5、SElinux 模型 subject operation object 进程 操作 进程|文件 定义了一个进程能够对被操作资源的权限。subject 有域的概念,object 有类型的概念。SElinux我每一个文件创建标签, 以作为识别的标记。 6、SElinux 为每个文件和进程创建安全标签: ps auxZ # 查看进程的标签 ls -Z # 查看文件的标签 7、进程和文件的安全标签 system_u:system_r:kernel_t:s0 用户 角色 域 system_u:object_r:etc_t:s0 用户 角色 类型 五个安全要素: User # 指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程 Role # 定义文件,进程和用户的用途文件:object_r进程和用户:system_r Type # 指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用:public_content_t Sensitivity # 限制访问的需要,由组织定义的分层安全级别, 如unclassified, secret,top,secret, 一个对象有且只有一个 sensitivity,分0-15级,s0最低,Target策略默认使用s0 Category # 对于特定组织划分不分层的分类,如FBI Secret ,NSA secret, 一个对象可以有多个categroy, c0-c1023 共1024 个分类, Target 策略不使用 category 8、SElinux 规则库 那种域能访问哪种或那些类型的内的文件。 实际上下文 存放在文件系统中,ls –Z ps –Z 期望(默认)上下文 存放在二进制的SELinux策略库(映射目录和期望安全上下文)中 semanage fcontext –l 9、布尔型设定 可以设定某些功能的关闭或者开启。 getsebool # 获取布尔型设定值 setsebool # 设定布尔型值 setsebool [ -PNV ] boolean_name off|on | bool1=val1 bool2=val2 ... -P # 将设定保存到策略文件中,否则是临时生效 # 查看布尔型值 semanage boolean -l # 查看修改过的布尔值 semanage boolean -l -C 10、配置 SElinux 的方式 1、SElinux 的启用与否 2、给文件重新打标 3、布尔型设置 4、给端口设置安全标签 11、给文件重新打标 chron 格式: chcon [OPTION]... CONTEXT FILE... chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE... chcon [OPTION]... --reference=RFILE FILE... 选项: -R # 递归修改标签 示例: # 修改文件的类型 type 每个目录下的文件默认都有当前目录的默认类型 system_u:object_r:tmp_t:s0 chcon -t user_tmp_t root.haha # 还原文件的默认标签 restorecon FILE... 选项:-R 递归恢复默认标签 12、Selinux 的日志文件 /var/log/audit/addit.log yum install setroubleshoot(重启生效) # 将错误的信息写入/var/log/message  grep setroubleshoot /var/log/messages  sealert -l UUID # 查看安全事件日志说明  sealert -a /var/log/audit/audit.log # 扫描并分析日志 13、saemanage 管理工具 1、查看默认的安全上下文 semanage fcontext -l 2、添加安全上下文 (添加到数据库中) semanage fcontext -a –t httpd_sys_content_t '/testdir(/.*)?' 恢复默认安全上下文 (设置为数据中存在的期望的安全上下文) restorecon –Rv /testdir 3、删除安全上下文 semanage fcontext -d –t httpd_sys_content_t '/testdir(/.*)?' 4、端口标签 # 查看端口标签 semanage port -l # 添加端口 semanage port -a -t port_label -p tcp|udp PORT semanage port -a -t http_port_t -p tcp 9527  # 删除端口 semanage port -d -t port_label -p tcp|udp PORT semanage port -d -t http_port_t -p tcp 9527  # 修改现有端口的标签 semanage port -m -t port_label -p tcp|udp PORT semanage port -m -t http_port_t -p tcp 9527 =========================================================================================================================================