天天看点

se+linux+ll-z,selinux相关知识详解及实例讲解

一。selinux相关知识html

1.SELinux简介node

SELinux是一个强制访问控制的安全模块,linux内核2.6版本后集成在内核python

DAC:Discretionary Access Control自由访问控制linux

MAC:Mandatory Access Control 强制访问控制web

DAC下进程是毫无束缚的centos

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

MAC环境下,进程能够被限制安全

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

默认状况下,没有被明确容许的行为将被拒绝网络

2.selinux运行模式

(1)对象(object):全部可读取的对象,包括文件、目录、进程、端口等

(2)主体:进程称为主体(subject)

(3)selinux的工做模式(selinux策略)

strict:只有centos5才有,每一个进程都受到selinux严格的控制

targeted:用来保护常见的网络服务,只监控容易被***的进程;rhel4保护13个服务,rhel5保护88个服务

minimum:centos7,修改过的targeted

mls:提供MLS(多级安全)机制的安全性

mls和minimum稳定性不足,未加以应用

(4)selinux安全上下文

<1>传统linux,一切皆文件,由用户、组、权限控制访问

<2>在selinux中,一切皆对象,

文件安全上下文:由存放在inode拓展属性域中的安全元素所控制其访问

进程安全上下文:存放在内存当中

<3>全部文件、端口资源、进程都具备安全标签:安全上下文

ll 查看文件属性,权限所在列的尾部的“.”表明有安全标签

<4>安全上下文由5个元素组成

user:role:type:sensitivity:category

user_u:object_r:tmp_t:s0:c0

user:指示登陆系统的用户类型,如root、user_u、system_u;多数本地进程属于自由(unconfined)进程

role:定义文件、进程和用户的用途

文件:object_r

进程和用户:system_r

type:指定数据类型,规则中定义何种进程类型访问何种文件,target策略是基于type实现的,   多服务功用:public_content_t

sensitivity:限制访问的须要,由组织定义的分层安全级别,如unclassfied,secret,top,一个对象有且只有一个sensitivity,分0-15级,s0最低,target策略默认使用s0

category:对于特定组织划分不分层的分类,如FBI Secret,NSA Secret,一个对象能够有多个category,c0-c1023共1024个分类,target策略不使用category

<5>实际安全上下文存放在文件系统中,ls -Z ;ps -Z

<6>默认上下文:存放在二进制的selinux策略库中

semanage fcontext -l

小结:selinux对全部的文件都赋予一个type的文件类型标签,对于全部的进程也赋予各自的一个domain的标签;domain标签可以执行的操做由安全策略规定

当一个subject试图访问一个object,kernel中的策略执行服务器将检查AVC(Access Vector Cache访问矢量缓存),在AVC中,subject和object的权限被缓存,查找“应用+文件”的安全环境。而后根据查询结果容许或拒绝访问

3.设置selinux的相关注意操做

selinux是否启用

给文件从新打标签

给端口设置安全标签

设置某些操做的布尔值开关

selinux的日志管理

4.selinux的(状态|模式)

enforcing:强制,每一个受限的进程都必然受限

permissive:容许,每一个受限的进程违规操做不会被禁止,但会被记录于审计日志

disabled:禁用

enforceing与permissive相互加的切换不须要重启,其他状态间切换须要重启,由于selinux是整合到内核中的

selinux的策略改变后须要重启

5.管理selinux的相关命令

(1)查看selinux状态及修改相关状态

getenforce:获取selinux当前状态

sestatus:查看selinux状态

-v 检查列于/etc/sestatus.conf内的文件与程序的安全上下文内容

-b:将目前策略的规则布尔值列出来,即某些规则(rule)是否要启动之意

setenforce 0|1

0:设置为permissive

1:设置enforcing

(2)相关配置文件

下面两类文件有一个禁用即禁用selinux

在/etc/grub/grub.conf文件的kernel行的行尾添加“selinux=0”,内核会忽略过selinux的加载

