linux敏感标记权限,闲话Linux系统安全(二)——强制访问控制(MAC)
linux敏感标记权限,闲话Linux系统安全(⼆)——强制访问控
制(MAC)
安全秘笈第⼆式——不安全的特殊权限和强制访问控制(MAC)
在DAC的机制中,不管是所有权加权限的管理办法,还是⽂件系统访问控制列表(facl),都是⾮常强⼤的访问控制机制,均可以对⽂件资源进⾏⽐较有效的访问控制。但DAC的⾃主性太强,可以说⽂件资源的安全在很⼤的程度上取决于使⽤者个⼈的意志,因此这种安全似乎就被主观化了。尤其是对于root⽤户⽽⾔,不管是权限和所有权的限制,还是facl的管理控制,都仅仅能够限制root的误操作⽽已。
在CentOS或RHEL系统中,每⼀个服务都需要以守护进程的⽅式运⾏起来并在后台监听指定的套接字,⽐⽅说:实现DNS服务的bind软件需要⼀个名为named系统⽤户启动名为named的守护进程;MySQL服务的启动也需要⼀个名为mysql的系统⽤户来启动⼀个名为mysqld 的守护进程,等等。如果类似这样的⽹络服务的TCP或UDP的会话被***者劫持,那么***者就可以冒⽤这些系统⽤户的⾝份。有⼈会说,没有什么⼤不了的嘛,这些连系统都⽆法登录的系统⽤户被劫持了也不会有什么危险啊。但是请记住,在CentOS或RHEL的⽂件系统中有三个特殊权限,即:SUID、SGID和Sticky,其中SGID如果设置在⽬录上,则在该⽬录中创建的所以新⽂件的属组都是从该⽬录上继承的该⽬录的属组;如果设置在⽂件上,则在该⽬录中如果包含了可执⾏⽂件的话,⽆论是谁发起的执⾏进程,改进程的属组都是该⽬录的属组。
Sticky也被翻译为“粘滞位”,只能设置在⽬录上。凡是被设置了粘滞位的⽬录,即便⽤户对该⽬录有所以的rwx的权限,也只能管理属主是其⾃⾝的那些⽂件,禁⽌了对属主不为⾃⼰的所以⽂件的修改和删除等写操作。可以说这两个特殊权限还是有⼀定的⽅便管理和安全保证作⽤的。
但是,SUID可是⼀把⾮常锋利的双刃剑,⽤好了,⽅便管理所向披靡;⽤不好,那可就是为他⼈做嫁⾐⽽置⾃⼰于死地了。
为什么这么说呢?我们⼀起来分析⼀下SUID这个特殊权限位。SUID只能设置在⼆进制⽂件上,也就是在CentOS或RHEL中的具有ELF可执⾏权限的⼆进制⽂件,我们所编写的shell脚本⼀般是⽆法设置这个权限的,这是⼀个很严格的限制。⼀旦在可执⾏的⼆进制⽂件上添加了SUID,则所有⽤户在执⾏这个程序以后,都是以这个⽂件的所有者的⾝份来进⾏。现在⼤家明⽩了么?在CentOS或RHEL中,根⽂件系统下的⽂件的属主绝⼤多数都是root,包括那些⼆进制⽂件,所以不管你是什么⽤户,⼀旦执⾏了设置了SUID的⼆进制⽂件,也就意味着能够以root⽤户的⾝份操纵这个⼆进制⽂件去访问所有属主为root的⽂件了。所以即便是⽆法登录到系统的系统⽤户,⼀旦因为这样的问题⽽获得root的⾝份之后,仍然可以为所欲为的。
⽐如说,CentOS或RHEL中的DNS服务在运⾏过程中,其进程会话被劫持,也就意味着***者已经获得了named⽤户的⾝份。此时,如果***者以named⽤户的⾝份,在/var/named/slaves⽬录中上传了⼀个
带有SUID权限的⼆进制程序vim,这个vim跟系统中的vim是⼀模⼀样的,所需要的库也是⼀模⼀样的。于是,每次执⾏这个vim⽂件来查看系统中的其他⽂本⽂件的时候,都好像是root⽤户在执⾏这样的操作,那么接下来修改将⽂件修改成什么样⼦其实就看***者的⼼情了。
说了这么多,其实主要是想说明这样⼀个问题:传统的DAC固然能够有效的控制⽂件的访问,但是⽆法解决因为SUID等因素导致的root⾝份盗⽤带来的问题。
鉴于此,在防⽌root⽤户对资源误操作和权限滥⽤的问题上,就迫切需要⾏之有效的管理办法或解决⽅案,以增强系统的安全性和资源访问的安全性。
⼈们⾸先在⽂件系统上打起了主意。⽂件系统中被引⼊了⼀个新的挂载选项——nosuid,该选项不允许⾮root⽤户向⽂件系统中复制带有SUID的权限的⽂件,从⽽在⼀定程度上保证了root⾝份盗⽤的问题。但是这仍然是治标不治本的⽅法,最最核⼼的问题是root权限太⼤的问题。
于是,⼈们提出了强制访问控制(Mandatory Access Control——MAC,以下简称MAC)这⼀安全概念。MAC最早主要⽤于军⽅的应⽤中,通常与DAC结合使⽤。
⾸先让我们来了解两个⾄关重要的术语:白羊座女生
主体:
通常指⽤户,或由⽤户发起运⾏的进程或⽤户正在使⽤的设备。主体主动发起对资源的访问,它是系统中信息流的启动者。
客体:
通常是指信息的载体或从其他主体或客体接收信息的实体。主体有时也会成为访问或受控的对象,如⼀个主体可以向另⼀个主体授权,⼀个进程可能控制⼏个⼦进程等等,这时受控的主体或⼦进程也通常被认为是⼀种客体。
MAC是利⽤策略将访问控制规则“强加”给访问主体的,即系统强制主体服从访问控制策略。MAC的主要作⽤对象是所有主体及其所操作的客体(如:进程、⽂件等)。MAC为这些主体及其所操作的客体提供安全标记,这些标记是实施强制访问控制的依据。
系统通过⽐较主体和客体的安全标记来判断⼀个主体是否能够访问其要操作的客体。⽤户发起的进程⽆法改变其⾃⾝及其它客体的安全标记,利⽤这样的机制,系统可以⽐较有效地防⽌特洛伊******以及root⾝份冒⽤或盗⽤等安全威胁。
MAC⼀般与DAC共同使⽤,两种访问控制机制的过滤结果将累积,以此来达到更佳的访问控制效果。也就是说,⼀个主体只有通过了DAC 限制检查与MAC限制检查的双重过滤装置之后,才能真正访问
某个客体。⼀⽅⾯,⽤户可以利⽤DAC来防范其它⽤户对那些所有权归属于⾃⼰的客体的***;另⼀⽅⾯,由于⽤户不能直接改变MAC属性,所以MAC提供了⼀个不可逾越的、更强的安全保护层以防⽌其它⽤户偶然或故意地滥⽤DAC。
MAC的强制访问策略为每个⽤户、进程及⽂件赋于⼀个安全访问级别,即:
最⾼秘密级(Top Secret,⼀般标记为T);
秘密级(Secret,⼀般标记为S);
机密级(Confidential,⼀般标记为C);
⽆级别级(Unclassified,⼀般标记为U);
其级别为从⾼到低依次为:T>S>C>U,系统根据主体和客体的敏感标记来决定访问模式。通常情况下,访问模式包括:
下读(read down):⽤户级别⼤于⽂件级别的读操作;
上写(Write up):⽤户级别⼩于⽂件级别的写操作;
电脑没有声音了怎么恢复
下写(Write down):⽤户级别⼤于⽂件级别的写操作;
上读(read up):⽤户级别⼩于⽂件级别的读操作;
依据Bell-Lapadula安全模型所制定的原则是:利⽤不上读/不下写来保证数据的保密性。即不允许低访问级别的⽤户读⾼访问级别的信息,也不允许⾼访问级别的信息写⼊低访问级别区域,禁⽌信息从⾼访问级别流向低访问级别。MAC通过这种梯度安全标签实现信息的单向流通。
依据Biba安全模型所制定的原则是:利⽤不下读/不上写来保证数据的完整性。在实际应⽤中,完整性保护主要是为了避免应⽤程序修改某些重要的系统程序或系统数据库。
可能⼤家觉得我这⾥说的是天花乱坠,真的有这么神奇么?答案是肯定的。在MAC理论出现后不久,很多⼈和团体本着这个⽬的开始研究⽤于实现强制访问控制的安全模块。美国国家安全局(NSA,The National Security Agency)和(SCC,Secure Computing Corporation)在Linux社区的帮助下开发了这样⼀个强制访问控制的安全模块,在2000年时,以GNU GPL发布,Linux内核2.6版本后集成在内核中。这个安全模块通常被⼈们称为SELinux,即(Secure Enhanced Linux,安全增强的Linux)。
SELinux有三种⼯作模式:
Enforcing——强制模式
表⽰SELinux正在运⾏,已经开始执⾏策略中的规则,并且开始正确的限制domain/type了
Permissive——警告模式(运⽤排错中)
表⽰SELinux正在运⾏,不过仅会有警告信息并不会实际限制domain/type的存取。这种模式作为SELinux的debug之⽤
Disabled——禁⽤模式
表⽰SELinux已经关闭,SELinux并没有实际运⾏。
注意:从强制模式切换到禁⽤模式,或者禁⽤模式切换到强制模式,都必须等到计算机下次启动的时候才会⽣效。但是强制模式和警告模式在切换时,⽴刻⽣效。
SELinux有四种可选的策略结果集:
strict:这种策略结果集主要应⽤于RHEL5和Centos5,系统中的每个进程都受到SELinux的控制。
targeted: 这种策略结果集主要⽤来保护常见的⽹络服务,SELinux仅对有限进程进⾏控制,也只监控容易被***的进程,RHEL4中只保护13个服务,RHEL5保护88个服务。
minimum:这种策略结果集主要应⽤于Centos7,这是修改过的targeted,只对选择的⽹络服务进⾏限制和保护。
mls: 这种策略结果集主要提供MLS(多级安全)机制的安全性保证。
在/etc/selinux/config⽂件中定义了该操作系统中SELinux的⼯作模式以及SELinux所⽀持使⽤的策略结果集:CentOS5.11系统:# 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 - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
#    targeted - Only targeted network daemons are protected.
#    strict - Full SELinux protection.
SELINUXTYPE=targeted
CentOS6.8系统中:# 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
CentOS7.2系统中:# 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 three two values:
#    targeted - Targeted processes are protected,
#    minimum - Modification of targeted policy. Only selected processes are protected.
#    mls - Multi Level Security protection.
SELINUXTYPE=targeted
通过对⽐,我们可以发现,在不同的CentOS的发⾏版本中,如果我们按照默认的配置安装系统,那么SELinux在系统中就是⼯作在强制模式(enforcing)下;另外,虽然各个发⾏版CentOS所⽀持的SELinux的策略结果集的种类和数量不尽相同,但是默认的策略结果集都是targeted。因为strict策略结果集过于严格⽽显得不灵活,minimum策略结果集和mls策略结果集稳定性不⾜,所以均未加以应⽤。
只要SELinux的⼯作模式是Enforcing,根据SELinux所选择的策略结果集,给所有⽂件和进程都打上安全标签,即:安全上下⽂(security context)。这⼀⾏为是在将SELinux的模式由disabled模式更改为enforcing模式后的第⼀次启动时完成的。
安全上下⽂由五个元素组成:user:role:type:sensitivity:category。
user:指⽰登录系统的⽤户类型,如:root,user_u,system_u,多数本地进程都属于⾃由(unconfined)进程;
role:定义⽂件、进程和⽤户的⽤途,如:⽂件:object_r,进程和⽤户:system_r;
type:指定主体和客体的类型,规则中定义何种进程域访问何种⽂件类型,targeted策略结果集基于ty
pe实现,如:
admin_home_t,public_content_t(多服务共⽤);
sensitivity:限制访问的需要,由组织定义的分层安全级别,如:unclassified,confidential ,secret,top secret, ⼀个对象有且只有⼀个sensitivity,分0-15级,s0最低,targeted策略结果集默认使⽤s0;
category:对于特定组织划分不分层的分类,如:FBI Secret,NSA secret,⼀个对象可以有多个categroy,c0-c1023共1024个分类,targeted 策略结果集不使⽤category。
实际上下⽂:存放在⽂件系统中,但在CentOS5系列发⾏版本中,只是标识了前三个元素,在后续的CentOS6和CentOS7系列发⾏版本中也只是标识了前四个元素。⽽标识归标识,真正起作⽤的也只有第三个字段,该字段对于⽂件来说称为“类型”,对于进程来说称
为“域”。可以使⽤ls -Z命令来查看⽂件的安全上下⽂;可以使⽤ps -Z命令来查看进程的安全上下⽂:
在CentOS5.11中的查看/root⽬录的结果:[root@CentOS511A ~]# ls -Z
-rw-------  root root system_u:object_r:user_home_t    anaconda-ks.cfg
-rw-r--r--  root root root:object_r:user_home_t        install.log
-rw-r--r--  root root root:object_r:user_home_t        install.log.syslog
在CentOS6.8中的查看/root⽬录的结果:[root@Centos68A ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-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
在CentOS7.2中的查看/root⽬录的结果:[root@Centos72A ~]# ls -Z
天津购车摇号
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
我们可以发现,即便是CentOS5、6、7三个系列的发⾏版本中SELinux全都默认使⽤了targeted策略结果集,但是他们所应⽤的策略结果集其实是不同的。[root@CentOS511A ~]# ls /etc/selinux/targeted/policy/
policy.21[root@Centos68A ~]# ls /etc/selinux/targeted/policy/
policy.24[root@Centos72A ~]# ls /etc/selinux/targeted/policy/
policy.29
期望(默认)上下⽂:存放在⼆进制的SELinux策略结果集(映射⽬录和期望安全上下⽂)中。
下⾯是在CentOS5.11、6.8、7.2上查看的默认上下⽂设置,只列举了根的⼀级⼦⽬录的相关内容,因内容太多,其余的均已省略。[root@CentOS511A ~]# semanage fcontext -l
SELinux fcontext              type            Context
/.*                    all files    system_u:object_r:default_t:s0
/xen(/.*)?                  all files    system_u:object_r:xen_p_w_picpath_t:s0
/nsr(/.*)?                  all files    system_u:object_r:var_t:s0
/mnt(/[^/]*)                  symbolic link  system_u:object_r:mnt_t:s0
/mnt(/[^/]*)?                directory    system_u:object_r:mnt_t:s0
/
不显示soundmax音频lib(64)?/dbus-1/dbus-daemon-launch-helper  regular file    system_u:object_r:bin_t:s0 /lib/.*                    all files    system_u:object_r:lib_t:s0
/bin/.*                    all files    system_u:object_r:bin_t:s0
/usr/.*                    all files    system_u:object_r:usr_t:s0
/var/.*                    all files    system_u:object_r:var_t:s0
/dev/.*                  all files    system_u:object_r:device_t:s0
/etc/.*                    all files    system_u:object_r:etc_t:s0
/opt/.*                    all files    system_u:object_r:usr_t:s0
/srv/.*                    all files    system_u:object_r:var_t:s0
/tmp/.*                    all files    <>
/sys/.*                  all files    <>
(……后续内容省略)[root@Centos68A ~]# semanage fcontext -l
SELinux fcontext              type      Context
空调辅热是什么意思
/.*                      all files    system_u:object_r:default_t:s0
/[^/]+                    regular file    system_u:object_r:etc_runtime_t:s0
/a?quota\.(user|group)            regular file    system_u:object_r:quota_db_t:s0
/nsr(/.*)?                  all files    system_u:object_r:var_t:s0
/sys(/.*)?                  all files    system_u:object_r:sysfs_t:s0
/xen(/.*)?                  all files    system_u:object_r:xen_p_w_picpath_t:s0
/mnt(/[^/]*)                  symbolic link  system_u:object_r:mnt_t:s0
/mnt(/[^/]*)?                directory      system_u:object_r:mnt_t:s0
/bin/.*                    all files    system_u:object_r:bin_t:s0
/dev/.*                    all files    system_u:object_r:device_t:s0
/
lib/.*                    all files    system_u:object_r:lib_t:s0
/srv/.*                    all files    system_u:object_r:var_t:s0
/var/.*                    all files    system_u:object_r:var_t:s0
/tmp/.*                    all files    <>
/usr/.*                    all files    system_u:object_r:usr_t:s0
/opt/.*                    all files    system_u:object_r:usr_t:s0
/etc/.*                    all files    system_u:object_r:etc_t:s0
/root(/.*)?                  all files    system_u:object_r:admin_home_t:s0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。