我希望能够从命令行启动具有非常有限权限的进程,基本上这样我就可以运行一个我不理解的进程,而无需它访问我的用户区域中的内容。例如,如果我从某个倾向于编写过度侵入性安装程序的同事那里得到一个软件包,我可以这样做:
> subdo make
将运行make
在不允许触及任何父目录的情况下。 Unix 中存在这样的功能吗?
答案1
最简单的方法是使用帐户nobody
:
sudo -u nobody make
nobody
永远不应该拥有写入除全局可写文件之外的任何内容的权限。
答案2
将运行 make ,这样就不允许它触及任何父目录。
这基本上描述了 chroot:
但请注意,当您 chroot 时,进程将无法访问除新根目录下的文件夹之外的任何内容。这意味着,例如,如果进程需要从 例如 运行某些程序,/usr/bin
或者例如从 加载某些共享库/usr/lib
,则它将无法执行此操作,除非您实际上将这些程序复制到新根目录下。这实际上取决于您尝试运行的程序。
您可以找到许多针对不同程序的教程,例如,这里有一个示例 BIND chroot 教程:
答案3
生成策略:
systrace -A -d /etc/systrace/make.policy/ \
-E /var/log/systrace_make.log make
使用您最喜欢的文本编辑器编辑策略:
vi /etc/systrace/make.policy/
此后,启动过程有限制:
systrace -a -d /etc/systrace/make.policy/ \
-E /var/log/systrace_make.log make
看看我的另一张回答 关于将 systrace 与 sshd 一起使用