6.4. 在 MLS 中建立用户明确

将 SELinux 策略切换到 MLS 后,必须通过将 SELinux 策略映射到受限的 SELinux 用户来为用户分配安全清晰级别。默认情况下,具有给定安全许可的用户:

  • 不能读取具有更高敏感度级别的对象。
  • 无法写入具有不同敏感度级别的对象。

先决条件

  • SELinux 策略被设置为 mls
  • SELinux 模式设置为 enforcing
  • 已安装 policycoreutils-python-utils 软件包。
  • 分配给 SELinux 受限用户的用户:

    • 对于非授权用户,分配给 user_u (以下流程中的example_user )。
    • 对于特权用户,分配给 staff_u (以下流程中的 staff )。
注意

确保 MLS 策略处于活动状态时已创建该用户。MLS 中无法使用在其他 SELinux 策略中创建的用户。

步骤

  1. 可选:要防止向 SELinux 策略添加错误,切换到 permissive SELinux 模式,这有助于进行故障排除:

    # setenforce 0
    重要

    在 permissive 模式中,SELinux 不强制执行活跃策略,而是只记录 Access Vector Cache(AVC)消息,然后可用于故障排除和调试。

  2. staff_u SELinux 用户定义清晰的范围。例如,这个命令会将安全权限范围设置为 s1s15s1 是默认的安全权限级别:

    # semanage user -m -L s1 -r s1-s15 staff_u
  3. 为用户主目录生成 SELinux 文件上下文配置条目:

    # genhomedircon
  4. 将文件安全上下文恢复到默认值:

    # restorecon -R -F -v /home/
    Relabeled /home/staff from staff_u:object_r:user_home_dir_t:s0 to staff_u:object_r:user_home_dir_t:s1
    Relabeled /home/staff/.bash_logout from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1
    Relabeled /home/staff/.bash_profile from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1
    Relabeled /home/staff/.bashrc from staff_u:object_r:user_home_t:s0 to staff_u:object_r:user_home_t:s1
  5. 为用户分配安全权限级别:

    # semanage login -m -r s1 example_user

    其中 s1 是分配给用户的安全权限级别。

  6. 将用户的主目录重新标记到用户的明确级别:

    # chcon -R -l s1 /home/example_user
  7. 可选:如果您之前切换到 permissive SELinux 模式,并在验证所有内容可以正常工作后,切换回 enforcing SELinux 模式:

    # setenforce 1

验证步骤

  1. 验证用户是否已映射到正确的 SELinux 用户,并分配了正确的级别:

    # semanage login -l
    Login Name      SELinux User         MLS/MCS Range        Service
    __default__     user_u               s0-s0                *
    example_user    user_u               s1                   *
    ...
  2. 以 MLS 内的用户身份登录。
  3. 验证用户的安全级别是否正常工作:

    重要

    如果配置不正确,您用于验证的文件不应包含任何敏感信息,并且用户实际上可以访问未经授权的文件。

    1. 验证用户无法读取具有更高级别敏感性的文件。
    2. 验证用户可以写入具有相同敏感级别的文件。
    3. 验证用户可以读取具有较低级别的敏感性的文件。