【问题标题】:Prevent my program from accessing the filesystem阻止我的程序访问文件系统
【发布时间】:2011-12-28 00:46:50
【问题描述】:

我有一个程序可能会受到威胁,但最初需要 root 权限。目前,程序chroots 进入预配置目录,然后删除权限。

但是,我想阻止我的程序在删除 root 权限后访问文件系统,并且如果可能的话不需要任何配置。有没有比 /tmp 中的 creating a temporary directory 更好的方法并 chroot 进入它?

【问题讨论】:

    标签: security chroot


    【解决方案1】:

    你基本上有两种选择:

    • 使用安全模块(例如 SELinux)将该进程锁定在系统的其余部分之外

    这是正确的方法,但需要您学习框架并进行大量配置。您基本上可以设置策略,以便此进程或运行它的用户(或两者)无法访问系统的其余部分。

    • 劫持内核的文件系统调用以拒绝运行受感染程序的用户

    这是一个不太优雅的解决方案,可能会产生更大的性能影响,但只需要很少的配置,只需要一点编码。我在我写的安全模块中做了类似的事情:

    https://github.com/cormander/tpe-lkm

    它与 execve、mmap、mprotect 和其他东西挂钩。对open、write等也可以做同样的事情,拒绝基于uid或gid,甚至进程名的系统调用。

    【讨论】:

    • 不幸的是,这两个选项都需要更多的配置,而不是简单地进入一个空目录,不是吗?
    • 是的,但 AFAIK 他们是唯一的其他选择。
    【解决方案2】:

    我最终进入了一个临时目录(在我的例子中,/var/run/programname),然后删除了权限。这提供了足够的保护,并且不需要任何复杂的安装。不利的一面是,它首先要求我的程序以超级用户身份运行。

    【讨论】:

    • 您可以使用 cap_sys-chroot 设置程序,然后您不需要以 root 用户身份启动。只要确保在 chroot 之后放弃特权。 libcap-ng 让这一切变得简单。
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多