第 11 章 配置 polyinstantiated 目录
默认情况下,所有程序、服务和用户使用 /tmp
、/var/tmp
以及主目录进行临时存储。这使得这些目录容易受到基于文件名的竞争条件攻击和信息泄漏的影响。您可以使 /tmp/
、
和主目录实例化,使它们不再在所有用户之间共享,并且每个用户的 /var/tmp
//tmp-inst
和 /var/tmp/tmp-inst
单独挂载到 /tmp
和 /var/tmp 目录。
步骤
在 SELinux 中启用 polyinstantiation:
# setsebool -P allow_polyinstantiation 1
您可以通过输入
getsebool allow_polyinstantiation
命令来验证在 SELinux 中是否启用了 polyinstantiation。使用所需权限在重启后为数据持久性创建目录结构:
# mkdir /tmp-inst /var/tmp/tmp-inst --mode 000
恢复整个安全上下文,包括 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
如果您的系统使用
fapolicyd
应用程序控制框架,在/etc/
配置文件中启用fapolicyd
/fapolicyd.confallow_filesystem_mark
选项,允许 fapolicyd 监控底层文件系统上的文件访问事件。allow_filesystem_mark = 1
启用实例化
/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
在没有多级别安全(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
验证
pam_namespace.so
模块是否已为会话配置:$ grep namespace /etc/pam.d/login session required pam_namespace.so
可选:启用云用户使用 SSH 密钥访问系统:
-
安装
openssh-keycat
软件包。 在
/etc/ssh/sshd_config.d/
目录中创建一个包含以下内容的文件:AuthorizedKeysCommand /usr/libexec/openssh/ssh-keycat AuthorizedKeysCommandRunAs root
通过检查
sshd_config
中的PubkeyAuthentication
变量设为yes
,验证是否启用了公钥身份验证。默认情况下,Pub
keyAuthentication 设置为 yes,即使sshd_config
中的行被注释掉也是如此。$ grep -r PubkeyAuthentication /etc/ssh/ /etc/ssh/sshd_config:#PubkeyAuthentication yes
-
安装
在
会话包含 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 [...]
验证
- 以非 root 用户身份登录。在配置了 polyinstantiation 之前登录的用户必须注销并登录,然后才能使它们生效。
检查
/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
软件包安装。