在 sudo 上保留 $HOME 的问题

信息安全 linux
2021-08-10 09:02:40

在 Ubuntu 上,sudo 的默认行为是保留用户的 $HOME 环境变量,这意味着 sudo 将能够读取用户主目录中的点文件。我最喜欢这个,因为当我需要编辑文本文件时,sudo vim会读取我的 vimrc。

在其他一些系统上,sudoers 文件有Defaults always_set_home,它将主目录设置为 /root,因此它不使用我的 vimrc。我可以禁用它,但由于该选项可能是出于安全原因设置的,我想知道它们有多严重,以及我是否应该简单地处理家庭作为 /root 的烦恼。

我能想到的唯一安全漏洞是如果我运行一个不受信任的可执行文件或脚本来编辑我的一个启动脚本。然后,下次我 sudo 时,该脚本可以控制。但是,如果我们假设我的帐户在我不知情的情况下被盗用,那么恶意脚本可能已经将我的路径更改为指向虚假的 sudo 命令,所以这似乎不是一个额外的漏洞。

在 sudo 中保留 $HOME 会打开哪些安全漏洞?

编辑:我现在意识到 sudoedit 解决了我的主要用例,但我仍然想知道安全问题。

2个回答

对于可能使用 运行任意命令的用户sudo,更改环境变量不是直接的安全问题。如果你愿意,你可以运行tmp=$(mktemp); export >$tmp; sudo bash -c ". $tmp; exec bash"——换句话说,保存环境并在根 shell 中恢复它。

正如您所注意到的,配置文件中的特洛伊木马不是问题,因为木马可以放置一个包装器sudo(并在它存在时获取您的密码)。

这个话题在 Ubuntu 邮件列表 ( 1 2 )中出现过几次。Ubuntu 不会重置HOMEDavid 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方法以普通用户身份运行编辑器。

另一个问题是,当您运行sudo command它时,可能正在使用运行它的用户设置的环境,这包括路径。

这可以在配置文件中或通过标志进行自定义,但默认情况下,许多系统会保留初始用户环境。

可以通过以下方式修改此行为

  • 更改env_resetsudoers 文件中的选项。
  • 调用sudo -i模拟用户的初始登录命令将作为运行