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的子对象


import


Import local customizations导入


export


Output local customizations导出


login


Manage login mappings between linux users and SELinux confined users


user


Manage SELinux confined users (Roles and levels for an SELinux user)


port


Manage network port type definitions 网络端口


interface


Manage network interface type definitions 网卡


module


Manage SELinux policy modules 模块


node


Manage network node type definitions


fcontext


Manage file context mapping definitions 文件


boolean


Manage booleans to selectively enable functionality


permissive


Manage process type enforcement mode 权限


dontaudit


Disable/Enable dontaudit rules in policy

实例

? 查看默认的安全上下文

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)

访问网站成功

原文地址:http://blog.51cto.com/191226139/2059255

时间: 2024-08-05 09:08:35

SElinux 设置与HTTP服务结合的相关文章

在Maven中设置Nexus私有服务为中央工厂

在Maven中设置Nexus私有服务为中央工厂(repository) 2015-12-12 17:45 168人阅读 评论(0) 收藏 举报  分类: Maven(17)  版权声明:本文为博主原创文章,未经博主允许不得转载. nexus中的仓库列表 第一种方式: <repositories>  <repository>  <id>nexus</id>  <name>nexus Repository</name>  <url&

SQL中设置 Orcle连接服务

EXEC sp_addlinkedserver @server='SXHIS', --被访问的服务器别名 @srvproduct='Oracle', --SqlServer默认不需要写 @provider='MSDAORA', --不同的库都是不一样的,OLE DB字符 @datasrc='dbserver'--要访问的服务器(注:该为sql服务器上的oracle配置文件tnsnames.ora里的别名) GO EXEC sp_addlinkedsrvlogin @rmtsrvname='SXH

把应用程序设置成winodws服务

把应用程序设置成winodws服务的命令如下 sc create FileMonitorService type= own start= auto binpath= E:\learn_project\WindowsService1\FileMonitorService\bin\Debug\FileMonitorService.exe displayname= FileMonitorService 然后到服务里启动这个服务就可以了

RHEL因为selinux设置失误,无法重启问题。(centos适用)

今天做FTP模拟的时候selinux设置出现失误.导致系统无法重新启动.出现如下界面 Failed To Load SELinux policy.freezing .. 网上找了下,解决方法如下: 开机之后进入linux启动选择界面,停在平时启动的哪那一行按E键,进入grub编辑页面. 在LANG=zh_CN.UTF-8 空格 加上 selinux=0或者 enforcing=0 最后ctrl+x. 此时熟悉的界面出现了,现在需要将执行错误的selinux参数改过来.SELINUX=enforc

CentOS 7 Linux网络服务 (1)基本网络设置与基本服务

Linux网络设置与基本服务 1.查看及测试网络 查看网络接口信息 ifconfig 查看所有活动网络接口信息 执行 ifconfig 命令 查看指定网络接口信息 ifconfig 网络接口名 查看主机名 执行命令:hostname 更改主机名 执行命令:hostnamectl set-hostnaame + 更改的主机名su 刷新生效 主机名称配置文件 /etc/sysconfig/network 文件保存全局网络配置,主要包括主机名信息在这里配置完成后要小红旗虚拟机,才能使之生效 route

如何设置MS SQL服务使用非SYSTEM身份运行

问题 如何设置MS SQL服务使用非SYSTEM身份运行 解决方案 *注意:本文的内容涉及到修改NTFS磁盘权限和设置安全策略,请务必在确认您了解操作可能的后果之后再动手进行任何的修改.文中提及的权限都是在原有权限上附加的权限. [背景]默认安装的情况下,MS SQL服务在安装时,服务启动账户会被设置成“系统帐户”(SYSTEM)或者一个指定的帐户.如果设置成系统账户,由于此帐户代表系统本身,则在MS SQL有缺陷的情况下,恶意用户或入侵者可以利用这些缺陷,以系统本身的权限对系统终的资源进行操作

[转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS

原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-selinux-services1/index.html?ca=drs- 引言 SELinux 的安全防护措施主要集中在各种网络服务的访问控制.对于像 Apache .Samba.NFS.vsftp .MySQL.Bind dns 等服务来说,SELinux 仅仅开放了最基本的运行需求.至于连接外部网络.运行脚本.访问用户目录.共享文件等,必须经过一定的 SELinux 策略调整才能充分发挥

Linux下静态IP地址的设置及TFTP服务的搭建

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务.TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达. 一.在谈TFTP之前,先简单讲一下Linux网络配置,网络中最重要的当然是IP地址了,这里不讲IP协议,在后面的网络编程再讲解,这里主要学习一下Linux下配置IP,配置IP地址的方法

windows下通过bat脚本和计划任务实现设置某一服务的守护进程

通常服务器上跑的服务或者应用程序比较重要,如果无意间被关闭将造成不定程度的影响.通过为比较重要的服务设置守护进程,守护服务的进程.当服务关闭时可以自动开启,方法如下: 第一步:写守护进程的bat脚本  内容如下: 脚本内容中  set_task=RDO.exe意思为检查是否有RDO.exe进程. 要用的话就改成自己的进程名,如果进程宕了就过会自动重启(会在RDO.exe进程安装目录下生成一个start.bat) 其中 start.bat脚本内容中的start 后面的参数与set_svr后面的参数