这可能是增加的风险
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
您会感到惊讶...
我绝不会直接将主目录添加到任何PATH
或secure_path
,而是创建一个专用目录,例如/home/USERNAME/bin
,该目录仅包含我想要的可执行文件,PATH
而不包含其他任何文件。
结论:
secure_path
如果除了 root 用户之外,其他人都可以写入任何目录,则不应将任何目录放入其中。否则,没有提升权限的普通用户(包括恶意软件或入侵此类帐户的攻击者)可以将自己的可执行文件放在那里,等待任何有sudo
权限的人意外(使用常用命令的常见拼写错误作为文件名)或自愿执行它。
但是,如果您确实想这样做,请尝试尽可能严格地限制对该目录的写权限,并确保将该目录添加为最后一个元素,以secure_path
防止其中的任何内容遮蔽系统可执行文件。
备择方案
secure_path
但是,如果您想使用 运行可执行文件,安全的方法仍然是始终在默认值之外输入可执行文件的完整路径sudo
。
您还可以使用命令替换来which
获取用户中某些内容的完整路径PATH
,例如
sudo $(which MY_EXECUTABLE) ARGUMENTS