我知道我可以修改 /etc/profile。但是有更好的方法吗?我知道 /etc/profile 会影响终端,但我希望所有进程都受到影响。crontab、服务管理器、启动脚本等。
编辑:我有一个答案来编辑 cron 的 PATH,但仍然想要一个用于服务管理调用的启动脚本和可执行文件的答案。
答案1
您必须考虑上述某些应用程序的运行环境。运行这些带有意外 PATH 的命令存在安全隐患。有权访问 PATH 早期目录的恶意用户可能能够替换自己的命令并获得访问权限等。
启动脚本通常使用要运行的命令的完整路径(有些可能会设置受限的 PATH)——这确保执行预期的命令。
调用服务时,SCM 不使用 PATHS,而是使用清单 ( /var/svc/manifest/...
)。清单是 xml 文件,包含定义如何与给定服务交互所需的所有信息。同样,命令的完整路径用于确保执行预期的命令。
您可以在 中设置默认值PATH
(普通用户)或SUPATH
(对于 root 用户)/etc/default/cron
。同样,您应该考虑这样做的安全隐患 - 最好使用命令的完整路径,并让命令在需要时定义自己的 PATH。
我相信 init 传递给 SMF 和 init 脚本的默认 PATH 被编译到在里面二进制,无法更改。明确不从 /etc/default/init 读取。
答案2
我同意@lain的观点,你确实应该只使用所需命令的完整路径。也就是说,大多数 smf 方法都来自/lib/svc/share/smf_include.sh
。你可以在那里更改 PATH 变量,但我认为这通常不是一个好主意。