Sudo - 目标用户环境

Eug*_*iti 5 sudo environment-variables

有没有一种方法(无需跳过太多的障碍)以完全保留环境的sudo -uuser command方式运行?user

基本上,我需要的是确保为所有允许运行 sudo 的用户设置特定的环境变量以模拟某些 ID - 主要是PATHJAVA_HOME和数据库相关的(Oracle 和 Postgres)变量。

换句话说 - 当我作为用户wobble运行时,sudo -u wibble echo $PATH我希望看到wibble显示的路径而不是 的wobble路径。

meu*_*euh 3

您当然可以对所有用户或给定用户进行以下操作,但它适用于所有命令sudo -u anyuser。编辑/etc/sudoers文件并添加一行,例如

Defaults env_keep+="PATH JAVA_HOME"
Run Code Online (Sandbox Code Playgroud)

对于所有用户,或者

Defaults:wobble env_keep+="PATH JAVA_HOME"
Run Code Online (Sandbox Code Playgroud)

只是摇摆,以及您想要保留的所有变量。实际上,PATH通常是一种特殊情况,并且会被重置,因此您可能需要使用类似的条目来取消它

Defaults:wobble  !secure_path, env_keep+="PATH JAVA_HOME"
Run Code Online (Sandbox Code Playgroud)

显然,这些功能的存在是有充分理由的,所以要小心。

还可以sudo -E通过 sudoers 条目来保护环境,例如:

wobble ALL = (wibble) SETENV: ALL
Run Code Online (Sandbox Code Playgroud)

但这仍然会重置特殊情况的 PATH,尽管您可以运行类似的命令

sudo -E PATH=$PATH -u wibble ...
Run Code Online (Sandbox Code Playgroud)