linux基础学习之SElinux

1、SElinux简介

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

2、SElinux和普通linux区别:

DAC:Discretionary Access Control自由访问控制

MAC:Mandatory Access Control 强制访问控制

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

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

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

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

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

没有SElinux的linux系统就是DAC模式的,在该模式下,进程是无约束的,如以root身份运行的进程拥有一切权限

在SELinux中没有root这个概念,安全策略是由管理员来定义的,任何软件都无法取代它。这意味着那些潜在的恶意软件所能造成的损害可以被控制在最小。一般情况下只有非常注重数据安全的企业级用户才会使用SELinux。

    SELinux提供了一种灵活的强制访问控制(MAC)系统,且内嵌于Linux Kernel中。SELinux定义了系统中每个【用户】、【进程】、【应用】和【文件】的访问和转变的权限,然后它使用一个安全策略来控制这些实体(用户、进程、应用和文件)之间的交互,安全策略指定如何严格或宽松地进行检查。

    只有同时满足了【标准Linux访问控制】和【SELinux访问控制】时,主体才能访问客体。

MAC与DAC的最大区别就是:DAC只针对用户的权限,如,root,对所有文件都有至高的权限,或者一个文件的权限是664,那么这个文件的拥有者就拥有了读写的权限,而在MAC的模式下,即使是root,在使用不同程序时,你所取得的权限不一定是root,而要看当时该程序的设定而定,如此来,MAC体系中,针对的就是进程而不是用户的权限。

3、SElinux的运行机制

当一个subject(如: 一个应用)试图访问一个object(如:一个文件),Kernel中的策略执行服务器将检查AVC (Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached)。如果基于AVC中的数据不能做出决定,则请求安全服务器,安全服务器在一个矩阵中查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问,拒绝消息细节位于/var/log/messages中。

SElinux.png

SElinux工作过程.jpg

4、selinux的配置文件:

/etc/selinux/config或者/etc/sysconfig/selinux

[10:59 root@Centos6.8/var/ftp/pub]# ll /etc/selinux/config 
-rw-r--r--. 1 root root 458 Jul 20 02:18 /etc/selinux/config
[10:59 root@Centos6.8/var/ftp/pub]# ll /etc/sysconfig/selinux 
lrwxrwxrwx. 1 root root 17 Jul 20 02:18 /etc/sysconfig/selinux -> ../selinux/config

该配置文件定义了:

1) 打开或关闭SELinux

    2) 设置系统执行哪一个策略(policy)

    3) 设置系统如何执行策略(policy)

[19:48 root@Centos6.8/usr/src/linux]# cat /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

5、SElinux的策略类型

SELinux有四种策略类型:

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

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

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

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

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

其中centos5,6只有targeted和strick两种策略,一般默认是targeted策略,主要针对一些网络服务来进行监管,如http、samba等

6、查看SElinux的安全上下文(secure context)

如果开启了SElinux,在10为权限后面会有一个点(.)的标志

[10:59 root@Centos6.8/var/ftp/pub]# ll
total 12
drwxr-xr-x. 2 root root 4096 Sep 14 09:57 hello
-rw-r--r--. 1 root root 1192 Sep 14 09:58 ks6.cfg
-rw-r--r--. 1 root root 1368 Sep 14 10:11 mylinux-ks.cfg
[11:05 root@Centos6.8/var/ftp/pub]# ll -Z
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 hello
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 ks6.cfg
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 mylinux-ks.cfg

7、安全上下文元素

所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文:

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

user:role:type:sensitivity:category

User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程【以XXX_u表示】
Role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r【以XXX_r表示】
Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用:public_content_t【以XXX_t表示】
Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级,s0最低,Target策略默认使用s0
Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret, 一个对象可以有多个categroy,c0-c1023共1024个分类,Target 策略不使用cateaory

