对于可能使用 运行任意命令的用户sudo
,更改环境变量不是直接的安全问题。如果你愿意,你可以运行tmp=$(mktemp); export >$tmp; sudo bash -c ". $tmp; exec bash"
——换句话说,保存环境并在根 shell 中恢复它。
正如您所注意到的,配置文件中的特洛伊木马不是问题,因为木马可以放置一个包装器sudo
(并在它存在时获取您的密码)。
这个话题在 Ubuntu 邮件列表 ( 1 2 )中出现过几次。Ubuntu 不会重置HOME
。David Mandelberg 的论点涵盖了重置HOME
.
重置HOME
可以防止利用您可能犯的错误。例如,您的一个配置文件可能包含一个临时文件漏洞,可以利用该漏洞来获得对 root 帐户的访问权限。和以前一样,这个例子并不是一个真正值得关注的问题,因为该漏洞同样可能首先影响您的帐户,然后挂钩您对sudo
.
重置HOME
还可以防止您可能犯的错误,这就是这样做的理由 - 但不是一个很有说服力的理由。
- 有一个极端的观点认为您应该坚持以 root 身份使用默认配置。这样,以 root 身份进行的任何操作都可以与在您自己的自定义帐户下进行的任何操作轻松区分开来,因此您不会忘记您是以 root 身份进行操作的。以 root 身份做事也很痛苦,因此您会被鼓励尽可能少地使用 root 帐户。我不相信这一点:以“艰难的方式”做事,而不是用你喜欢的方式做事,更容易犯错,而不是更少。通常很容易知道您是否以 root 身份运行:如果您正在编辑 下的文件
/etc
,那么您就是 root¹。如果您正在运行 shell 并且提示以#
代替$
或结尾%
(遵循通常的约定),你是 root ——你可以使用颜色之类的东西来使区别更加明显。如果您正在运行包管理程序,那么您就是 root。
- 您可能会错误地将机密文件留在主目录中公开可读的位置,认为它位于
/root
. 或者你可能会把它留在/tmp
......这个论点对我来说似乎真的很牵强。当然,这可能是您犯的错误,但不会比错误地添加防火墙规则使所有内容都打开或使/bin/*
世界可写的可能性更大。
- 您的配置文件之一可能会导致机密信息在您的主目录中弹出。这是合理的 - 它可能是历史文件或自动保存文件 - 但这些文件可能无论如何都在私人位置,否则人们可能会窥探你。
- 自动保存其配置的应用程序可能会写入您的主目录。这与其说是一个安全问题,不如说是为了您的方便,而且它被作为 root 时具有常规配置的便利性所抵消。
- 您可能会错误地编辑 下的文件
~
,认为这是 root 的主目录,而实际上它是您的主目录。是的,但是如果$HOME
是您的主目录,那么您也将拥有您通常的配置,因此您不太可能认为您正在以 root 用户身份运行,而更有可能认为您正在以特权模式运行. 这个论点是由它自己的petard提出的。
Scott James Remnant 是这样说的:
“sudo -s”适用于不想复制配置文件的懒人,“sudo -i”适用于健忘的人。
但是sudo -i
(运行 root shell)对于健忘的人来说似乎是个坏主意。并且只能在单用户计算机上以 root 身份复制配置文件,在这种情况下,以 root 身份运行并不是什么大问题。
结论:不,没有任何严重的安全问题,重置的理由HOME
很弱。的目的always_set_home
是保护您免受自己的伤害,但它保护的太少以至于不值得。
¹除非您不应该以 root 身份运行编辑器:使用sudoedit
或 Emacs (Tramp) 的sudo
方法以普通用户身份运行编辑器。