我有一个程序可能会受到影响,但最初需要 root 权限。目前,程序chroot进入预配置的目录,然后删除权限。
但是,我想阻止我的程序在删除 root 权限后完全访问文件系统,并且如果可能的话不需要任何配置。有没有比在 /tmp 中创建一个临时目录并 chroot 更好的方法?
我有一个程序可能会受到影响,但最初需要 root 权限。目前,程序chroot进入预配置的目录,然后删除权限。
但是,我想阻止我的程序在删除 root 权限后完全访问文件系统,并且如果可能的话不需要任何配置。有没有比在 /tmp 中创建一个临时目录并 chroot 更好的方法?
你基本上有两个选择:
这是正确的方法,但需要您学习框架并进行大量配置。您基本上可以设置策略,以便此进程或运行它的用户(或两者)无法访问系统的其余部分。
这是一个不太优雅的解决方案,可能会对性能产生更大的影响,但只需要很少的配置,只需要一点编码。我在我写的安全模块中做了类似的事情:
https://github.com/cormander/tpe-lkm
它与 execve、mmap、mprotect 和其他东西挂钩。对 open、write 等也可以这样做,并根据 uid 或 gid 甚至进程名称拒绝系统调用。
我最终进入了一个临时目录(在我的情况下,/var/run/programname
),然后删除了特权。这提供了足够的保护,并且不需要任何复杂的安装。不利的一面是,它首先要求我的程序以超级用户身份运行。