当前位置 主页 > 服务器问题 > Linux/apache问题 >

    SELINUX工作原理详解(6)

    栏目:Linux/apache问题 时间:2020-02-05 21:37

         SELinux allow规则如之前的例子在SELinux中实际上都是授予访问权的,真正的挑战是如何保证数以万计的访问正确授权,只授予必须的权限,实现尽可能的安全。

    7.1 标准Linux安全中的setuid程序

          精通用户joe想安全地修改现有的密码问题,Linux解决这个问题的方法是通过给passwd赋一个setuid值,使其执行时具有root权限,如果你在一个普通Linux系统上列出密码文件,你看到的会是:

    # ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 41292 Sep 7 2012 /usr/bin/passwd 

           这里注意两件事,第一个是在所有者权限的x位置被设置为s了,这就是所谓的setuid位,意思是任何执行这个文件的进程,它的有效UID(即用户ID)将会被改为文件所有者。这里,root是文件所有者,因此当执行密码程序时实际上将会以root用户的ID运行。其执行过程如下图所示:

           从上面的分析中可以看出,passwd以root权限的身份运行, 它可以访问系统的任何资源,这给系统带来了安全问题,其实它只需要访问shadow及其相关的文件就可以了。而且shadow只需要接受passwd的访问即可。这在标准Linux中是无法做到的,而TE(类型强制)可实现此功能。

    8. 基于角色的访问控制

         SELinux也提供了一种基于角色的访问控制(RBAC),SELinux的RBAC特性是依靠类型强制建立的,SELinux中的访问控制主要是通过类型实现的,角色基于进程安全上下文中的角色标识符限制进程可以转变的类型,如此,策略编写器可以创建一个角色,允许它转变为一套域类型(假设类型强制规则允许转变),从而定义角色的限制。

    9. SELinux中的多级安全(Multi-Level Security)

        类型强制(Type Enforcement)无疑是SELinux引入的最重要的强制访问控制(MAC)机制,然而,在某些情况下,主要是保密控制应用程序的一个子集,传统的多级安全(MLS)MAC与类型强制一起使用显得更有价值,在这些情况下,SELinux总是包括某种格式的MLS功能,MLS特性是可选的,在SELinux的两个MAC机制中,它通常不是最重要的那个,对大多数安全应用程序而言,包括许多非保密数据应用程序,类型强制是最适合的安全增强的机制,尽管如此,MLS对部分应用程序还是增强了安全性。

         在大多数SELinux策略中,敏感度(s0,s1,...)和范畴(c0,c1,...)使用通配名,将它留给用户空间程序和程序库,以指定有意义的用户名。(例如:s0可能与UNCLASSIFIED 关联,s1可能与SECRET关联)
         为了支持MLS,安全上下文被扩展了,包括了安全级别,如:

    user:role:type:sensitivity[:category,...] [-sensitivity[:category,...]] 

    例子如下所示:

    root@luohj-virtual-machine:~# ps -aZ 
    LABEL                    PID  TTY  TIME  CMD 
    unconfined_u:system_r:insmod_t:s0-s0:c0.c255 4940 pts/0 00:00:00 passwd 

         注意MLS安全上下文至少必须有一个安全级别(它由单个敏感度和0个或多个范畴组成),但可以包括两个安全级别,这两个安全级别分别被叫做低(或进程趋势)和高(或进程间隙),如果高安全级别丢失,它会被认为与低安全级别的值是相同的(最常见的情况),实际上,对于客体和进程而言,低和高安全级别通常都是相同的,通常用于进程的级别范围被认为是受信任的主体(即进程信任降级信息)或多层客体,如一个目录,它又包括了不同安全级别的客体。为了使描述简单,假设所有的进程和客体都只有一个安全级别。