第 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 1Copy 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 000Copy 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:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的系统使用
fapolicyd应用程序控制框架,在/etc/配置文件中启用fapolicyd/fapolicyd.confallow_filesystem_mark选项,允许 fapolicyd 监控底层文件系统上的文件访问事件。allow_filesystem_mark = 1
allow_filesystem_mark = 1Copy 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/ levelCopy 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/ userCopy 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.soCopy 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 rootCopy 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 yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
安装
在
条目添加到要应用的每个服务的模块中。例如,在会话包含 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 [...]
[...] 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,noquotaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SOURCE输出会根据您的环境的不同而有所不同。在虚拟系统中,它会显示/dev/vda_<number>_。在裸机系统中,它会显示/dev/sda_<number>_或/dev/nvme*