在“/etc/sudoers”中添加“Defaults secure_path=”/home/username”可能会带来风险

在“/etc/sudoers”中添加“Defaults secure_path=”/home/username”可能会带来风险

这可能是增加的风险

Defaults secure_path="/home/username" 

/etc/sudoers

答案1

如果设置了该secure_path值,它将被用作PATH您使用 运行的命令的环境变量sudo

这意味着,当您运行例如时sudo apt update,系统将尝试按照指定的顺序apt在指定的目录中查找该命令secure_path

现在,如果您添加一个非 root 用户具有写权限的目录secure_path,您可以在两个位置执行此操作:

  • 附加到列表末尾secure_path,优先级最低
  • 插入到列表的开头或中间secure_path,优先级较高。

附加到末尾几乎是安全的,因为它不会改变现有命令的解析方式,它只是允许执行来自不同目录的可执行文件,而无需明确指定它们的位置。但事实上,这个额外的目录对于非 root 用户是可写的,这使得他们可以在没有提升权限的情况下将恶意文件放入其中,所以在输入位于那里的任何命令时,你必须小心谨慎(无论是故意还是错误地输入其他内容)。

但是,如果您将目录放置得不是最后一个元素,而是具有更高的优先级,则该目录的内容将遮蔽并覆盖其后位置的内容secure_path。例如,如果您将用户目录放在第一位,并且它包含一个名为的(恶意?)可执行文件apt,则下次运行时sudo apt update您会感到惊讶...

我绝不会直接将主目录添加到任何PATHsecure_path,而是创建一个专用目录,例如/home/USERNAME/bin,该目录仅包含我想要的可执行文件,PATH而不包含其他任何文件。


结论:

secure_path如果除了 root 用户之外,其他人都可以写入任何目录,则不应将任何目录放入其中。否则,没有提升权限的普通用户(包括恶意软件或入侵此类帐户的攻击者)可以将自己的可执行文件放在那里,等待任何有sudo权限的人意外(使用常用命令的常见拼写错误作为文件名)或自愿执行它。

但是,如果您确实想这样做,请尝试尽可能严格地限制对该目录的写权限,并确保将该目录添加为最后一个元素,以secure_path防止其中的任何内容遮蔽系统可执行文件。

备择方案

secure_path但是,如果您想使用 运行可执行文件,安全的方法仍然是始终在默认值之外输入可执行文件的完整路径sudo

您还可以使用命令替换来which获取用户中某些内容的完整路径PATH,例如

sudo $(which MY_EXECUTABLE) ARGUMENTS

相关内容