/etc/grub/grub.conf   使用selinux=0禁用selinux

/etc/sysconfig/selinux

/etc/selinux/config   SELINUX={disabled|enforcing|permissive}

(3)seinfo       查询selinux策略的工具

-t 列出selinux的全部类型(type)

-r 列出selinux的全部角色(role)

-u 列出selinux的全部身份表示(user)

-b 列出全部规则的种类(布尔值)

(4)sesearch命令详解

知道某个类型或者布尔值后,可用此命令了解详细规则

sesearch [-A] [-s 主体类型] [-t 目标类型]  [-b 布尔值]

-A 列出该类型或布尔值的全部相关信息

(5)修改文件的selinux安全标签

<1>给文件从新打安全标签

chcon [option] ... [-u user] [-r role] [-t type] file...

chcon [option] ... --reference=rfile file

-R 递归打标

-v 将过程显示到屏幕上

<2>恢复文件默认的安全上下文

restorecon [-R] /path/to/somewhere

(6)默认安全上下文查询与修改

semanage命令来自于policycoreutils-python包

查看默认的安全上下文

semanage fcontext -l

添加安全上下文(只是为用来恢复默认安全文,在所添加的特定目录下所新建的文件,继承的是当前目录的安全文而不是默认安全文)

semanage fcontext -a -t httpd_sys_content_t  '/testdir(/.*)?'

restore -Rv /testdir

删除安全上下文

semanage fcontext -d -t httpd_sys_content_t '/testdir(/.*)?'

(7)修改端口的selinux标签

查看端口标签

semanage port -l

添加端口

semanage  port -a -t port_label -p tcp|udp PORT

semanage port -a -t httpd_port_t -p tcp 9527

删除端口

semanage port -a -t port_label -p tcp|udp PORT

semanage port -d -t port http_port_t -p tcp 9527

修改

semanageport -m -t port_label-p tcp|udpPORT

semanageport -m -t http_port_t-p tcp9527

(8)selinux布尔值

布尔型规则

getsebool

setsebool

查看bool命令

getsebool [-a] [boolean]

semanage boolean -l

semanage boolean -l -C 查看修改过的布尔值

设置bool值命令

setsebool [-P] boolean value   将设置写入配置文件

setsebool [-P] boolean=value

(9)selinux日志管理

yum install setroublesshoot*(重启生效)

方法一:

<1>将错误的信息写入/var/log/message(错误信息其实最终是在/var/log/audit/audit.log中)

<2>用grep setroubleshoot /var/log/messages过滤所需的信息,

<3>而后用“sealert -l UUID ” 查看安全事件日志说明

方法二:

sealert -a /var/log/audit/audit.log 扫描并分析日志

6.mv /dir1/file1 /dir2/file2  file2的安全标签与file1安全标签同样

cp /dri1/file1 /dir2/file2  file2的安全标签继承/dir2目录的安全标签

二selinux网络服务运行范例

1.在服务器端上边启动httpd服务,并关闭防火墙

se+linux+ll-z,selinux相关知识详解及实例讲解

2.在服务器端上边的/var/www/html/目录下新建文件index.html

se+linux+ll-z,selinux相关知识详解及实例讲解

3.在客户端上边访问pc1的httpd服务

se+linux+ll-z,selinux相关知识详解及实例讲解
se+linux+ll-z,selinux相关知识详解及实例讲解

发现能够成功访问

4.在服务器端查看/var/www/html/index.html的安全上下文

se+linux+ll-z,selinux相关知识详解及实例讲解

5.在服务器端的root下新建index2.html文件,查看安全上下文;而后移动到/var/www/html下,而后再查看安全上下文

se+linux+ll-z,selinux相关知识详解及实例讲解

发现通过mv安全上下文并无改变

6.在客户端访问服务器端的index2.html文件

se+linux+ll-z,selinux相关知识详解及实例讲解
se+linux+ll-z,selinux相关知识详解及实例讲解

发现没有权限访问

