SELinux简介

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

本节索引:

一、SELinux介绍

二、SELinux安全上下文

三、SELinux相关操作

四、操作:SELinux环境下迁移httpd服务默认目录

 

6G33]]IW}_CZCSWFBY_2}EK

一、SELinux介绍:

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是

Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在

这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件

 

SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA

编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最

后还有一个相应的安全策略。任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜

在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。SELinux提供了比传统的

UNIX权限更好的访问控制。

 

 

传统UNIX系统使用的安全系统:自由访问控制(DAC:Discretionary Access Control

SELinx采用的安全系统:强制访问控制(MAC:Mandatory Access Control

DAC环境下进程是无束缚的

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

MAC环境下进程可以被限制的

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

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

 

SElinux的工作类型:

使用cat /etc/selinux/config 可以查看当前SELinux类型和系统支持的所有SELinux类型,不同系统版本支持类型有所不同

SELinux共有四种工作类型:

(1)strict:centos5,每个进程都受到selinux的控制,不识别的进程将拒绝

(2)targeted: 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易

被入侵的进程,centos4只保护13个服务,centos5保护88个服务,不识别的服务将允许

(3)minimum:centos7,修改的targeted,只对选择的网络服务

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

 

targeted现为CentOS系统默认SElinux类型,minimum和mls稳定性不足,未加以应用,strict现已不存在

 

SELinux的优点与缺点:

优点:

(1)通过MAC对访问的控制彻底化

(2)对于进程只赋予最小的权限

(3)防止权限升级

(4)对于用户只赋予最小的权限

缺点:

(1)存在特权用户root

(2)对于文件的访问权划分不够细

(3)SUID程序的权限升级

(4)DAC(Discretionary Access Control)问题

 

二、SELinux安全上下文

传统Linux,一切皆文件,由用户,组,权限控制访问

在SELinux中,一切皆对象(object),由存放在inode的扩展属性域的

安全元素所控制其访问

所有文件和端口资源和进程都具备安全标签:安全上下文(security context)

 

安全上下文有五个元素组成:

user:role:type:sensitivity:category

user_u:object_r:tmp_t:s0:c0

 

user:指示登录系统的用户类型

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

type:指定了数据类别,type类别改变可能导致进程无法访问文件

sensitivity:限制访问的需要,由组织定义的分层安全级别。s0最低,Target策略默认使用s0

category:对于特定组织划分不分层的分类,Target策略默认不使用category

 

其中最重要的一项为文件的type标签,如httpd进程只能在httpd_t 里运行,/etc/passwd只有type

为passwd_file_t才能起作用,/var/log/messages文件如果不是var_log_t类型将无法记录日志等,

在SELinux安全策略中,修改了type类型,可能导致文件无法正常使用

 

三、SElinux相关操作:

1.SELinux启用、禁用

SElinux共有三种运行模式:

SELINUX=enforcing                 启用SELinux

SELINUX=disabled                   彻底禁用SELinux

SELINUX=permissive               禁用,但违反SELinux策略会产生告警

 

getenforce                        显示当前SEliunx运行模式

 

a)利用命令临时修改:

setenforce 0                     临时切换到permissive

setenforce 1                     临时切换到enforcing

 

b)修改配置文件:

/etc/selinux/config

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

/boot/grub/grub.conf             使用selinux=0禁用SElinux

注:grub.conf优先级高于/etc/selinux/config

 

 

2.修改SELinix安全标签:

给文件重新打安全标签:

chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…

chcon [OPTION]… –reference=RFILE FILE…

-R:递归打标;

恢复目录或文件默认的安全上下文:

restorecon [-R] /path/to/somewhere

 

SELinux端口标签:

semanage port -l|grep http   查看http允许使用的端口

semanage port -a -t http_port_t -t tcp 9527        添加http允许使用的端口包含9527

 

3.SELinux默认数据库查询与修改

查看SELinux默认数据库:

semanage fcontext -l

查看某文件放入默认SElinux类型:

semanage fcontext -l | grep /path/file

添加到SELinux默认数据库:

semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’

restorecon –Rv /testdir

从SElinux默认数据库中删除:(type类型将变回default_t)

semanage fcontext -d –t httpdsyscontentt ‘/testdir(/.*)?’

 

4.SELinux端口标签

在SELinux安全策略中,定义了服务具体可使用的端口号,如果服务未使用对应的端口号,将会

导致无法使用,semanage命令也可以用来修改这些默认端口。

查看端口标签:

semanage port –l

添加指定端口到指定服务:

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

 

 

5.SElinux布尔值

布尔型规则:

getsebool

setsebool

查看bool命令:

getsebool [-a] [boolean]

semanage boolean –l

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

设置bool值命令:

setsebool [-P] boolean value(on,off)               不加-P只修改内存,临时生效

setsebool [-P] Boolean=value(0,1)                加-P同时修改内存和配置bool

 

6.SELinux日志管理:

将错误的信息写入/var/log/message

yum install setroubleshoot(重启生效)

查看安全事件日志说明

grep setroubleshoot /var/log/messages

sealert -l UUID

扫描并分析日志

sealert -a /var/log/audit/audit.log

 

7.SELinux帮助:

yum –y install selinux-policy-devel ( centos7.2)

yum –y install selinux-policy-doc (centos7.3/7.4)

mandb | makewhatis

man -k _selinux

 

 

四、操作:SELinux环境下迁移httpd服务默认目录

将默认目录/var/www/html迁移至/data/website/html目录

一、创建/data/html目录:

mkdir   /data/html

二、修改httpd服务配置文件

cat  /etc/httpd/conf/httpd.conf

#DocumentRoot “/var/www/html”        加上注释

DocumentRoot “/data/website/html”

#<Directory “/var/www/html”>             加上注释

<Directory “/data/website/html”>

配置

三、修改目录type类型:

semanage fcontext -l |grep /var/www/html                          查看默认目录的文件type类型

chcon -R -t httpd_sys_content_t /data/website/html

selinux数据库

或:

修改安全上下文数据库

semanage fcontext -a  -t  httpd_sys_content_t   /data/html(/.*)?

restorecon -R /data/html                            同步数据库type类型

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98614

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班