Linux7/Centos7 Selinux介绍

SELinux的全称是Security Enhanced Linux, 就是安全加强的Linux。在SELinux之前,root账号能够任意的访问所有文档和服务;如果某个文件设为777,那么任何用户都可以访问甚至删除;这种方式称为DAC(主动访问机制),很不安全。

DAC 自主访问控制: 用户根据自己的文件权限来决定对文件的操作,也就是依据文件的own,group,other/r,w,x权限进行限制。Root有最高权限无法限制。r,w,x权限划分太粗糙。无法针对不同的进程实现限制。

SELinux则是基于MAC(强制访问机制),简单的说,就是程序和访问对象上都有一个安全标签(即selinux上下文)进行区分,只有对应的标签才能允许访问。否则即使权限是777,也是不能访问的。

在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户(u)、角色(r)和类型(t)标识符。但我们最关注的是第三个部分

当程序访问资源时,主体程序必须要通过selinux策略内的规则放行后,就可以与目标资源进行安全上下文的比对,若比对失败则无法存取目标,若比对成功则可以开始存取目标,最终能否存取目标还要与文件系统的rwx权限的设定有关。所以启用了selinux后出现权限不符的情况时,你就得一步一步的分析可能的问题了。

以上简单了解即可,下面的是要重点掌握的

1、Selinux状态查看与配置:

Selinux的配置文件位置:/etc/selinux/config,它还有个链接在/etc/sysconfig/selinux

使用config文件来配置selinux(通过配置文件修改selinux的状态属于永久修改,要重启系统才生效)

文件内容如下图:

SELINUX=enforcing
#此项定义selinux状态。
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
#disabled—禁用selinux。
SELINUXTYPE=targeted
#此项定义selinux使用哪个策略模块保护系统。targeted只对apache ,sendmail,bind,postgresql,nfs,cifs等网络服务保护。

以上策略配置都放置在/etc/selinux目录中,目录和策略名称相同

使用selinux相关命令查看和修改状态:(属于立即生效但临时性的)
a、sestatus 查询selinux工作状态

b、selinuxenabled检查selinux是否开启,配合echo$?.传回值是0为开启,1为关闭.

c、getenforce查看selinux的状态

d、setenforce设定selinux运行状态,1开启(Enforcing),0关闭(Permissive)

2、查看安全上下文相关命令

查看文件上下文可以通过ls-Z

查看进程上下文可以使用ps Z

查看用户上下文可以用id–Z

安全上下文以用户:角色:类型(域)标识符的形式出现.(这里的用户指的是selinu用户)

3、以下是复制和移动文件时安全上下文的变化:

以httpd为例,这个httpd的进程可以访问/var/www/html下的文档对象

在/root目录下创建两个测试页文件(如test1.html、test2.html)

复制test1.html文件到/var/www/html目录下,剪切test2.html文件到/var/www/html目录下

查看html目录下文件的安全上下文

通过上图可以看到剪切操作时文件的上下文没有发生改变,仍然是原上下文,而复制操作时文件的上下文继承了目标目录的上下文。

通过浏览器访问这两个网页文件


可以看到test1.html页面能访问而test2.html却被拒绝访问

查看权限发现apache用户对这两个文件都具有r权限,但test2.html文件却拒绝访问

原因就是因为httpd进程不能访问域类型标签是admin_home_t的资源,被selinux将访问拒绝了。

查看日志/var/log/audit/audit.log

原因就是因为httpd进程不能访问域类型标签是admin_home_t的资源,被selinux将访问拒绝了。

查看日志/var/log/audit/audit.log

通过日志记录也能看到test2.html文件拒绝httpd进程访问。

由于此文件记录的信息很多不宜直接查看,可以借助audit2why和audit2allow

#audit2why</var/log/audit/audit.log

注:提供audit2why和audit2allow工具软件包

收集Selinux产生的日志,另一个工具是setroubleshoot,对应的软件包为

Setroubleshoot将错误信息写入/var/log/messages中

#tail/var/log/messages | grep setroubleshoot

上面的错误信息大概说的是”selinux阻止httpd访问这个文件,要查看完整的信息,请执行sealert命令”

