【问题标题】:chroot alternative for threadschroot 替代线程
【发布时间】:2012-11-30 18:13:44
【问题描述】:

我知道从技术上讲,您无法对线程进行 chroot,但我正在寻找功能性替代方案,以限制线程中现有任务集的权限数量。

编辑:这适用于 Linux 环境,但与 Windows 相关的技术也很有用(即使它们没有 *NIX 等效技术。

【问题讨论】:

  • 您可能必须创建具有所需权限的不同用户,并在适用于他们的用户上下文中运行这些任务。

标签: c++ permissions pthreads boost-thread chroot


【解决方案1】:

Linux 上的线程和进程之间几乎没有区别。使用clone 系统调用,带标志CLONE_THREAD,不带标志CLONE_FS,这样新线程就不会与调用线程共享其根目录/当前目录/umask。或者,您可以在事后将unshare 系统调用与CLONE_FS 一起使用。现在可以正常使用chroot,不会影响进程中的其他线程。

【讨论】:

    【解决方案2】:

    使用 Win32 API 中的impersonation functions 为 Windows 中的线程设置权限非常简单。

    我不是 GNU/Linux 系统编程方面的专家,因此可能存在允许修改每个线程 UID 的扩展,但据我所知,Unix 系统具有每个进程的安全性,而不是 Windows 中的每个线程。

    这是因为历史上 Unix 使用进程进行并行处理 (fork),而 Windows 使用线程 (CreateThread),并且(从历史上看?)在 Unix 中创建新进程的速度与在 Windows 中创建新线程的速度相当。

    我给你的问题 +1,因为粗略的谷歌搜索似乎表明限制权限的首选方法是通过安全性将不同的任务分叉给进程,并使用 setuid 设置权限,然后可以选择 chroot 它们。

    我想知道是否还有其他选择,因为如上所述,这个用例在 Windows 中实现起来相当简单。

    【讨论】:

    • 感谢 Eli Algranti 的回答。 Linux 多任务处理完全基于进程,直到最近 5 年左右开始引入 pthreads。 Linux 现在是线程友好的,但它的用户权限例程是非常基于进程的,因为正如您所说,Linux 历史上使用子进程来与线程相对。
    • 感谢 Windows 链接。我不知道怎么做,但我知道他们必须有一些方法在 Windows 上这样做,因为它是多线程的,并且有一个相当可靠的用户控制方案。现在唯一的问题是,*NIX 是否已经找到了一种将相同的基本思想融入线程的方法,因为它们对它来说还很新。
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2016-03-01
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多