Security 阻止我的程序访问文件系统

Security 阻止我的程序访问文件系统,security,chroot,Security,Chroot,我有一个程序可能会被破坏,但最初需要根权限。目前,该程序将进入预配置的目录,然后放弃特权 但是,我想阻止我的程序在删除根权限后访问文件系统,如果可能的话,不需要任何配置。有没有比in/tmp和chrooting更好的方法呢?您基本上有两种选择: 使用安全模块(如SELinux)将该进程从系统的其余部分锁定 这是正确的方法,但需要学习框架并进行大量配置。您基本上可以设置策略,使此进程或运行它的用户(或两者)无法访问系统的其余部分 劫持内核的文件系统调用,为运行受损程序的用户拒绝这些调用 这

我有一个程序可能会被破坏,但最初需要根权限。目前,该程序将进入预配置的目录,然后放弃特权


但是,我想阻止我的程序在删除根权限后访问文件系统,如果可能的话,不需要任何配置。有没有比in/tmp和chrooting更好的方法呢?

您基本上有两种选择:

  • 使用安全模块(如SELinux)将该进程从系统的其余部分锁定
这是正确的方法,但需要学习框架并进行大量配置。您基本上可以设置策略,使此进程或运行它的用户(或两者)无法访问系统的其余部分

  • 劫持内核的文件系统调用,为运行受损程序的用户拒绝这些调用
这是一个不那么优雅的解决方案,可能会对性能产生更大的影响,但只需要很少的配置,只需要少量的编码。我在写的一个安全模块中做了类似的事情:


它与execve、mmap、mprotect和其他内容挂钩。打开、写入等操作也可以这样做,拒绝基于uid或gid甚至进程名的系统调用。

我最终进入了一个临时目录(在我的情况下是,
/var/run/programname
),并从此放弃了特权。这提供了足够的保护,并且不需要任何复杂的安装。另一方面,它首先要求我的程序以超级用户的身份运行。

不幸的是,这两个选项都需要比简单地进入空目录多得多的配置,不是吗?是的,但是现在它们是唯一的选择。你可以用cap_sys-chroot设置cap程序,这样你就不需要以root用户的身份启动。一定要在下课后放下特权。libcap ng使这变得容易。