4.13. 多级别安全(MLS)


多级安全技术指的是一种安全策略,它强制执行Bell-La Padula Mandatory Access Model。在 MLS 下,用户和进程称为 主体,而系统的文件、设备和其他被动组件称为 对象。主体和对象都标记为安全级别,该级别要求主体的授权或对象分类。每个安全级别都由一个 敏感度 组成 例如,内部发行时间表按照具有机密敏感度的内部文件类别提交。
图 4.1 “国家级别” 显示美国国防社区最初设计的许可级别。关于上述内部时间表示例,只有获得机密许可的用户才能查看机密类别中的文件。但是,只有保密许可的用户不得查看需要更高等级或资格的文件;只允许他们读取较低级别的文件,并且能够访问更高等级的文件。

图 4.1. 国家级别

国家级别
图 4.2 “使用 MLS 允许的数据流” 显示在"Secret"安全级别下运行的对象和具有不同安全级别的各种对象之间的所有允许的数据流。简而言之,Bell-LaPadula 模型强制执行两种属性: 无读写

图 4.2. 使用 MLS 允许的数据流

使用 MLS 允许的数据流

4.13.1. MLS 和系统特权

MLS 访问规则始终与传统的访问权限(文件权限)结合使用。例如,如果具有安全等级为 "Secret" 的用户使用 Discretionary Access Control(DAC)来阻止其他用户对文件的访问,这也会阻止具有安全等级 "Top Secret" 的用户访问。务必要记住,在 DAC 规则 检查 SELinux MLS 策略规则。较高的安全许可不会自动授予任意浏览文件系统的权限。
拥有顶级别的用户不会自动获得多级系统的管理权限。虽然这些用户可能可以访问计算机上的所有信息,但是这与具有管理权是不同的。

4.13.2. 在 SELinux 中启用 MLS

注意
不建议在运行 X Window 系统的系统上使用 MLS 策略。
按照以下步骤在您的系统上启用 SELinux MLS 策略。

过程 4.19. 启用 SELinux MLS 策略

  1. 安装 selinux-policy-mls 软件包:
    ~]# yum install selinux-policy-mls
  2. 在启用 MLS 策略之前,必须使用 MLS 标签重新标记文件系统中的每个文件。重新标记文件系统时,可能会拒绝访问受限域,这可能会妨碍系统正确启动。要防止发生这种情况,请在 /etc/selinux/config 文件中配置 SELINUX=permissive。另外,通过配置 SELINUXTYPE=mls 来启用 MLS 策略。您的配置文件应如下所示:
    # 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=permissive
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=mls
    
  3. 确保 SELinux 以 permissive 模式运行:
    ~]# setenforce 0
    ~]$ getenforce
    Permissive
    
  4. 使用 fixfiles 脚本创建包含 the -F 选项的 /.autorelabel 文件,以确保在下次重启时重新标记文件:
    ~]# fixfiles -F onboot
  5. 重启您的系统。在下一次启动期间,将根据 MLS 策略重新标记所有文件系统。标签进程使用适当的 SELinux 上下文标记所有文件:
    *** Warning -- SELinux mls policy relabel is required.
    *** Relabeling could take a very long time, depending on file
    *** system size and speed of hard drives.
    ***********
    
    底部行中的每个 * (星号)字符都代表已标记了 1000 个文件。在上例中,eleven * 字符代表 11000 文件,它们已被标记。标记所有文件所需的时间取决于系统上的文件数量以及硬盘驱动器的速度。在现代系统中,此过程只需 10 分钟。标签过程完成后,系统将自动重新引导。
  6. 在 permissive 模式中,SELinux 策略不会被强制实施,但是仍会记录在 enforcing 模式运行时会被拒绝的操作。在更改为 enforcing 模式之前,以 root 身份输入以下命令,以确认 SELinux 在上一次启动期间没有拒绝操作。如果在上一次启动期间 SELinux 没有拒绝操作,这个命令不会返回任何输出。如果在引导过程中 SELinux 拒绝访问,请参阅 第 11 章 故障排除
    ~]# grep "SELinux is preventing" /var/log/messages
  7. 如果 /var/log/messages 文件中没有拒绝信息,或者在 /etc/selinux/config 文件中配置 SELINUX=enforcing
    # 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=mls
    
  8. 重启您的系统并确保 SELinux 以 enforcing 模式运行:
    ~]$ getenforce
    Enforcing
    
    启用了 MLS 策略:
    ~]# sestatus |grep mls
    Policy from config file:        mls
    

4.13.3. 使用特定 MLS 范围创建用户

按照以下步骤创建具有特定 MLS 范围的新 Linux 用户:

过程 4.20. 使用特定 MLS 范围创建用户

  1. 使用 useradd 命令添加新 Linux 用户,并将新的 Linux 用户映射到现有的 SELinux 用户(本例中为 staff_u):
    ~]# useradd -Z staff_u john
  2. 为新创建的 Linux 用户分配密码:
    prompt~]# passwd john
  3. 以 root 身份输入以下命令,以查看 SELinux 和 Linux 用户之间的映射。输出应如下:
    ~]# semanage login -l
    Login Name           SELinux User         MLS/MCS Range        Service
    
    __default__          user_u               s0-s0                *
    john                 staff_u              s0-s15:c0.c1023      *
    root                 root                 s0-s15:c0.c1023      *
    staff                staff_u              s0-s15:c0.c1023      *
    sysadm               staff_u              s0-s15:c0.c1023      *
    system_u             system_u             s0-s15:c0.c1023      *
  4. 为用户 john 定义特定范围:
    ~]# semanage login --modify --range s2:c100 john
  5. 再次查看 SELinux 和 Linux 用户之间的映射。请注意,用户 john 现在定义了一个特定的 MLS 范围:
    ~]# semanage login -l
    Login Name           SELinux User         MLS/MCS Range        Service
    
    __default__          user_u               s0-s0                *
    john                 staff_u              s2:c100              *
    root                 root                 s0-s15:c0.c1023      *
    staff                staff_u              s0-s15:c0.c1023      *
    sysadm               staff_u              s0-s15:c0.c1023      *
    system_u             system_u             s0-s15:c0.c1023      *
  6. 如果需要,请输入以下命令更正 john 主目录中的标签:
    ~]# chcon -R -l s2:c100 /home/john

4.13.4. 设置 Polyinstantiated 目录

/tmp/var/tmp/ 目录通常由所有程序、服务和用户使用。但是,此类设置使得这些目录容易遭受竞争条件攻击,或者存在基于文件名的信息泄漏。SELinux 以 多形目录 的形式提供解决方案。这实际上意味着 /tmp/var/tmp/ 都被实例化,使它们对每个用户都会出现私有状态。启用目录实例化后,每个用户的 /tmp/var/tmp/ 目录都会自动挂载在 /tmp-inst/var/tmp/tmp-inst 下。
按照以下步骤启用目录的多形化:

过程 4.21. 启用 Polyinstantiation 目录

  1. 取消注释 /etc/security/namespace.conf 文件中的最后三行,以启用对 /tmp/var/tmp/ 和用户主目录的实例化:
    ~]$ tail -n 3 /etc/security/namespace.conf
    /tmp     /tmp-inst/            level      root,adm
    /var/tmp /var/tmp/tmp-inst/    level      root,adm
    $HOME    $HOME/$USER.inst/     level
    
  2. 确保在 /etc/pam.d/login 文件中,为会话配置了 pam_namespace.so 模块:
    ~]$ grep namespace /etc/pam.d/login
    session    required     pam_namespace.so
    
  3. 重启您的系统。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.