分享好友 系统运维首页 频道列表

SELinux介绍

Linux系统  2016-10-09 11:150

SELinux介绍

SELinux: Secure Enhanced Linux, 是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)开发的 Linux的一个强制访问控制的安全模块。 2000年以GNU GPL发布, Linux内核2.6版本后集成在内核中

DAC: Discretionary Access Control自由访问控制

MAC: Mandatory Access Control 强制访问控制

? DAC环境下进程是无束缚的

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

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

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

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

SELinux工作类型

SELinux有四种工作类型:

strict: centos5,每个进程都受到selinux的控制

targeted: 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程, rhel4只保护13个服务,rhel5保护88个服务

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

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

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

配置文件/etc/selinux/config

CentOS5

SELinux介绍

CentOS6

SELinux介绍

CentOS7

SELinux介绍

SELinux安全上下文

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

在SELinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问

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

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

user type

category

例如:user_u tmp_t

c0

SELinux介绍

但是在Centos5中没有所以需要以下命令查看安全标签

实际上下文:存放在文件系统中, ls –Z;ps –Z

SELinux介绍

期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中

semanage fcontext –l

SELinux介绍

五个安全元素

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

Role:定义文件,进程和用户的用途:文件:object_r,进程和用户: system_r

SELinux介绍

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

SELinux策略

对象(object):所有可以读取的对象,包括文件、目录和进程,端口等

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

SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个 domain的标签。 domain标签能够执行的操作由安全策略里定义。

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

安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是充许或拒绝

设置SELinux

配置SELinux:

配置文件/etc/selinux/config

SELinux是否启用

给文件重新打安全标签

给端口设置安全标签

设定某些操作的布尔型开关

SELinux的日志管理

SELinux的状态:

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

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

disabled: 禁用

配置SELinux

相关命令:

getenforce: 获取selinux当前状态

sestatus :查看selinux状态

SELinux介绍

设置当前selinux生效模式

setenforce 0|1

0: 设置为permissive

1: 设置为enforcing

注意:修改disabled只能修改文件,并重新系统之后生效,并且此后新建的文件将没有selinux标签(没有. ),若重新启动selinux则系统会自动将原来没有标签的文件打selinux标签

配置文件:

/boot/grub/grub.conf

使用selinux=0禁用SELinux

/etc/sysconfig/selinux

/etc/selinux/config

SELINUX={disabled|enforcing|permissive}

注意:无论在内核参数添加selinux=0,还是在配置文件/etc/selinux/config中设置,只要有一个禁用则,系统就会禁用selinux

修改SELinux安全标签

给文件重新打安全标签:

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

例如:

chcon -t default_t index2.html

chcon [OPTION]… –reference=RFILE FILE…

例如:

chcon –reference index.html index2.html

-R:递归打标;

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

restorecon [-R] /path/to/somewhere

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

semanage 来自 policycoreutils-python包

查看默认的安全上下文

semanage fcontext –l

添加安全上下文

semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.

)?’

restorecon –Rv /testdir

删除安全上下文

semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.

)?’

Selinux端口标签

查看端口标签

semanage port –l

SELinux介绍

添加端口

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

例如:原先9527端口属于httpd服务利用-m选项可以修改成属于ssh的

注意:修改端口必须已经定义过得

SELinux布尔值

布尔型规则:

getsebool

getsebool命令是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。

语法:

getsebool [-a] [布尔值条款]

SELinux介绍

setsebool

setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。

语法:

setsebool [-P] 布尔值=[0|1]

-P:直接将设置值写入配置文件,该设置数据将来会生效的。

查看bool命令:

getsebool [-a] [boolean]

semanage boolean –l

SELinux介绍

注意:第一个布尔值为生效的布尔值,第二个为存储在二进制数据库中的布尔值

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

设置bool值命令:

setsebool [-P] boolean value( on,off)

setsebool [-P] Boolean=value( 1,0 )

SELinux日志管理

yum -y install setroublesshoot*(重启生效)

将错误的信息写入/var/log/message(简单说明)

grep setroubleshoot /var/log/messages

sealert -l UUID

查看安全事件日志说明(详细的)

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

扫描并分析日志

SELinux帮助

yum -y install selinux-policy-devel(centos7)

yum –y install selinux-policy-doc (centos6)

更新man帮助数据库

mandb (centos7)| makewhatis(centos6)

man -k _selinux

练习

1、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问

(1)编辑httpd服务配置文件修改主目录路径并重启服务使之生效

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

SELinux介绍

[root@localhost ~]# systemctl restart httpd

(2)

