一。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服务,并关闭防火墙
2.在服务器端上边的/var/www/html/目录下新建文件index.html
3.在客户端上边访问pc1的httpd服务
发现能够成功访问
4.在服务器端查看/var/www/html/index.html的安全上下文
5.在服务器端的root下新建index2.html文件,查看安全上下文;而后移动到/var/www/html下,而后再查看安全上下文
发现通过mv安全上下文并无改变
6.在客户端访问服务器端的index2.html文件
发现没有权限访问
7. 在服务器端执行grep 'setroubleshoot' /var/log/message,会出现以下界面
8.由上图知道,想了解更详细信息,在服务器端执行sealert -l 92d22156-08a9-4967-a2e9-aa48a3207115
9由上图可知,在服务器端执行/sbin/restorecon -v /var/www/html/index2.html科解决问题
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 ,做以下修改
修改前:
修改后:
(2)给/website目录添加默认标签规则
(3)在pc1上边的/website目录下新建index.html文件
(4)在pc1上边重启web服务
(5)发现/website/index.html的安全标签以下
并非/website目录下的默认安全文
(6)用restorecon -Rv /website/index.html的默认安全文
(5)在pc2上边访问pc1的web服务
第二小题:
(1)进入httpd服务配置文件做以下修改
修改前:
修改后:
(2) 添加端口默认安全标签
发现http_port_t为咱们要找的端口类型
(3)为http_port_t端口类型添加9527端口
(4)重启httpd服务
(5)在pc2访问pc1的web服务
发现试验成功
第三小题:
(1)进入httpd服务的配置文件做以下修改
修改前
修改后
(2)重启httpd服务,而后在pc2上边访问pc1的web服务
(3)在pc1上边查看/~tian文件属性,而后修改成Apache进程能够切入该目录
(4)此时在pc2上边访问pc1的web服务
(5)在pc1的图形界面看到有selinux警报
(6)运行setsebool -P httpd_enable_homedirs 1,查看结果以下
(7)在pc2访问pc1的web服务