如何修改Landscape使用的临时目录?
确实,你遇到的这个问题很常见——Landscape默认会把待执行的脚本上传到系统的/tmp目录再运行,如果/tmp挂载时设置了noexec权限,就会触发权限拒绝的错误,和你贴的报错完全一致。
遗憾的是,Landscape本身确实没有提供直接在landscape-config或者配置文件里修改临时目录的选项,但我们可以通过调整服务的环境变量来绕过这个限制,具体步骤如下:
1. 创建专属的临时目录
首先,我们需要准备一个有执行权限的目录,推荐用/var/tmp下的子目录(因为/var/tmp默认是允许执行的,且数据留存时间比/tmp长):
sudo mkdir -p /var/tmp/landscape-tmp sudo chown landscape:landscape /var/tmp/landscape-tmp sudo chmod 700 /var/tmp/landscape-tmp
这样可以确保只有landscape用户能访问这个目录,避免安全风险。
2. 修改Landscape客户端的服务配置
如果你的系统用的是systemd(绝大多数现代Linux发行版都是),需要修改Landscape客户端的服务文件:
sudo nano /lib/systemd/system/landscape-client.service
在[Service]区块里添加一行环境变量配置,指定新的临时目录:
Environment=TMPDIR=/var/tmp/landscape-tmp
3. 重启服务生效
保存文件后,重新加载systemd配置并重启Landscape客户端服务:
sudo systemctl daemon-reload sudo systemctl restart landscape-client.service
原理说明
Landscape在处理脚本时,会使用Python的tempfile模块创建临时文件,而这个模块会优先读取TMPDIR环境变量来确定临时目录位置。通过给Landscape服务设置这个环境变量,就能让它把脚本存到我们指定的可执行目录里,完美避开/tmp的noexec限制,也不用修改/tmp的挂载选项。
如果你的系统用的是upstart而不是systemd,那需要修改/etc/init/landscape-client.conf,在文件开头添加env TMPDIR=/var/tmp/landscape-tmp,然后重启服务即可。
备注:内容来源于stack exchange,提问作者Jonas Lindau

