Selinux安全上下文详解
SELinux介绍
DAC:自由访问控制
MAC: 强制访问控制
DAC环境下进程是无束缚的
MAC环境下策略的规则决定控制的严格程度
MAC环境下进程可以被限制
策略被用来定义被限制的进程能够使用哪些资源(文件和端口)
默认情况下,没有被明确允许的行为将被拒绝
Selinux策略
对象(object):所有可以读取的对象,包括文件、目录和进程、端口等
主体:进程称为主体(subject)
Selinux中所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予格子衣domain的标签。domain标签能够执行的操作由安全策略里定义
当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC(访问矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存,查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问
安全策略:定义主体读取对象的规则类数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝,并且定义了哪种行为是允许或拒绝
Selinux安全上下文
传统Linux,一切接文件,由用户,组,权限控制访问
在Selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问
所有文件和端口资源和进程都具备安全标签:安全上下文(security context)
安全上下文有五个元素组成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0
实际上下文:存放在文件系统中,ls -Z;ps -Z可以查看详细信息
期望(默认)上下文:存放在二进制的SElinux策略库(映射目录和期望安全上下文)
semanage fcontext -l
五个安全元素
User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程
Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r
Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务公用:public_conten_t
Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret,一个对象有且只要一个sensitivity,分0-15级,s0最低,Target策略默认使用s0
Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret,一个对象可以有多个catagroy,c0-c1-23共1024个分类,Target策略不适用category
Selinux配置文件
Selinux配置文件(configuration)或策略文件(policy)位于/etc/目录下
/etc/sysconfig/selinux是一个符号链接,真正的配置文件为:/etc/selinux/config
Selinux常用工具
chcon命令修改文件安全上下文
chcon [options] CONTEXT files
说明:
CONTEXT为要设置的安全上下文
files对象(文件)
options
-f: 强迫修改
-R:递归修改对象的安全上下文
-r ROLE:修改安全上下文角色的配置
-t TYPE:修改安全上下文类型的配置
-u USER:修改安全上下文用户的配置
在我们的实际生产环境中跟文件权限最相关的是位于第三字段的数据类型,下面我们就用具体的示例来讲解一下修改文件的type类型导致文件权限的变更
我们通过更改/var/log/messages文件的安全上下文类型来做一下演示
首先查看messages文件的原有标签
ls -Z /var/log/messages
现将message更改成default_t类型
因为我们更改了messages文件的安全上下文所有导致此文件与/var/log目录上下文标签不匹配所以所有日志都将无法写入此文件
更改回原来的标签类型
chcon -t var_log_t /var/log/messages
还可以使用第二种方法直接恢复
首先查询selinux策略的数据库种messages对应的标签类型,然后使用restorecon后面跟/var/log/message直接恢复即可
semanage fcontext -l | grep /var/log/message
注意:此命令要求Selinux的策略数据库中必须曾经记录过此文件的标签
假设此时我们需要自己创建一个网页文件,那么该怎样设置它的文件标签呢?
首先创建一个目录/data
在目录中任意创建几个文件a.txt,b.txt
我们使用ls -Z /data查看会发现新创建的文件的标签默认为default_t
这里我们可以知道自己手动常见的文件因为selinux安全测录==策略数据库中没有记载,所以一律为defaults_t标签类型
查看一下在/httpd服务的主目录下的文件标签类型为httpd_sys_content_t,此类型标签代表了用户可以从主目录进入访问的标签类型
防火墙策略放行httpd服务之后用浏览器访问
浏览器可以正常访问登录
那么如果我们自己从新在/data目录下定义一个网页会怎样?
首先修改httpd的配置文件
在/data目录下创建一个名为test2.html的网页文件
并添加内容test2 page!!!
将DocumentRoot主目录定义到/data下,并通过浏览器重新访问
此时我们查看一下手动创建的test2.html文件它的标签为default_t类型
此类型的标签导致我们访问失败
然后我们修改test2.html的文件类型标签,之后重启服务并重新访问
chcon -t httpd_sys_content_t test2.html
备注:我们在为自己创建的文件设置标签时,首先的知道此类型的文件需要打上哪种标签,可以到selinux的安全策略库中查询一下。
当然我们如果每次都手动设置每个文件会比较麻烦,所以我们可以直接将/data父目录设置成httpd类型的标签,并将此目录加到selinux的安全策略库中
使用如下命令:
这样以后所有在/data目录下创建的文件都会自动打上http_sys_content_t标签类型
接下来说一下端口的定义:
Selinux端口标签
查看端口标签
semanage port -l
添加端口
semanage port -a -t port_label -p tcp|upd PORT
semanage port -a -t http_port_t -p tcp 8998
删除端口
semanage port -d -t port_lable -p tcp|udp PORT
semanage port -d -t http_port_t -p tcp 8998
修改现有端口为新标签
semanage port -m -t port_label -p tcp|upd PORT
semanage port -m -t http_port_t -p tcp 8998
我们查看一下系统中httpd服务支持的端口
使用semanage port -a -t http_port_t -p tcp 8998
可以看到httpd服务支持的几个端口
然后我们手动将8998端口定义到httpd服务支持的端口中,并修改httpd服务的配置文件让它监听在8998端口上,重启服务之后,使用浏览器访问网站
可以看到网站监听在新的端口上,并且能够正常访问。
最后我们在来说一下Selinux的布尔值
SELinux布尔值
布尔值规则
getsebool
setsebool
查看bool命令
getsebool [-a] [boolean]
semanage boolean -l
semanage boolean -l -C :查看修改过的布尔值
设置bool值命令
setsebool [-P] boolean value(on ,off)
setsebool [-P] Boolean value(0,1)
例如查看一下ftp服务当前所有生效的布尔型值
如果希望ftp支持匿名上传可以将第一项ftpd_anon_write -->off改为on
setsebool ftpd_anon_write=1
备注:此命令更改的只是内存中的数据,只起到临时生效的作用
想让更改永久生效则使用 -P 选项
上面的内容就是关于Selinux安全上下文的讲解
转载于:https://blog.51cto.com/11970509/2320779
Selinux安全上下文详解相关推荐
- 文件的复制、移动、压缩等对SELinux属性关系详解
文件的复制.移动.压缩等对SELinux属性关系详解 1.临时修改文件的类型属性 文件的类型属性不正确是常见的SELinux拒绝访问的主要原因 1)修改文件的SELinux属性: [root@loca ...
- linux命令关闭电脑,SELinux关闭命令详解linux操作系统 -电脑资料
下面来给大家介绍在linux中SELinux关闭方法吧,如果你正在了解这个可以来参考此文章,文章重点介绍了SELinux的使用方法哦, 关闭SELinux的方法: 修改/etc/selinux/con ...
- 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域
本文主要介绍JS执行上下文相关的内容,理解了JavaScript的执行上下文才能更好地理解JavaScript语言本身以及该语言一些特性,如变量提升.作用域和闭包. 一.作用域 1.1 作用域 作用域 ...
- css层叠上下文详解,CSS定位(层叠上下文)
前面花大力气介绍了布局,现在讲一讲CSS的定位. 定位是什么? 定位跟布局有啥关系?答案是没有关系,定位是指CSS在立体的角度的堆叠的情况,是垂直于屏幕的. 常常会有一个疑惑,CSS中,我给其中的一个 ...
- html5边框顶格,CSS 三种定位方式以及格式化上下文详解 》 html5jscss
常规流( Normal flow ) 之称之为常规流,是因为这是相对于后面的浮动和绝对定位的一个概念,浮动和绝对定位元素都脱离了当前的常规流. 在 CSS2.1中,常规流包括块框( block box ...
- Android Context应用上下文详解
Context类 ,说它熟悉,是应为我们在开发中时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法 : 说它陌生,完全是 ...
- SELinux系列(四)——SELinux配置文件(/etc/selinux/config)详解
我们知道,SELinux 是预先配置的,可以在不进行任何手动配置的情况下使用 SELinux 功能.然而,一般来说,预先配置的 SELinux 设置很难满足所有的 Linux 系统安全需求. SELi ...
- CSS 格式化上下文详解
CSS格式化上下文 CSS 中很重要的一环就是 BFC 块级格式化上下文,本文整理了 CSS BFC 的相关知识,建议沐浴更衣后食用. 在正式讲解BFC之前,先了解一下浏览器外边距重叠的问题. 外边距 ...
- JS----预编译及变量提升详解
前言 JS属于解释型语言,在执行过程中顺序执行,但是会分块先预编译然后才执行.因此在JS中存在一种变量提升的现象.搞懂预编译环节,变量提升自然而然也就懂了.本文讲围绕以下几点进行介绍(变量提升会穿插在 ...
最新文章
- Nexus3.x安装
- CloseHandle()函数的使用(转载)
- 【C 语言】数组作为参数退化为指针问题 ( 问题描述 | 从编译器角度分析该问题 | 出于提高 C 语言执行效率角度考虑 | 数组作为参数的推荐方案 )
- Cannot place PIO comp S on the proposed PIO site PB6C / F5 because the types of their IOLOGICs a...
- mapreduce 文件可以切分吗_MapReduce的任务流程
- JZOJ 3739. 【TJOI2014】匹配
- jQuery动画高级用法(上)——详解animation中的.queue()函数
- Egret的容器--删除对象,遮罩
- SAP Spartacus 服务器端渲染的依赖注入之 ProductPageEventBuilder
- 办公网络对工业交换机的功能要求
- VB讲课笔记04:数据类型、运算符与表达式、常用函数
- java 压缩 空目录_java zip压缩与解压-支持空目录,保留文件修改时间
- 常见网络命令之traceroute命令一起其他常用命令
- Not enough space in file systems for the current software selection. An additional XXXX MiB is neede
- 10 个功能独特且饱受好评的开源人工智能项目
- StringUtil工具类:
- 云服务器 性能测试之web压力测试
- 手提无法使用Ghost方法安装win7系统,出现一直显示DOS工具箱和硬盘无效情况的解决
- Will----个人资料
- 带节点的曲线,可以鼠标拖动节点,类似PS
热门文章
- 解决root用户登录Ubuntu12.04 LTS图形界面
- 能用c语言编写图形界面吗,「分享」C语言如何编写图形界面
- c或c++语言什么时候用补码来运算,C/C++(基础编码-补码详解)
- linux 统计_聊聊 Linux 的内存统计
- C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
- php生产任务,php生产实用技能之计划任务(视频讲解)
- 金古桥机器人_《泽塔奥特曼》奥特曼憋屈了,被机器人保护,金古桥可能才是主角...
- 我要自学网python视频教程_人生苦短,请用Python!学习Python的四大理由
- java uncked_使用FindBugs对SpringSide1.0m3进行分析的结果
- windows apache html5,Windows服务器下的IIS和Apache性能比较