对 root 帐户使用非 root 用户配置

对 root 帐户使用非 root 用户配置

当我使用终端并使用surootsudo用户权限执行命令时,是否可以应用存储在该用户主目录中的“非 root 用户”(我从中调用su或)的配置?sudo

例如,考虑(以非 root 用户身份登录)我想/etc/some_file使用编辑配置文件vim,并且我的 vim 配置文件位于/home/myuser/.vimrc.启动命令行并输入sudo vim /etc/some_file,我希望“我的”美丽且配置良好的vim内容出现。但我得到的是vim默认配置的丑陋,没有插件等。

我可以制作susudo使用我的用户的配置文件而不是位于 /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有一行一样。

相关内容