ove*_*nge 8 security editors sudo
在 linux 机器上,非 root 用户打开一个文件,
$ sudo vi /etc/hosts
并停止说 :sh
获得root权限。
1)以上,非root用户如何成为root用户?
2) 为什么 Linux 允许这种黑客方法来破坏安全?
Jef*_*ler 34
非root用户在成功运行后立即成为root用户sudo
(假设root
目标用户);他们开始vi
以 root 身份运行。当您请求vi
一个 shell 时,它会尽职尽责地以当前用户身份运行一个 shell——root!我应该澄清一下,你不应该用:sh
命令“退出”vi ,因为那是在要求一个shell。用:q
代替。
Linux 允许这样的功能,因为这sudo
是专门用来做的!也许你看过 sudo 的讲座:
我们相信您已经收到了当地系统管理员的常规讲座。通常归结为以下三点:
#1) 尊重他人的隐私。
#2) 打字前请三思。
#3) 能力越大,责任越大。
在以!
否定运算符的形式授予“所有”访问权限时,sudo 对此提供了有限的“减速带” ,通常表现为:
jill SERVERS = /usr/bin/, !SU, !SHELLS
Run Code Online (Sandbox Code Playgroud)
其中 jill 被授予从 /usr/bin 运行程序的权限,但不能在 SU 或 SHELLS 别名中列出任何内容。
该sudoers的手册页有一个整体“安全注意事项”一节,当谈到批准通过sudo大规模进入,然后试图限制它。
'!' 的限制 操作员
使用 '!' 从 ALL 中“减去”命令通常是无效的 操作员。用户可以通过将所需的命令复制到不同的名称然后执行它来轻松规避这一点。
和
通常,如果用户拥有 sudo ALL 权限,则没有什么可以阻止他们创建自己的程序,为他们提供 root shell(或制作自己的 shell 副本),而不管任何 '!' 用户规范中的元素。
更相关的是:
防止外壳逃逸
一旦 sudo 执行一个程序,该程序就可以自由地做任何它想做的事情,包括运行其他程序。这可能是一个安全问题,因为允许 shell 转义的程序并不少见,这让用户绕过 sudo 的访问控制和日志记录。允许 shell 转义的常见程序包括 shell(显然)、编辑器、分页器、邮件和终端程序
Gil*_*il' 16
如果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
Run Code Online (Sandbox Code Playgroud)授予他们通过 sudo 编辑文件的权限。为此,不要授予他们运行编辑器的权限。如 sudo 文档中所述,授予他们运行权限sudoedit
,这会以原始用户身份调用编辑器,然后仅使用额外权限来修改文件。
bob ALL = sudoedit /etc/hosts
Run Code Online (Sandbox Code Playgroud)
sudo 方法设置起来更复杂,对用户来说不那么透明,因为他们必须调用sudoedit
而不是仅仅在编辑器中打开文件,但具有记录所有访问的优点。
请注意,允许用户进行编辑/etc/hosts
可能会对您的安全基础架构产生影响:如果您在任何地方依赖与特定机器对应的主机名,那么该用户将能够将其指向不同的机器。考虑到无论如何它可能是不必要的。