7. 在服务器端执行grep 'setroubleshoot' /var/log/message,会出现以下界面

se+linux+ll-z,selinux相关知识详解及实例讲解

8.由上图知道,想了解更详细信息,在服务器端执行sealert -l 92d22156-08a9-4967-a2e9-aa48a3207115

se+linux+ll-z,selinux相关知识详解及实例讲解

9由上图可知,在服务器端执行/sbin/restorecon -v /var/www/html/index2.html科解决问题

se+linux+ll-z,selinux相关知识详解及实例讲解

10.在客户端从新访问服务器端的web服务

/sbin/restorecon -v /var/www/html/index2.html   发现实验成功

3、

一、安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,设置http_sys_content_t到/website及目录下全部文件,使网站可访问    二、修改网站端口为9527,增长SELinux端口标签,使网站可访问    三、启用SELinux布尔值,使用户student的家目录可经过http访问

从本质上将:一、3小题实现的功能是同样的,都是死特定目录可经过http访问

第一小题:

本题pc1指的是服务器端,pc2指的是客户端

(1)进入pc1“httpd”服务配置文件/etc/httpd/conf/httpd.conf ,做以下修改

修改前:

se+linux+ll-z,selinux相关知识详解及实例讲解

修改后:

se+linux+ll-z,selinux相关知识详解及实例讲解

(2)给/website目录添加默认标签规则

se+linux+ll-z,selinux相关知识详解及实例讲解

(3)在pc1上边的/website目录下新建index.html文件

se+linux+ll-z,selinux相关知识详解及实例讲解

(4)在pc1上边重启web服务

se+linux+ll-z,selinux相关知识详解及实例讲解

(5)发现/website/index.html的安全标签以下

se+linux+ll-z,selinux相关知识详解及实例讲解

并非/website目录下的默认安全文

(6)用restorecon -Rv /website/index.html的默认安全文

se+linux+ll-z,selinux相关知识详解及实例讲解

(5)在pc2上边访问pc1的web服务

se+linux+ll-z,selinux相关知识详解及实例讲解
se+linux+ll-z,selinux相关知识详解及实例讲解

第二小题:

(1)进入httpd服务配置文件做以下修改

修改前:

se+linux+ll-z,selinux相关知识详解及实例讲解

修改后:

se+linux+ll-z,selinux相关知识详解及实例讲解

(2)   添加端口默认安全标签

se+linux+ll-z,selinux相关知识详解及实例讲解

发现http_port_t为咱们要找的端口类型

(3)为http_port_t端口类型添加9527端口

se+linux+ll-z,selinux相关知识详解及实例讲解

(4)重启httpd服务

se+linux+ll-z,selinux相关知识详解及实例讲解

(5)在pc2访问pc1的web服务

se+linux+ll-z,selinux相关知识详解及实例讲解
se+linux+ll-z,selinux相关知识详解及实例讲解

发现试验成功

第三小题:

(1)进入httpd服务的配置文件做以下修改

修改前

se+linux+ll-z,selinux相关知识详解及实例讲解

修改后

se+linux+ll-z,selinux相关知识详解及实例讲解

(2)重启httpd服务,而后在pc2上边访问pc1的web服务

se+linux+ll-z,selinux相关知识详解及实例讲解

(3)在pc1上边查看/~tian文件属性,而后修改成Apache进程能够切入该目录

se+linux+ll-z,selinux相关知识详解及实例讲解

(4)此时在pc2上边访问pc1的web服务

se+linux+ll-z,selinux相关知识详解及实例讲解

(5)在pc1的图形界面看到有selinux警报

se+linux+ll-z,selinux相关知识详解及实例讲解

(6)运行setsebool -P httpd_enable_homedirs 1,查看结果以下

se+linux+ll-z,selinux相关知识详解及实例讲解

(7)在pc2访问pc1的web服务

se+linux+ll-z,selinux相关知识详解及实例讲解
se+linux+ll-z,selinux相关知识详解及实例讲解