Linux之强大的selinux

简单点说,SELinux就是用来加强系统安全性的。它给一些特定程序(这些程序也在不断增加)做了一个沙箱,它将文件打上了一个安全标签,这些标签属于不同的类,也只能执行特定的操作,也就是规定了某个应用程序设定了你可以访问那些文件或目录。

这里比较重要的知识点有:

  • selinux的工作原理
  • 工作模式和工作类型(selinux启用,布尔规则)
  • 安全上下文(上下文修改,安全标签,端口标签)
  • 日志管理

查看SELinux当前状态:

一、工作原理

二、工作模式(运行状态)

Enforcing、Permissive、Disabled

1、获取当前SELinux运行状态

getenforce
可能返回结果有三种:Enforcing、Permissive 和 Disabled。

Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为。

2、改变 SELinux 运行状态

setenforce [ 1 | 0 ]

切换disabled状态或者从disabled状态切换至别的状态都需要重启且只能修改配置文件。而enforceing(1)和Permissive(0)两种状态间切换不需要重启,重启时会为整个文件系统重新创建安全标签(touch /.autorelabel && reboot)。

/boot/grub/grub.conf下修改状态优先级比/etc/selinux/config高

若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux或/etc/selinux/config实现。

工作类型(或策略):

默认targeted类型,用来保护常见的网络服务,仅有限进程收到selinux控制,只监控容易被入侵的进程,centos5保护88个服务。

布尔规则:

SELinux根据不同的工作类型对这些规则打开或关闭(on|off<布尔值1|0>),然后通过规则的开启与关闭具体地限制不同进程对文件的读取。

getsebool -a 或者 sestatus -b      # 查看当前工作类型下各个规则的开启与否

setsebool -P 规则名称 [0|1]    # 修改当前工作类型下指定规则的开启关闭,-P表示同时修改文件使永久生效

三、安全上下文

安全上下文存在于进程与文件中,context随进程一起存入内存中,文件的context存放在其对应的inode中,因此进程在访问文件时,要先读取inode,再判断是否能够访问该文件。

ls -Z   file # 显示文件的安全上下文
ps -eZ   # 显示所有进程的安全上下文

semanage来自policycoreutils-python包,centos 6上默认没安装.

系统中的每个文件都会有context,使用ls -Z查询出来的context就是当前context,系统把每个文件的默认context记录下来并保存,这样系统记录下来的就是期望context。semanage命令可以管理每个文件的期望context,也叫期望标签。

安全上下文(当前context):

semanage fcontext -l                     # 查看所有的期望SELinux标签
semanage fcontext -l                     # 查看所有的期望SELinux标签
semanage fcontext -a -t type 目标目录     # 添加期望SELinux标签
semanage fcontext -m -t type 目标目录     # 修改期望SELinux标签
semanage fcontext -d -t type 目标目录     # 删除期望SELinux标签

修改规范:

semanage fcontext -a -t type 目录(/.*)?

安全标签(期望context):标签错误将导致启动异常,文件不可用等故障。

给文件重新打安全标签: 
 chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE... 
       chcon [OPTION]... --reference=RFILE FILE... 
 -R:递归打标; 
恢复目录或文件默认的安全上下文: 
 restorecon [-R] /path/to/somewhere 

端口标签:

虽然听起来是修改端口号的,但是到底还是修改安全上下文的,我们用semanage工具,命令为semanage port

查询某个服务的context type字段

  语法:semanage port -l |grep 服务名

添加某个端口为指定服务的访问端口        

   语法:semanage port -a -t type -p 协议 端口号(不要与常用端口重复)

例如添加ssh服务的端口号,默认为22

四、SELinux日志管理

yum install setroublesshoot*(重启生效)
    将错误的信息写入/var/log/message
grep setroubleshoot/var/log/messages
sealert-l UUID
    查看安全事件日志说明
sealert-a /var/log/audit/audit.log
    扫描并分析日志

 

posted @ 2018-09-15 20:45  朝圣布达拉  阅读(308)  评论(0编辑  收藏  举报