SELinux详解及其优缺点

SELinux简介:

       SELinux:Secure Enahanced Linux 安全增强的Linux

SELinux2.6版本的Linux内核中提供的强制访问控制(MAC)系统。对于目前可用的Linux安全模块来说,SELinux是功能最全面,而且测试最充分的,它是在20年的MAC研究基础上建立的。SELinux在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。

大部分使用SELinux的人使用的都是SELinux就绪的发行版,例如FedoraRedHatEnterpriseLinux(RHEL)、DebianCentos。它们都是在内核中启用SELinux的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用SELinux的功能。   

SELinux是一种基于域类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。  

众所周知,标准的UNⅨ安全模型是任意的访问控制“DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他!  

MAC情况下的安全策略完全控制着对所有资源的访问。这是MACDAC本质的区别。  

SELinux提供了比传统的UNⅨ权限更好的访问控制。

工作于Linux内核中


DAC:自主访问控制

基本要素:

    主体:主动的实体,用户、服务、进程等

    客体: 被动的实体,包括数据、文件等

    规则:主体对客体访问的策略集合

基本类型:

    DAC访问控制:自主访问控制

    通过权限列表(访问控制列表)来限定特定主体对特定客体可以执行什么操作。

特点:

    1、每个主体都拥有一个用户名或组来获取操作权限

    2、每个客体都拥有一个限定主体对其访问的访问控制列表

    3、访问时,基于访问控制列表检查主体用户标示以实现授权或拒绝。

进程的访问权限

    进程拥有超过其本该拥有的权限

管理员的访问权限

    管理员拥有超过其本该有用的权限

普通用户的访问权限


MAC:强制访问控制

特点:

    1、主体被分配一个安全等级 机密

    2、客体被分配一个安全等级 绝密

    3、访问时,对主体和客体的安全级别进行对比,最终获得授权或拒绝。

         sandbox 沙箱 虚拟化技术

模式切换:

得到当前的SELinux

[root@localhost ~]#getenforce
Enforcing

更改当前SELinux值,后面可跟1|0

[root@localhost ~]#setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

显示当前的SELinux信息

[root@localhost ~]#sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

[root@localhost ~]#sestatus -v
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted
 
Process contexts:
Current context:                unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context:                   system_u:system_r:init_t:s0
/sbin/mingetty                  system_u:system_r:getty_t:s0
/usr/sbin/sshd                  system_u:system_r:sshd_t:s0-s0:c0.c1023
 
File contexts:
Controlling term:               unconfined_u:object_r:user_devpts_t:s0
/etc/passwd                     system_u:object_r:etc_t:s0
/etc/shadow                     system_u:object_r:shadow_t:s0
/bin/bash                       system_u:object_r:shell_exec_t:s0
/bin/login                      system_u:object_r:login_exec_t:s0
/bin/sh                    system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty                    system_u:object_r:getty_exec_t:s0
/sbin/init                      system_u:object_r:init_exec_t:s0
/sbin/mingetty                  system_u:object_r:getty_exec_t:s0
/usr/sbin/sshd                  system_u:object_r:sshd_exec_t:s0

配置文件:/etc/sysconfig/selinux

[root@localhost ~]# cat /etc/sysconfig/selinux
# 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
  /etc/selinux/config

SELinux两种级别

strict:严格模式,每个进程都会受到SELinux的控制

targeted:宽松模式,仅有限的进程受到SELinux的控制

只监控容易被入侵的进程


查看文件安全标签(安全上下文)