可以用sesearch [--allow] [-s 主体类别] [-t 目标类别] [-b]查询详细规则

sesearch命令由下列软件包提供

找出目标资源类别为httpd_sys_content_t的相关信息


从上图显示信息表示[allow 主体程序安全上下文类别 目标资源安全上下文类别],说明这个资源类别可以被哪个主体程序类别所读取。

找出主体程序为httpd_t相关的所有信息

从上面的数据就可以看出程序httpd_t为个类别可以访问的哪些资源类别。

如何解决上述问题呢?解决方法就是更改test2.html文件的上下文。有两种方式,一种是通过restorerecon( restore context) 修复继承当前目录默认的上下文;一种是通过chcon(change context) 修改当前的上下文。

a.使用restorerecon( restore context) 修复继承当前目录默认的上下文

分两步实现:

首先为/var/www/html 这个目录下的所有文件添加默认标签类型:

semanage fcontext -a -thttpd_sys_content_t ‘/var/www/html(/.*)?‘

因为html目录的默认标签类型就是httpd_sys_content_t,所以此步可以省略

然后用新的标签类型标注已有文件:

restorecon -Rv /var/www/html/, 之后 httpd就可以访问该目录下的文件了。

semanage和restorecon命令是由下列软件包提供的

b.使用chcon (change context) 修改当前的上下文

注:

chcon 意思是change context
-t type 类型
-R recursive 递归(特别适用于改变某个目录下所有文件的context)
-u user
-r role


--reference表示用test1.html文件的上下文修改test2.html文件的上下文。

最后再看一个概念,SELinux的布尔值。这个布尔值类似一个开关,打开的话,他对应的一些服务就允许执行,否则的话就拒绝执行。

看看有哪些布尔值

也可用semanage命令#semanage boolean –l

知道了布尔值的名字,可以通过sesearch 来确认他关联了哪些服务的域,比如httpd_enable_homedir允许下列规则,如果设置为off的话,那么他们都是无法访问的。

设置boolean值,-P为设置永久生效.

#setsebool [-P] 布尔值 on/off

下面看一个与布尔值有关的例子

确认已经启用了 Selinux、启动 FTP:

在匿名访问目录下创建 2 个文件进行测试,一个是在该目录下手动创建,这样

该文件会自动继承/var/ftp/pub 下的目录上下文的值,一个用 mv 命令从 root 目录下移

动过来,这样的文件会保留 root 目录下的安全上下文,如下

使用匿名登录测试:

发现这里看不到 root.txt 文件

已知系统启动了 Selinux,先查看系统日志,有两个工具可以收集到 Selinux 产生的

日志,一个是 setroubleshoot,一个是 audit,先使用 audit 工具,使用方法

如下:

系统中提供了 audit 相关的命令,常用的有 audit2why 和 audit2allow,audit 产生的日志

放在/var/log/audit, 由于此文件记录的信息很多不宜直接查看,可以借助audit2why

命令,首先启动 audit

在客户端登录 FTP 服务器时会出发 audit deamon 产生日志:


AVC 是 access vector cache 的缩写,目的是记录所有与 SELinux 有关的存取统计资料。

根据日志中的建议,使用 audit2allow 命令查看给出的建议如下:


验证布尔值中有关 FTP 的定义

发现ftp_home_dir --> off,文件 root.txt 的类型刚好是 root:object_r:user_home_t:s0

所以更改此 bool 值就可以

(-P 是把该修改写到文件,下次启动仍然有效)

客户端登录测试,发现 root.txt 文件就可以访问了

总结一下,如果搭配了某个服务器,然后客户端无法正常访问,应该按照下面的顺序进行排错:

1.该服务的配置文件中是否开启了相关的权限 ,比如是否允许匿名用户写入等等;

2.文件系统的权限,比如是否需要使用chmod修改权限

3.SELinux的上下文和布尔值

如果对此有兴趣,请扫下面二维码免费获取更多详情

原文地址:http://blog.51cto.com/11233498/2128312

时间: 2024-10-14 18:21:22

Linux7/Centos7 Selinux介绍的相关文章

VMware 下,windows7与linux7/CentOS7 共享设置

