【问题标题】:Is it possible to execute a branch as a different user in *nix?是否可以在 *nix 中以不同用户的身份执行分支?
【发布时间】:2017-04-18 08:43:37
【问题描述】:
是否可以在 Linux(或特别是 SELinux)中以不同用户的身份执行方法?我在单独的沙箱中运行的程序,每个沙箱都有不同的用户和进程 ID。我有一种情况,我必须以不同的用户和不同的进程 ID 执行代码分支,以防止访问产生它的代码的内存和磁盘空间。
如果不可能,您能否说明需要更改多少内核代码才能实现它? (我理解它的主观性。或者,如果你能建议什么和如何去做,那将很有帮助。
【问题讨论】:
标签:
process
linux-kernel
operating-system
execution
selinux
【解决方案1】:
保护某些资源免受在同一台机器上执行的其他代码的影响,这正是导致进程和 UID 发明的原因。
如果您正在寻找一种看起来像简单函数调用的机制,我会说这是不可能的,因为它需要在调用者和被调用者之间共享内存。然而,使用 fork/exec(或像 system() 这样的包装器)会给你一些隔离,只要你使用像 program parameters 或管道这样的系统对象来处理参数/结果.
尽管 *nix 用户旨在保护进程免受彼此的影响,但需要在两个用户之间建立明确的关系,以让一个用户代表另一个用户行事。
实际上,您可能想要:
- 定义一个 sudoers 策略,授予您的第一个用户将命令(或特定命令)作为第二个用户运行的权利。
- 在您的第一个程序中使用 popen()(或 system())来调用特权较低的代码。
- 如果有,传递参数并从标准输出解析结果
另外,您可以在两次执行中使用相同的二进制文件,这样,所有代码都可以位于同一位置。