SElinux 设置与HTTP服务结合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SElinux 设置与HTTP服务结合相关的知识,希望对你有一定的参考价值。
SElinux是基于MAC策略的。
DAC:Discretionary Access Control自由访问控制
MAC:Mandatory Access Control 强制访问控制
? DAC环境下进程是无束缚的
? MAC环境下策略的规则决定控制的严格程度
? MAC环境下进程可以被限制的
? 策略被用来定义被限制的进程能够使用那些资源(文件和端口)
? 默认情况下,没有被明确允许的行为将被拒绝
SELinux定义了系统中每个【用户】、【进程】、【应用】和【文件】的访问和转变的权限,然后它使用一个安全策略来控制这些实体(用户、进程、应用和文件)之间的交互,安全策略指定如何严格或宽松地进行检查。连Root账户也只能在策略范围能运作。
SELinux工作类型:
Centos 6 和 7 默认的工作类型为targeted, 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程。
SELinux安全上下文
在SELinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问
所有文件和端口资源和进程都具备安全标签:安全上下文(security context)
安全上下文有五个元素组成,以冒号分隔
user:role:type:sensitivity:category
?User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程
? Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r
? Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用:public_content_t
? Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified, secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级,s0最低,Target策略默认使用s0
? Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret, 一个对象可以有多个categroy, c0-c1023共1024个分类, Target 策略不使用category
实际上下文:存放在文件系统中,ls –Z ; ps –Z
文件权限属性中出现这个点,就表明有selinux标签。可以使用 -Z 选项来查看
期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中
查看SElinux策略库
# semanage fcontext -l
此软件包在最小化安装时并未包含
# yum install policycoreutils-python.x86_64
启用与关闭SElinux
# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - 强制,每个受限的进程都必然受限
# permissive - 允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
# disabled - 禁用
SELINUX=enforcing
enforcing 与 disabled 这2种状态之间的转换,必须要重启系统。从disabled切换至enforcing时,重启后会扫描并重设安全上下文,所以会有花费而外的时间。
查看SElinux状态
# getenforce 获取selinux当前状态
Enforcing
#sestatus 获取selinux当前状态与配置文件状态
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
设置SElinux当前状态
#setenforce 1 将当前状态设置为Enforcing
#setenforce 0 将当前状态设置为 permissive
与SElinux相关的配置文件:
/boot/grub/grub.conf
在内核参数后添加selinux=0 禁用SELinux
selinux的主配置文件存放的目录
/etc/selinux/
/etc/sysconfig/selinux > /etc/selinux/config
文件复制到其他位置后,标签将会发生变化
#ll -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
#cp index.html /root
#ll -Z /root/index.html
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/index.html
修改SELinux安全标签
给文件重新打安全标签:
chcon [OPTION]... [-u USER] [-r ROLE] [-tTYPE] FILE...
#chcon -t admin_home_t index.html
chcon [OPTION]... --reference=RFILE FILE...
-R:递归打标;
从策略库恢复目录或文件默认的安全上下文,
restorecon [-R] /path/to/somewhere
默认安全上下文查询与修改
semanage
-l:查询。
-a:增加,你可以增加一些目录的默认安全上下文类型设置。
-m:修改。
-d:删除
下面为配合semanage的子对象
实例
? 查看默认的安全上下文
semanage fcontext –l
? 添加安全上下文
semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’
restorecon –Rv /testdir
? 删除安全上下文
semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.*)?’
? 查看端口标签
semanage port –l
#semanage port -l|grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
? 添加端口
semanage port -a -t port_label -p tcp|udp PORT
# semanage port -a -t http_port_t -p tcp 9527
? 删除端口
semanage port -d -t port_label -p tcp|udp PORT
# semanage port -d -t http_port_t -p tcp 9527
系统内置的策略端口是不可以删除的
? 修改现有端口为新标签
semanage port -m -t port_label -p tcp|udp PORT
# semanage port -m -t http_port_t -p tcp 9527
规则支持BRE扩展正则表达式
SELinux布尔值
布尔型规则:
getsebool
setsebool
查看bool命令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 查看修改过的布尔值
这2个栏位中的on 或 off 代表的是当前状态或数据库中的值
SELinux boolean State Default Description
privoxy_connect_any (on , on) Allow privoxy to connect any
mount_anyfile (on , off) Allow mount to anyfile
设置bool值命令:
-P 写入磁盘保存
setsebool [-P] boolean value(on,off)
setsebool [-P] Boolean=value(0,1)
SELinux日志管理
? yum install setroubleshoot(重启生效)
将错误的信息写入/var/log/message
? grep setroubleshoot /var/log/messages
? sealert -l UUID
查看安全事件日志说明
? sealert -a /var/log/audit/audit.log
扫描并分析日志
实例:
1、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/web,添加SELinux文件标签规则,使网站可访问
2、修改上述网站的http端口为9527,增加SELinux端口标签,使网站可访问
实验环境:VMware Workstation Pro 14(试用版)
系统平台:
CentOS Linux release 7.4.1708 (Core) 内核 3.10.0-693.el7.x86_64
操作如下:
1.查看当前SElinux状态
#sestatus
SELinux status: enabled
Current mode: enforcing
Mode from config file: enforcing
2.安装http服务
#yum install httpd -y
3.改变网站默认目录为/web,并且http端口为9527
# mkdir /web 创建网站根目录
# echo "Welcome to SElinux" > /web/index.html 生成网页文件
#sed -i '/^DocumentRoot/c\DocumentRoot "/web"' /etc/httpd/conf/httpd.conf 修改httpd配置文件
#sed -i '/^<Directory "\/var\/www"/c\<Directory "/web">' /etc/httpd/conf/httpd.conf 修改httpd配置文件
#sed -i '/^Listen/c\Listen 9527' /etc/httpd/conf/httpd.conf 修改httpd配置文件
4.设置SElinux相关
#semanage fcontext -a -t httpd_sys_content_t '/web(/.*)?' 添加SElinux安全标签到策略库
#semanage fcontext -l|grep ^/web 验证
/web(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
#restorecon -R /web 从SElinux策略库恢复安全标签到网站根目录
#ll -Z 验证
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
#semanage port -a -t http_port_t -p tcp 9527 添加SElinux的http的网络端口
#semanage port -l|grep http_port_t 验证
http_port_t tcp 9527, 80, 81, 443, 488, 8008, 8009, 8443, 9000
5.启动http服务并访问
#systemctl start httpd && lsof -i:9527 启动httpd服务并验证
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 6475 root 4u IPv6 47831 0t0 TCP *:9527 (LISTEN)
httpd 6476 apache 4u IPv6 47831 0t0 TCP *:9527 (LISTEN)
httpd 6477 apache 4u IPv6 47831 0t0 TCP *:9527 (LISTEN)
httpd 6478 apache 4u IPv6 47831 0t0 TCP *:9527 (LISTEN)
httpd 6479 apache 4u IPv6 47831 0t0 TCP *:9527 (LISTEN)
httpd 6480 apache 4u IPv6 47831 0t0 TCP *:9527 (LISTEN)
访问网站成功
以上是关于SElinux 设置与HTTP服务结合的主要内容,如果未能解决你的问题,请参考以下文章
LINUX系统服务与管理(Services)---------第六天
LINUX系统服务与管理(Services)---------第六天
LINUX系统服务与管理(Services)---------第五天