我偶然发现了这个页面:http://www.wlug.org.nz/PerUserTempDirs
建议创建/替换一些脚本;最新的步骤更加令人困惑:
现在,一旦您准备好了,请调用以下脚本而不是 login(1):
#!/bin/sh
mkdir -m 700 /tmp-safe/user/"$1" /tmp/"$1"
chown "$1": /tmp-safe/user/"$1" /tmp/"$1"
mount --bind /tmp-safe/user/"$1" /tmp/"$1" || exit 1
exec /bin/login "$@"
由于用户使用 ssh 登录,我“认为”/bin/login 从未执行过。我应该修改哪个脚本才能为用户重新挂载 /tmp?
答案1
pam_mktemp 的问题是,有很多软件带有硬编码/tmp
,并且它们不遵守 TMPDIR 变量。
最近的内核中的“命名空间”功能可用于此目的,如Gentoo 开发人员的博客文章。
答案2
更好的方法是使用pam_mktemp。当用户通过任何 pam 服务登录时,这将在 /tmp 下创建一个每个用户的目录,并更新 TMP 和 TMPDIR 以使用该目录。这确实依赖于编写的程序不假设 /tmp。