第 11 章 配置 polyinstantiated 目录
			默认情况下,所有程序、服务和用户都将 /tmp、/var/tmp 以及主目录用作临时存储。这使得这些目录容易受到竞争条件攻击和基于文件名的信息泄漏的影响。您可以使 /tmp/、/var/tmp 和主目录实例化,以使它们不再在所有用户之间共享,并且每个用户的 /tmp-inst 和 /var/tmp/tmp-inst 分别挂载到 /tmp 和 /var/tmp 目录。
		
步骤
- 在 SELinux 中启用 polyinstantiation: - setsebool -P allow_polyinstantiation 1 - # setsebool -P allow_polyinstantiation 1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 您可以通过输入 - getsebool allow_polyinstantiation命令来验证 SELinux 中是否启用了 polyinstantiation。
- 创建具有必要权限的目录结构,以便数据在重启后保持不变: - mkdir /tmp-inst /var/tmp/tmp-inst --mode 000 - # mkdir /tmp-inst /var/tmp/tmp-inst --mode 000- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 恢复整个安全上下文,包括 SELinux 用户部分: - restorecon -Fv /tmp-inst /var/tmp/tmp-inst - # 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果您的系统使用 - fapolicyd应用程序控制框架,当通过启用- /etc/fapolicyd/fapolicyd.conf配置文件中的- allow_filesystem_mark选项绑定挂载了文件系统时,允许- fapolicyd监控底层文件系统上的文件访问事件。- allow_filesystem_mark = 1 - allow_filesystem_mark = 1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 启用 - /tmp、- /var/tmp/和用户主目录的实例化:重要- 使用 - /etc/security/namespace.conf而不是- /etc/security/namespace.d/目录中单独的文件,因为- pam_namespace_helper程序不会读取- /etc/security/namespace.d中的其他文件。- 在具有多级安全(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 - /tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ level- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在没有多级安全(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 - /tmp /tmp-inst/ user root,adm /var/tmp /var/tmp/tmp-inst/ user root,adm $HOME $HOME/$USER.inst/ user- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 验证是否已为会话配置了 - pam_namespace.so模块:- grep namespace /etc/pam.d/login - $ grep namespace /etc/pam.d/login session required pam_namespace.so- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:启用云用户使用 SSH 密钥访问系统: - 
							安装 openssh-keycat软件包。
- 在 - /etc/ssh/sshd_config.d/目录中创建一个包含以下内容的文件:- AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat AuthorizedKeysCommandRunAs root - AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat AuthorizedKeysCommandRunAs root- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 通过检查 - sshd_config中的- PubkeyAuthentication变量是否设为了- yes来验证是否启用了公钥身份验证。默认情况下,- PubkeyAuthentication被设置为 yes,即使- sshd_config中的行被注释掉了。- grep -r PubkeyAuthentication /etc/ssh/ - $ grep -r PubkeyAuthentication /etc/ssh/ /etc/ssh/sshd_config:#PubkeyAuthentication yes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 
							安装 
- 将 - session required pam_namespace.so unmnt_remnt条目添加到要为其应用 polyinstantiation 的每个服务的模块中,在- session include system-auth行后。例如,在- /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 [...] - [...] session include system-auth session required pam_namespace.so unmnt_remnt [...]- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 以非 root 用户身份登录。在 polyinstantiation 配置之前登录的用户必须退出登录,并在其更改生效之前登录。
- 检查 - /tmp/目录是否已挂载到- /tmp-inst/下:- findmnt --mountpoint /tmp/ - $ findmnt --mountpoint /tmp/ TARGET SOURCE FSTYPE OPTIONS /tmp /dev/vda1[/tmp-inst/<user>] xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - SOURCE输出根据您的环境而有所不同。* 在虚拟系统上,它会显示- /dev/vda_<number>_。在裸机系统上,它会显示- /dev/sda_<number>_或- /dev/nvme*