在linux机器上,非root用户打开一个文件,
$ sudo vi /etc/hosts
并停止说:sh
获得 root 访问权限。
1)如上所述,非root用户如何成为root用户?
2)为什么Linux允许这种黑客方法来破坏安全?
答案1
非root用户一旦成功运行就成为root用户sudo
(给定假定的root
目标用户);他们开始vi
以 root 身份运行。当您请求vi
shell 时,它会尽职尽责地以当前用户 root 身份运行 shell!我应该澄清的是,您不应该使用该:sh
命令“退出”vi,因为这需要 shell。退出以:q
代替。
Linux 允许这样的功能,因为这正是它sudo
的目的!也许你看过 sudo 的讲座:
我们相信您已经收到了本地系统管理员的常规讲座。通常可以归结为以下三点:
#1) 尊重他人的隐私。
#2)打字前请三思。
#3)能力越大,责任越大。
当涉及到以否定运算符的形式授予“ALL”访问权限时,sudo 对此提供了有限的“减速带” !
,通常演示为:
jill SERVERS = /usr/bin/, !SU, !SHELLS
其中 jill 被授予运行 /usr/bin 中的程序的权限,但没有授予 SU 或 SHELLS 别名中列出的任何程序的权限。
这sudoers 手册页在通过 sudo 授予大规模访问权限然后尝试限制它时,有一个完整的“安全说明”部分。
'!' 的限制操作员
使用“!”从 ALL 中“减去”命令通常无效操作员。用户可以通过将所需的命令复制到不同的名称然后执行该命令来轻松规避此问题。
和
一般来说,如果用户拥有 sudo ALL,则没有什么可以阻止他们创建自己的程序,为他们提供 root shell(或制作自己的 shell 副本),无论任何“!”如何用户规范中的元素。
更相关的是:
防止外壳逃逸
一旦 sudo 执行了一个程序,该程序就可以自由地做任何它想做的事情,包括运行其他程序。这可能是一个安全问题,因为程序允许 shell 转义的情况并不少见,这使得用户可以绕过 sudo 的访问控制和日志记录。允许 shell 转义的常见程序包括 shell(显然)、编辑、分页器、邮件和终端程序
答案2
如果sudo vi /etc/hosts
成功,说明系统管理员已经允许该用户vi /etc/hosts
以root身份运行。这就是 sudo 的全部意义:它允许系统管理员授权某些用户以额外的权限运行某些命令。
授予用户运行权限后,vi
他们就有权运行任何 vi 命令,包括:sh
运行 shell 和:w
覆盖系统上的任何文件。只允许运行的规则vi /etc/hosts
没有任何意义,因为它允许用户运行任意命令。
不涉及“黑客”。安全漏洞来自配置错误,而不是安全模型中的漏洞。 Sudo 并不特别尝试防止错误配置。众所周知,它的文档很难理解;如果有疑问,请四处询问,不要尝试做太复杂的事情。
一般来说,给用户特定的权限而不给他们超出预期的权限是一个难题。像给予他们运行 vi 这样的交互式程序的权利这样的推土机方法注定会失败。一般建议是授予完成任务所需的最低权限。如果您想允许用户修改一个文件,请不要授予他们运行编辑器的权限。相反,可以:
授予他们写入文件的权限。这是最简单的方法,做你不想要的事情的风险也最小。
setfacl u:bob:rw /etc/hosts
授予他们通过 sudo 编辑文件的权限。为此,请不要授予他们运行编辑器的权限。如 sudo 文档中所述,授予他们运行权限
sudoedit
,这会调用编辑器作为原始用户然后仅使用额外权限来修改文件。bob ALL = sudoedit /etc/hosts
sudo 方法的设置比较复杂,并且对用户来说不太透明,因为他们必须调用
sudoedit
而不是仅在编辑器中打开文件,但它的优点是所有访问都会被记录。
请注意,允许用户进行编辑/etc/hosts
可能会对您的安全基础设施产生影响:如果您在任何地方依赖于与特定计算机相对应的主机名,那么该用户将能够将其指向不同的计算机。考虑一下无论如何这可能是不必要的。