SELinux详解

selinux概念

  • 百度百科:安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。
  • 简而言之,selinux就是内核级的火墙。在某种程度上,它可以被看作是与标准权限系统并行的权限系统。在常规模式中,以用户身份运行进程,并且系统上的文件和其他资源都设置了权限标签。
    (控制哪些用户对哪些文件具有哪些访问权,selinux的另一个不同之处在于,若要访问文件必须具有普通访问权限和selinux访问权限。因此,即使以超级用户身份运行程序,根据进程以及文件或资源的selinux安全性上下文可能拒绝访问文件或资源)
  • 其实SELinux是在进行进程、文件等细部权限设定依据的一个核心模块。由于启动网络服务也是进程,因此刚好也能够控制网络服务能否存取系统资源的一道关卡。所以就分为了传统的文件权限与账号关系以政策规则定制特定进程读取特定文件
    • 自主式访问控制DAC,但是也是很危险的,如果某个进程被有心人士取得,且该进程属于root的权限,那么该进程就可以在系统上进行任何资源的存取!
    • 委任式访问控制MAC,针对特定的进程与特定的文件资源进行权限的管控,SELinux也提供了一些预设政策(Policy),并在该政策内提供多个规则(rule)。
      在这里插入图片描述

selinux模式

  • selinux的三种模式:
    • (1)enforcing:强制模式。违反selinux规则的行为将被阻止并记录到日志中。
    • (2)permissive:宽容模式。违反 selinux 规则的行为只会记录到日志中,不会阻止。一般为调试用。
    • (3)disabled:关闭selinux。
      在这里插入图片描述
  • 如何查看及更改selinux的模式
getenforce					##输入getenforce,即可查看
setenforce 1 				##在selinux开启时,可以通过setenforce 1 更改selinux为enforcing
setenforce 0 				##在selinux开启时,可以通过setenforce 0 更改selinux为premissive
  • 更改selinux的开机启动后的状态,更改之后必须重启reboot才会生效
vim  /etc/sysconfig/selinux   			##selinux的配置文件中,可以通过修改第7行,进行更改。
SELinux=enforcing|premissive|disabled

selinux安全上下文访问规则

  • 安全上下文,个人理解,其实就是SELinux内必备的rwx。

  • 安全上下文是 SELinux 的核心。安全上下文可以把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

  • 安全上下文的结构及含义:安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。分别代表:身份识别、SELinux角色、类型(最重要)、安全级别

ls -Z  文件或目录名(-d)					##-Z可以查看文件或目录的安全上下文。

更改安全上下文

为了实验效果,需要提前安装并开启vsftp服务,我们的目的是通过ftp服务是否可行来验证安全上下文的效果。设置selinux的开机状态为enforcing。

  • 临时更改安全上下文chcon -t public_content_t 文件名
    • (1)新建目录/westos及目录中的文件,通过ls -Z发现其安全上下文都为default_t,这是因为内核默认安全上下文权限为default_t
      图

    • (2)修改vsftp配置文件,更改匿名用户家目录为刚刚建立的/westos,完成后切记重启服务生效 vim /etc/vsftpd/vsftpd.conf 重启生效systemctl restart vsftpd

    • (3)是否可以查看匿名用户家目录下的文件?当然不能,因为selinux的安全上下文不允许。

    • (4)更改该匿名用户家目录的安全上下文(-R 第归更改,其中文件的安全上下文也会更改)chcon -t public_content_t /westos -R 就可以查看到文件了(public代表公开)。
      图
      在这里插入图片描述

    • (5)但是,此更改是临时的,当selinux从enforcing切换到disabled再切换回enforcing时,发现/westos的安全上下文又变回default_t,当然也无法访问其匿名用户家目录的文件了。

  • 永久更改安全上下文(永久的记录在内核的安全上下文列表中)(推荐使用)
    • (1)查看ftp共享目录及其中文件的安全上下文semanage fcontext -l | grep /var/ftp ,发现其安全上下文为public_content_t
      图
    • (2)当前我们的匿名用户家目录为/westos,所以需要使用semanage fcontext命令进行修改跟默认发布目录/var/ftp一样才可以。
      semanage fcontext -a -t public_content_t '/westos(/.*)?' ##-a 表示创建,-t表示修改安全上下文的类型
      图
    • (3)此时查看/westos的安全上下文,发现并未改变,通过命令restorecon -FvvR /westos使其永久生效
      图

selinux政策内的规则管理(enforing)

  • SELinux 布尔值是更改 SELinux 策略行为的开关。 SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使 SELinux 布尔值来调整策略 , 以有选择地进行调整。
  getsebool -a | grep 某服务 			##显示某服务的下相关功能的selinux布尔值
  setsebool 							##设置selinux布尔值
  setsebool -P  某行为  0|1           ## -P永久修改 SELinux 相关策略行为 ,0表示off,1表示on 
  semanage boolean -l 				 ## 显示布尔值是否永久
  • 实验:(以vsftp为例)在开启selinux情况下的文件上传和下载
  • 匿名用户文件上传和下载:
    • (1)修改配置文件,开启上传和下载服务,重启vsftpd服务
    • (2)修改vsftp默认发布目录/var/ftp/pub的权限(两种方法:acl权限列表和修改组和组权限)
    • (3)开启服务对应的selinux bool值查看:getsebool -a | grep ftp 永久开启ftp匿名写功能:setsebool -P ftpd_anon_write 1
      在这里插入图片描述
    • (4)修改默认发布目录的安全上下文,临时增加读写权限:chcon -t public_content_rw_t /var/ftp/pub也可以使用永久更改,记得重载restorecon使其生效semanage fcontext -a -t public_content_rw_t '/var/ftp(/.*)?'
    • (5)测试效果:
      在这里插入图片描述
  • 本地用户文件上传和下载:
    • (1)修改配置文件,开启本地用户上传和下载服务,重启vsftpd服务
    • (2)开启服务对应的selinux bool值
setsebool -P ftp_home_dir on

在这里插入图片描述
- (3)测试效果:
在这里插入图片描述

selinux的日志管理

/var/log/messages  				##系统日志信息,如果安装了setroubleshoot-server,会有解决方案
/var/log/audit/audit.log 		##会有报错信息,但不能生成解决方案

setroubleshoot-server(se错误克服server)

  • 所以开启selinux时,必须安装 setroubleshoot-server 软件包 , 才能将 SELinux消息发送至 /var/log/messages(方便解决问题)。
  • 具体过程:(1)setroubleshoot先由auditd呼叫audispd服务,(2)然后audispd服务启动sedispatch程序,(3)sedispatch将原本的auditd信息转成setroubleshootd信息,进一步存储下来。/var/log/audit/audit.log 用于在该文件中生成所有事件的报告。
  • 对比实验:
    • 安装setroubleshoot-server情况下:

      • 将一些安全上下文为default_t的文件复制到ftp的默认发布目录中,但是我们知道其默认发布目录/var/ftp/pub的安全上下文为public_content_rw_t,所以会出错。
      • 先清空日志
> /var/log/messages
>  /var/log/audit/audit.log
	-	向默认发布目录上传文件,并查看两个日志文件的内容有没有更新
	-	messages中生成了解决方案

在这里插入图片描述

  • 未安装setroubleshoot-server情况下:
    • 卸载setroubleshoot-server
    • 清空日志
    • 向默认发布目录上传文件,并查看两个日志文件的内容有没有更新
    • messages中没有生成解决方案
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值