当我使用终端并使用su
rootsudo
用户权限执行命令时,是否可以应用存储在该用户主目录中的“非 root 用户”(我从中调用su
或)的配置?sudo
例如,考虑(以非 root 用户身份登录)我想/etc/some_file
使用编辑配置文件vim
,并且我的 vim 配置文件位于/home/myuser/.vimrc
.启动命令行并输入sudo vim /etc/some_file
,我希望“我的”美丽且配置良好的vim
内容出现。但我得到的是vim
默认配置的丑陋,没有插件等。
我可以制作su
或sudo
使用我的用户的配置文件而不是位于 /root 的 root 用户的文件吗?
答案1
使用sudo -E
保护您的环境:
$ export FOO=1
$ sudo -E env | grep FOO
FOO=1
这将保留$HOME
您拥有的任何其他环境变量,因此您启动时使用的相同配置文件将由以 root 身份运行的程序访问。
您可以更新sudoers
以禁用env_reset
设置,清除所有环境变量,通常默认启用。您可能sudo -E
还必须启用在那里使用的功能。还有一些其他sudoers
可能相关的设置:env_keep
,它允许您指定默认保留的特定变量,以及env_remove
,它声明始终删除的变量。您可以使用sudo sudo -V
来查看哪些变量被保留/未被保留。
如果您无法修改sudoers
,另一种选择是明确提供您的环境:
sudo env HOME=$HOME command here
您可以创建一个 shell 别名来自动执行此操作,这样您就不必输入它。
请注意,这样做(无论哪种方式)都可能会产生潜在的不良副作用:例如,如果您运行的程序尝试在主目录中创建文件,这些文件将以 root 身份创建,而您的普通用户将无法写入给他们。
对于 的具体情况,如果您是该系统的唯一用户,vim
您也可以将 your.vimrc
作为系统范围的用户。/etc/vimrc
答案2
设置 sudo 以保留HOME
环境变量。
运行visudo
以编辑 sudo 配置。确保该选项always_set_home
未设置且HOME
存在于env_keep
列表中。添加以下行:
Defaults !always_set_home
Defaults env_keep+="HOME"
删除一行,就像Defaults always_set_home
有一行一样。