第 11 章 配置 polyinstantiated 目录


默认情况下,所有程序、服务和用户使用 /tmp/var/tmp 以及主目录进行临时存储。这使得这些目录容易受到基于文件名的竞争条件攻击和信息泄漏的影响。您可以使 /tmp/ /var/tmp / 和主目录实例化,使它们不再在所有用户之间共享,并且每个用户的 /tmp-inst/var/tmp/tmp-inst 单独挂载到 /tmp 和 /var/tmp 目录。

步骤

  1. 在 SELinux 中启用 polyinstantiation:

    # setsebool -P allow_polyinstantiation 1

    您可以通过输入 getsebool allow_polyinstantiation 命令来验证在 SELinux 中是否启用了 polyinstantiation。

  2. 使用所需权限在重启后为数据持久性创建目录结构:

    # mkdir /tmp-inst /var/tmp/tmp-inst --mode 000
  3. 恢复整个安全上下文,包括 SELinux 用户部分:

    # restorecon -Fv /tmp-inst /var/tmp/tmp-inst
    Relabeled /tmp-inst from unconfined_u:object_r:default_t:s0 to system_u:object_r:tmp_t:s0
    Relabeled /var/tmp/tmp-inst from unconfined_u:object_r:tmp_t:s0 to system_u:object_r:tmp_t:s0
  4. 如果您的系统使用 fapolicyd 应用程序控制框架,在 /etc/ fapolicyd /fapolicyd.conf 配置文件中启用 allow_filesystem_mark 选项,允许 fapolicyd 监控底层文件系统上的文件访问事件。

    allow_filesystem_mark = 1
  5. 启用实例化 /tmp/var/tmp/ 和用户主目录:

    重要

    使用 /etc/security/namespace.conf 而不是单独的文件在 /etc/security/namespace.d/ 目录中,因为 pam_namespace_helper 程序不会读取 /etc/security/namespace.d 中的附加文件。

    1. 在具有多级别安全性(MLS)的系统上,取消注释 /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. 在没有多级别安全(MLS)的系统上,在 /etc/security/namespace.conf 文件中添加以下行:

      /tmp     /tmp-inst/            user 	 root,adm
      /var/tmp /var/tmp/tmp-inst/    user 	 root,adm
      $HOME    $HOME/$USER.inst/     user
  6. 验证 pam_namespace.so 模块是否已为会话配置:

    $ grep namespace /etc/pam.d/login
    session    required     pam_namespace.so
  7. 可选:启用云用户使用 SSH 密钥访问系统:

    1. 安装 openssh-keycat 软件包。
    2. /etc/ssh/sshd_config.d/ 目录中创建一个包含以下内容的文件:

      AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat
      AuthorizedKeysCommandRunAs root
    3. 通过检查 sshd_config 中的 PubkeyAuthentication 变量设为 yes,验证是否启用了公钥身份验证。默认情况下,Pub keyAuthentication 设置为 yes,即使 sshd_config 中的行被注释掉也是如此。

      $ grep -r PubkeyAuthentication /etc/ssh/
      /etc/ssh/sshd_config:#PubkeyAuthentication yes
  8. 会话包含 system-auth 行后,将所需的 pam_namespace.so unmnt_remnt 条目添加到要应用的每个服务的模块中。例如,在 /etc/pam.d/su/etc/pam.d/sudo/etc/pam.d/ssh 中,以及 /etc/pam.d/sshd

    [...]
    session        include        system-auth
    session        required    pam_namespace.so unmnt_remnt
    [...]

验证

  1. 以非 root 用户身份登录。在配置了 polyinstantiation 之前登录的用户必须注销并登录,然后才能使它们生效。
  2. 检查 /tmp/ 目录是否已挂载到 /tmp-inst/ 下:

    $ findmnt --mountpoint /tmp/
    TARGET SOURCE                 	FSTYPE OPTIONS
    /tmp   /dev/vda1[/tmp-inst/<user>] xfs	rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota

    SOURCE 输出会根据您的环境的不同而有所不同。在 virutal 系统上,它会显示 /dev/vda_<number>_。在裸机系统中,它会显示 /dev/sda_<number>_/dev/nvme*

其他资源

  • /usr/share/doc/pam/txts/README.pam_namespace readme 文件随 pam 软件包安装。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.