我有一个 bash 脚本cap_sys_admin,cap_setgid,cap_setuid+i
(这意味着这些能力是可继承的),无需输入密码即可成为 root 的命令是什么(请注意,这只是意味着使用setreuid(0,0)
) ?
目的是在不处于开发者模式的情况下执行此操作,也不关闭 rootfs 验证。这意味着我无法调用我自己编写的包装器,也无法使用 python 或 perl,除非有办法使用 cap_sys_admin 重新挂载分区执行程序。
该脚本在启动过程中启动。
答案1
我的第一印象是,您有 3 种能力。您是想问如何通过成为 root 将您的能力集升级为所有能力吗?乍一看,您似乎试图获得所有能力(通过成为 root),但只有 3 种能力。
第二个观察结果是,您没有指定系统能力的边界集。也就是说,如果整体边界集只有这 3 个能力,那么成为 root 将不会有任何效果。
第三个观察结果是,您没有指定“securebits”是什么。根据它们的值,可能无法添加任何其他功能,或者成为 root 只会更改您的 UID(即 root 不再是特殊的)。
第四点观察——当您使用列出的功能启动 bash shell 时,您并没有显示 bash 实际上保留了这些功能。您可能需要确认一下。
但我会采纳观察 #1,并说你所问的问题不应该是可能的。如果是,那似乎是一个内核安全漏洞——特别是权限提升。如果你确实找到了一种方法,我认为它不会存在太久,因为安全漏洞通常会尽快修复。
我是否遗漏了您的用例中的某些内容,以致于无法知道为什么这不是一个安全漏洞?
答案2
新答案:除非你愿意承担风险,否则这是不可能的,而正如你(明智地)指出的那样,你不愿意承担风险。
总结一下这个问题:
- 除 rootfs 之外的所有磁盘都以 noexec 方式挂载,因此可以包含脚本但不能包含程序
- Rootfs(系统)经过校验,无法修改
- 系统修改动词仅允许在开发模式(管理员)下使用
- 仅在开发模式下才可以使用 exec 重新挂载磁盘
- 除非处于开发模式,否则 suid 和系统修改功能不可用。
解决方案和解决方法:
- 程序可以通过以 she-bang 行(以 #! 开头)开头的脚本来执行,该脚本将运行该行上命名的可执行文件。但除非处于开发模式,否则只有来自 rootfs 的有限数量的程序可以通过这种方式执行。
- 删除 rootfs 验证并使文件系统可写,请
sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification
参阅关联并带有警告。 - 编写你自己的带校验和的 rootfs (链接到谷歌缓存中已删除的文档)。
[旧答案]
您已请求该CAP_SYS_ADMIN
功能,该功能相当于 root 权限,因为它授予挂载/卸载文件系统的能力,因此将新文件系统绑定挂载在现有文件系统上,以对系统上的任何二进制文件进行后门处理。
就像在 Chrome OS 中一样,我们付出了巨大的努力来阻止所有安全漏洞,包括在非开发模式下阻止 suid,我不知道功能是否也被阻止了,而且我没有 Chromebook 可以测试(但你有)。
此类能力可通过以下方式授予:
$ sudo setcap cap_sys_admin+ep executable
参考:
答案3
答案很简单,因为 mount.exfat-fuse 仅依赖权限,并不检查 ᴜɪᴅ 0:
/sbin/mount.exfat-fuse /media/removable/Y/dev /media/removable/archive -o exec,nonempty
当然,这只适用于我关心的版本,因为 exfat-fuse 已经升级感谢我的发现。