gpt4 book ai didi

更改正在运行的非特权进程的 uid/gid

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:38 24 4
gpt4 key购买 nike

我需要为 Linux 实现一个类似于计划 9 的小型功能系统 cap设备。主机所有者(Linux 中的 root)允许 user1 模拟 user2user1@user2@random-string 写入 /dev/caphash。任何知道 random-stringuser1 进程都可以将其 uid 更改为 user2 写入 user1@user2@随机字符串/dev/capuse

在 Linux 上,任何特权进程都可以使用 setuid(2) 模拟任何非特权用户系统调用,但我不知道任何允许水平模拟的机制。 Linux 是怎么做到的?

最佳答案

Serge E. Hallyn 提交了 p9auth到 2010 年 4 月的 Linux 内核邮件列表,它几乎可以提供此功能(尽管在最后提交的表单中,界面略有不同)。不幸的是,它没有包含在 Linux 内核中。

Linux 中的底层安全范例是垂直的,而不是水平的。

权限分为capabilities ,并且它们可以仅在执行时获取。可以随时取消额外特权。实际上,无论执行它的用户身份如何,您都可以使用文件系统功能和 setcap 实用程序为非特权二进制文件提供一些特定的功能。 (对于 Linux 内核 2.6.33 及更高版本,任何进程都不再可能修改另一个正在运行的进程的功能。)

需要注意的关键点是,在 Linux 中,只有特权进程(具有 CAP_SETUID 的进程)可以在运行时更改其身份。

换句话说,exec 的点在 Linux 中用于提升权限,现在有权限的二进制文件更改为指定的用户(和/或组,可能还有补充组),删除额外的特权。我不知道有任何机制允许非特权进程更改其 credentials没有执行人员。

对于 OP,这意味着 Plan 9 接口(interface)(/dev/caphash/dev/capuse)将不起作用。在用户空间中实现的类似 Linux 接口(interface)将需要执行二进制文件作为凭证更改的一部分,但除此之外,我对 OP 的用例了解不够,无法提出任何建议。

在内核中,这样的接口(interface)显然是可能的(如本答案中的第一个链接所示),只是在普通内核中不可用。

关于更改正在运行的非特权进程的 uid/gid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43196869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com