在targeted模式下,主要的关键策略就是看domain/type是否符合已定的策略,所谓的domain值得就是程序本身,而type指的是file type,只有file type在domain本身可执行的范围内,该程序才能进程访问文件,当然就算符合了策略,还要看文件本身的权限,等于有两层保险。

8、SElinux的相关命令操作

(1)

getenforce: 获取selinux当前状态

sestatus:查看selinux状态

setenforce 0|1

0: 设置为permissive(每个受限的进程违规操作不会被禁止,但会被记录于审计日志)

1: 设置为enforcing(强制,每个受限的进程都必然受限)

(2)

给文件重新打安全标签:

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

chcon[OPTION]… –reference=RFILE FILE…

-R:递归打标;

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

restorecon [-R] /path/to/somewhere

(3)

semanage:默认安全上下文查询与修改,semanage来自policycoreutils-python包,要使用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(/.*)?’

查看端口标签

semanage port –l

添加端口

semanage port -a -t port_label-p tcp|udpPORT

semanage port -a -t http_port_t -p tcp 9527

删除端口

semanage port -d -t port_label-p tcp|udpPORT

semanage port -d -t http_port_t -p tcp 9527

修改

semanage port -m -t port_label-p tcp|udpPORT

semanage port -m -t http_port_t-p tcp9527

(4)

布尔型规则:

getsebool

setsebool

查看bool命令:

getsebool[-a] [boolean]

semanage boolean –l

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

设置bool值命令:

setsebool [-P] booleanvalue

setsebool [-P] Boolean=value

原创文章,作者:麦德良,如若转载,请注明出处:http://www.178linux.com/46436

(0)
上一篇 2016-09-15 22:23
下一篇 2016-09-15 23:58

相关推荐

  • 永远不要让自己停下

    曾几何时,我还是刚出象牙塔的小男孩。想想现在,经过4年的洗礼,我不再是小男孩了。可是,我却发现自己变得越来越懒,守着那丁点的知识。 我早已坐吃山空而不自知,早已落后于时代的趋势而不自知。时代需要一个勤奋而专注的我,需要一个不懈怠的我。 如果,我不继续前进,等待我的只有堕落。逆水行舟不进则退,不逼自己一把,永远不知道自己的潜力有多大。 我希望说,再见,懈怠而懒…

    Linux干货 2016-10-07
  • 第7天:磁盘文件管理

    http://note.youdao.com/yws/public/redirect/share?id=57ab13d4749920de1fbb0d4953fcd21b&type=false

    Linux干货 2016-08-18
  • 文本处理工具

    1.cat 主要三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename << EOF ….>EOF (只能创建新文件,不能编辑已有文件);cat向已经存在的文件追加内容:cat >> file <<EOF…>EOF 3.将几…

    2017-07-29
  • Linux虚拟网络接口-Bonding 配置

    一、bonding 的定义     bonding是通过将同一设备的多个物理网卡绑定到一个虚拟网卡上,再对外提供连接。对于外端来说,多个物理网卡共享虚拟网卡的IP和mac地址,也就表现为一个网卡设备。通过bonding技术可以实现高可用或者负载均衡。     bonding有7种工作模式:&nbsp…

    Linux干货 2017-07-02
  • HSRP vs VRRP

    HSRP:(Hot Standby Router Protocol)-热备份路由协议 是cisco平台一种特有的技术,是cisco的私有协议。 VRRP:(Virtual Router Redundancy Protocol)-虚拟路由冗余协议 是国际标准,由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议。 ----------------…

    Linux干货 2016-10-19
  • bash脚本编程class2

    bash脚本class2—循环语句的使用      一.三种循环语句以及其具体使用方法   我们知道,在shell脚本编程过程中,为了实现逻辑关系的运算,有三种执行命令的顺序:顺序执行,选择执行,循环执行。通过if,case这类语句可以实现条件筛选后执行命令,这次课程中所学的主要知识点为循环语句的三种使用方式:for,…

    Linux干货 2016-08-19