[root@localhost ~]# chcon -R –reference /var/www/html /website/

或者修改selinux数据库

[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t "/website(/.*)?"

[root@localhost ~]# restorecon -R /website/

2、修改上述网站的http端口为9527,增加SELinux端口标签,使网站可访问

(1)添加selinux端口标签规则

[root@localhost ~]# semanage port -a -t httpd_port_t -p tcp 9527

(2)编辑httpd默认端口号

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

SELinux介绍

重启服务

[root@centos6 ~]# links 10.1.252.78:9527

删除端口号

[root@localhost ~]# semanage port -d -t httpd_port_t -p tcp 9527

3、启用相关的SELinux布尔值,使上述网站的用户student的家目录可通过http访问

在CentOS7上设置

[root@localhost ~]# vim /etc/httpd/conf.d/userdir.conf

SELinux介绍 SELinux介绍

[root@localhost ~]# systemctl restart httpd

注意:确定端口号是否正确(/etc/httpd/conf/httpd.conf 80)

[root@localhost ~]# su – NameLess

[NameLess@localhost ~]$ mkdir public_html

[NameLess@localhost ~]$ cd public_html

[NameLess@localhost public_html]$ echo welcome to NameLesshome > index.html

[NameLess@localhost public_html]$ exit

[root@localhost ~]# setfacl -m u

x /home/NameLess

[root@localhost ~]# chmod 711 /home/NameLess

在CentOS6上测试

[root@CentOS6 ~]# links 10.1.252.78/~NameLess

而反过来做实验

在6上设置

[root@CentOS6 ~]# /etc/httpd/conf/httpd.conf

SELinux介绍 SELinux介绍

[root@localhost ~]# systemctl restart httpd

[root@CentOS6 ~]# su – NameLess

[NameLess@CentOS6 ~]$ mkdir public_html

[NameLess@CentOS6 ~]$ cd public_html

[NameLess@CentOS6 public_html]$ echo welcome to NameLesshomeCentOS6.8 > index.html

[NameLess@CentOS6 public_html]$ exit

[root@CentOS6 ~]# iptables -F

[root@CentOS6 ~]# setfacl -m u:apache:x /home/NameLess

或者

[root@CentOS6 ~]# chmod 711 /home/NameLess

[root@CentOS6 ~]# setsebool -P httpd_enable_homedirs on(永久修改)

注意:在CentOS7上设置时因为此项并不起作用所以不需要设置(bug),但是如果在CentOS6上设置则需要开启此此项

[root@localhost ~]# links 10.1.249.73/~NameLess

查看更多关于【Linux系统】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
在CentOS上为Docker开启SELinux
div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, u

0评论2023-02-09512

?第五周作业
1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;[root@localhost ~]# grep-E ^[[:space:]]+ /boot/grub/grub.conf root (hd0,0)kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_L

0评论2017-02-05452

sed 替换、修改链接文件注意问题
sed 替换、修改链接文件注意问题#系统与版本[root@localhost~]# cat /etc/redhat-releaseCentOS release 6.8 (Final)[root@localhost~]# sed --versionGNU sed version 4.2.1Copyright (C) 2009 Free Software Foundation, Inc.This is free software; see th

0评论2016-12-23204

查看SELinux状态&关闭SELinux
1. 查看SELinux状态1.1 getenforcegetenforce命令是单词get(获取)和enforce(执行)连写,可查看selinux状态,与setenforce命令相反。setenforce命令则是单词set(设置)和enforce(执行)连写,用于设置selinux防火墙状态,如:setenforce 0用于关闭selinux防

0评论2016-12-0193

初识SElinux
一、SElinux(Secure Enhanced Linux):安全增强的LinuxSElinux是一个在内核中实践的强制访问控制(MAC)安全性机制,由美国国家安全局NSA(The National Security Agency)和SCC(SecureComputing Corporation的)开发的针对计算机基础结构安全开发的一个全

0评论2016-09-18121

SElinux
selinux 配置文件 修改就要重启targeted:用来保护常见的网路服务,仅有限进程受到selinux控制,只监控容易被入侵的进程。targeted 慢慢完善的法律 系统默认使用targetedCENTOS6CENTOS7 ZAIZHEGEWENJIAN或者 cat /etc/sysconfig/selinuxSELINUX一切皆对象objec

0评论2016-09-1469

关闭selinux(防火墙)方法分享
默认装完CentOS,Selinux是打开的,这个你基本都是需要关闭,查看当前selinux的状态后,就可以按以下方法关闭selnux了

0评论2015-07-15131

更多推荐