VMware 下,windows7与linux7/CentOS7 共享设置的准备工作: 1:VMware Workstation 12下,新建两个虚拟机:windows7与 linux7(CentOS7) Win7的IP:192.168.232.170, D盘下共享目录有:shareWindows, 登陆用户:admin,密码:L1236669 linux7的IP:192.168.232.171, 共享目录:/shareLinux, 登陆用户:lizhie,密码:L1236669 2:确保lin

SELinux介绍

SELinux介绍 SELinux: Secure Enhanced Linux, 是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)开发的 Linux的一个强制访问控制的安全模块. 2000年以GNU GPL发布, Linux内核2.6版本后集成在内核中DAC: Discretionary Access Control自由访问控制MAC: Mandatory Access Control 强制

SELinux介绍与设置

一.SELinux介绍??selinux强制访问控制的一种策略,在传统的linux系统中,一切皆文件,有用户,组和权限来控制访问,在selinux中,一切皆对象,由存放在扩展属性域的安全元素控制访问,所有文件.端口.进程都具备安全上下文,安全上下文主要分为五个安全元素user.role.type.sensitivity.category.二.五个安全元素 user:登录系统的用户类型,如root,user_u,system_u,所属本地进程都属于自由(unconfined)进程role:定义文件

CentOS7 SELinux阻止MongoDB启动的问题

问题描述: 在新装的CentOS7上,安装了MongoDB3.4,挂载了一个大的数据盘后,修改/etc/mongo.conf,将配置文件中的log和data目录放在新的数据盘下,并修改文件的访问权限.改完后的mongo.conf: # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to wr

15.3、SElinux介绍

1.selinux:SELinux - NSA Security-Enhanced Linux (SELinux). 工作与内核中. 2.linux原有安全模型:DAC,自主访问控制 selinux安全模型:MAC(强制访问控制) 3.Selinux的工作模式:(有两种) strict:严格级别,每个进程都收到selinux的控制 targeted:仅有限个进程受到selinux控制,只监控容易被入侵的进程 4.Selinux的工作方法:ls -Z.ps auxZ #ls -Z  //显示文件的

Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向

一.shell介绍 shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员. shell是系统跟计算机硬件交互使用的中间介质,一个系统工具.实际上在shell和计算机硬件之间还有一层--系统内核.如果吧计算机比作人的躯体,那系统内核就是人的大脑,至于shell,把它比做人的五官更贴切. 其实,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传给系统内核,接着内核再去支配计算机硬件去执行各种操作. CentOS安装的she

Linux7/Centos7新特性

如何实现rhel7图形界面自动登陆: 首先找到/etc/gdm/custom.conf文件 然后在custom.conf文件里在daemon下加入下面的内容: AutomaticLoginEnable=true AutomaticLogin=root 设置主机名 rhel7不再使用/etc/sysconfig/network设置主机名,而是使用/etc/hostname文件,下面就介绍有关rhel7设置主机名的几种方法. 方法:1 修改/etc/hostname文件设置主机名. 方法:2 执行h

Linux7/Centos7新特性之firewalld防火墙

Rhel7防火墙 Redhat Enterprise Linux7已经默认使用firewalld作为防火墙,其使用方式已经变化. 基于iptables的防火墙被默认不启动,但仍然可以继续使用. RHEL7中有几种防火墙共存:firewalld.iptables.ebtables等,默认使用firewalld作为防火墙,管理工具是firewall-cmd.RHEL7的内核版本是3.10,在此版本的内核里防火墙的包过滤机制是firewalld,使用firewalld来管理netfilter,不过底层

Linux7/Centos7新特性以及安装体验

一.RHEL7新特性: 1.身份管理 ?kerberos的跨平台信任机制:kerberos将完全兼容微软活动目录,实现完全使用活动目录进行认证. ?REALMD:该功能简化了RHEL 加入微软活动目录的配置,支持自动发现域信息. RHEL 7增加了两个关键性的新特征改善了RHEL对AD的处理方式.现在,RHEL7和AD之间建立了跨域信任(Cross-realm trusts),因此AD用户可以在Linux端无需登录就能访问资源.RHEL 7增加的另外一个AD相关的功能是realmd,实现自动化查