[root@localhost ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Desktop
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Documents
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Downloads
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Music
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Pictures
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Public
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Templates
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Videos

查看进程安全标签

[root@localhost ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19344  1548 ?        Ss   13:36   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    13:36   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    13:36   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    13:36   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    13:36   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S    13:36   0:00 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S    13:36   0:00 [migration/1]
root          8  0.0  0.0      0     0 ?        S    13:36   0:00 [stopper/1]
root          9  0.0  0.0      0     0 ?        S    13:36   0:00 [ksoftirqd/1]
root         10  0.0  0.0      0     0 ?        S    13:36   0:00 [watchdog/1]
root         11  0.0  0.0      0     0 ?        S    13:36   0:00 [migration/2]
root         12  0.0  0.0      0     0 ?        S    13:36   0:00 [stopper/2]
root         13  0.0  0.0      0     0 ?        S    13:36   0:00 [ksoftirqd/2]
root         14  0.0  0.0      0     0 ?        S    13:36   0:00 [watchdog/2]
root         15  0.0  0.0      0     0 ?        S    13:36   0:00 [migration/3]
root         16  0.0  0.0      0     0 ?        S    13:36   0:00 [stopper/3]

SELinux为每个文件提供了安全标签,也为进程提供了安全标签

 

SELinux规则库

规则:哪种域能访问哪种或哪些种类型的文件

 

配置SELinux

SELinux是否启用

给文件重新打标签

设定某些布尔型特性

 

SELinux的状态

enforcing 强制开启 每个受限的进程都必然受限

permissive 启用 不会阻止访问,但会记录日志

disabled 关闭

 

getenforce 获取SELinux当前状态

setenforce 0|1

0:设置为:permissive

1:设置为:enforcing

此设定临时生效,重启后无效

 

给文件重新打标签

chcon  -R  递归打标签

还原文件的默认标签

restorecon  -R  递归还原标签

 

布尔型规则:

添加/删除进程或服务本身开启的功能模块

getsebool  -a 查看所有布尔值

[root@localhost ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
allow_console_login --> on
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
allow_daemons_use_tcp_wrapper --> off
allow_daemons_use_tty --> on
allow_domain_fd_use --> on
allow_execheap --> off
allow_execmem --> on
allow_execmod --> on
allow_execstack --> on

getsebool  -p  ftp_home_dir  on/off

将修改结果保存至本地磁盘

日志文件:/var/log/audit/audit.log

 

SELinux优点:

SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。  

对访问的控制彻底化  

特点1MAC(MandatoryAccessControl)―――对访问的控制彻底化  对于所有的文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。  

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

特点2TETypeEnforcement)―――对于进程只赋予最小的权限  Te概念在SELinux里非常的重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个叫domain的标签。Domain标签能够执行的操作也是由accessvector在策略里定好的。  

我们熟悉的apache服务器,httpd进程只能在httpd_t里运行,这个httpd_tdomain能执行的操作,比如能读网页内容文件赋予httpd_sys_content_t,密码文件赋予shadow_t,TCP80端口赋予http_port_t等等。如果在accessvector里我们不允许http_t来对http_port_t进行操作的话,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为httpd_sys_content_t的文件,httpd_t就不能用别的端口,也不能更改那些被标为httpd_sys_content_t的文件(readonly)。  

防止权限升级  

特点3domain迁移――防止权限升级  

在用户环境里运行点对点下载软件azureus,你当前的domainfu_t,但是,你考虑到安全问题,你打算让他在azureus_t里运行,你要是在terminal里用命令启动azureus的话,它的进程的domain就会默认继承你实行的shellfu_t。  

有了domain迁移的话,我们就可以让azureus在我们指定的azureus_t里运行,在安全上面,这种做法更可取,它不会影响到你的fu_t

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

特点4RBACrolebaseaccesscontrol)―――――对于用户只赋予最小的权限  对于用户来说,被划分成一些ROLE,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些ROLE可以执行那些domain也是在策略里设定的。ROLE也是可以迁移的,但是也只能按策略规定的迁移。

 

SELinux缺点:

虽然Linux比起Windows来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX一样,有以下这些不足之处。  

存在特权用户root  

任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。  

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

linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。  

对于「其他」这一类里的用户再细细的划分的话就没有办法了。  

SUID程序的权限升级  

如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。   DAC(DiscretionaryAccessControl)问题  

文件目录的所有者可以对文件进行所有的操作,这给系统整体的管理带来不便。  

对于以上这些的不足,防火墙,入侵检测系统都是无能为力的。  

在这种背景下,对于访问权限大幅强化的OSSELinux来说,它的魅力的无穷的。

 

       由于本人对于SELinux理解有限,也是参考了大量文档后所写的此文章,若果有对SELinux有深入了解的朋友可以一起交流,或者本文有理解有误的地方,欢迎留言指出

 

原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/76648

(0)
Linux.rookieLinux.rookie
上一篇 2017-05-21
下一篇 2017-05-21

相关推荐

  • btrfs初步应用

    前言 一种技术要知其然,还要知其所以然。 Btrfs文件系统 Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在Linux操作系统,采用GPL授权。Oracle于2007年对外宣布这项计划,并发布源代码,在2014年8月发布稳定版目标是替换Linux目前的ex…

    Linux干货 2016-05-22
  • DNS服务和搭建

    DNS服务:        名字解析        DNS 服务        实现主从服务器        实现子域        实现view  …

    2017-04-16
  • 用户管理基本操作

    1.创建组distro,其GID为2016[root@localhost ~]# groupadd -g 2016 distro2.创建用户mandriva,其ID号为1005;基本组为distro[root@localhost ~]# useradd -u 1005 mandriva -g 20163.创建用户mageia,其ID号为1…

    Linux干货 2017-09-04
  • SHELL脚本基础速览

    变量的赋值: Shell变量赋值从右到左进进行赋值 格式:NAME=value 变量的声明: export 变量名  export NAME=value declare –x 变量名 declare –x NAME=value   readonly 变量名  特定情况下需要使用到只读变量 readonly NAME=v…

    2017-04-15
  • 08.04 笔记总结

    1.ps axo  user,ruser,group,rgroup,cmd  //  ruser  表示程序发起的用户,一般是指系统当前的用户  //  user  表示程序的所有者。在大数情况下,两个用户都是系统当前的用户, 之后当程序被赋予suid的时候,可能user会发生变化。 2.…

    Linux干货 2016-08-08
  • 马哥教育网络班22期+第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。    网桥:工作在OSI模型的数据链路层,将两个局域网连起来,根据MAC地址来转发帧,可以看作是一个“低层的路由器”(路由器工作在OSI模型的网络层,根据网络地址如IP地址进行转发)。它可以有效地联接两个LAN,使本地通信限制在本网段内,并…

    Linux干货 2016-11-17