linux进程安全上下文,Selinux安全上下文详解

SELinux介绍

DAC:自由访问控制

MAC:  强制访问控制

DAC环境下进程是无束缚的

MAC环境下策略的规则决定控制的严格程度

MAC环境下进程可以被限制

策略被用来定义被限制的进程能够使用哪些资源(文件和端口)

默认情况下,没有被明确允许的行为将被拒绝

0d8ea3c56c30456017a8c6db9c08326d.png

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策略不适用categorySelinux配置文件

Selinux配置文件(configuration)或策略文件(policy)位于/etc/目录下

/etc/sysconfig/selinux是一个符号链接,真正的配置文件为:/etc/selinux/configSelinux常用工具

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

fda15685f8fe991c8ffc60b188f4d621.png

现将message更改成default_t类型

236c056e2904fe4484b1e4be068911bc.png

因为我们更改了messages文件的安全上下文所有导致此文件与/var/log目录上下文标签不匹配所以所有日志都将无法写入此文件

更改回原来的标签类型

chcon -t var_log_t  /var/log/messages

还可以使用第二种方法直接恢复

首先查询selinux策略的数据库种messages对应的标签类型,然后使用restorecon后面跟/var/log/message直接恢复即可

semanage fcontext   -l  |  grep /var/log/message

6c327ba41b714a40fc4b7da3ce9befe7.png

注意:此命令要求Selinux的策略数据库中必须曾经记录过此文件的标签

假设此时我们需要自己创建一个网页文件,那么该怎样设置它的文件标签呢?

首先创建一个目录/data

在目录中任意创建几个文件a.txt,b.txt

我们使用ls -Z  /data查看会发现新创建的文件的标签默认为default_t

这里我们可以知道自己手动常见的文件因为selinux安全测录==策略数据库中没有记载,所以一律为defaults_t标签类型

beafb1456119e73106b9e648ffd91a9b.png

查看一下在/httpd服务的主目录下的文件标签类型为httpd_sys_content_t,此类型标签代表了用户可以从主目录进入访问的标签类型

防火墙策略放行httpd服务之后用浏览器访问

4f9e4146895052658a53525a8d2fd92d.png

浏览器可以正常访问登录

59dcbb3f0d25d5ec93a796e1194e363d.png

那么如果我们自己从新在/data目录下定义一个网页会怎样?

首先修改httpd的配置文件

c3a69fb9deb4391dd8d97078a3e1b9fb.png

在/data目录下创建一个名为test2.html的网页文件

并添加内容test2 page!!!

将DocumentRoot主目录定义到/data下,并通过浏览器重新访问

cc6aab7def5b3cdc56e735f7895946cb.png

此时我们查看一下手动创建的test2.html文件它的标签为default_t类型

此类型的标签导致我们访问失败

30e16a84b20a5dfb9a2534ff6f32d61f.png

然后我们修改test2.html的文件类型标签,之后重启服务并重新访问

chcon -t  httpd_sys_content_t  test2.html

a66ff2fcc4bd50e235663c0e92163332.png

备注:我们在为自己创建的文件设置标签时,首先的知道此类型的文件需要打上哪种标签,可以到selinux的安全策略库中查询一下。

当然我们如果每次都手动设置每个文件会比较麻烦,所以我们可以直接将/data父目录设置成httpd类型的标签,并将此目录加到selinux的安全策略库中

使用如下命令:

ca8df4389d200e039e08c38e8921ee20.png

这样以后所有在/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服务支持的几个端口

d587737017f410f4dce18829890b477f.png

然后我们手动将8998端口定义到httpd服务支持的端口中,并修改httpd服务的配置文件让它监听在8998端口上,重启服务之后,使用浏览器访问网站

d6602ac0fc9c972fd7474b4ed7c9ece3.png

可以看到网站监听在新的端口上,并且能够正常访问。

cd1f222487f85c8555f853e3cb87460a.png

最后我们在来说一下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服务当前所有生效的布尔型值

d391bc070f2886d5e01a365c93ffce97.png

如果希望ftp支持匿名上传可以将第一项ftpd_anon_write -->off改为on

setsebool ftpd_anon_write=1

备注:此命令更改的只是内存中的数据,只起到临时生效的作用

想让更改永久生效则使用 -P 选项

1b81d2cd9ff7022d0dc6aea70f72c655.png

上面的内容就是关于Selinux安全上下文的讲解

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值