后端是GNU / Linux专用机器,其中将为每个参赛者创建用户,所有这些用户都是用户组的一部分.任何特定用户发送的源将存储在用户的主目录中,然后编译并执行以针对各种测试用例进行验证.
我想要的是禁止使用Linux系统调用源.这是因为问题需要独立于平台的解决方案,而对不安全的源启用系统调用则是潜在的安全漏洞.这些源可以成功地放在FS中,甚至可以编译,但从不运行.我还希望在发送包含系统调用的源时收到通知.
到目前为止,我看到以下可能放置此类检查器的地方:
>前端/预编译分析 – 已在系统中检查过但尚未编译的源.针对系统调用名称的简单文本检查器.依赖于平台,独立于编译器,依赖于语言的解决方案.
>编译器补丁 – 遇到系统调用时崩溃GCC(或工具链中包含的任何其他编译器).依赖于平台,依赖于编译器,与语言无关的解决方案(如果我们将检查器“放得足够远”).兼容性也可能会丢失.事实上,我最不喜欢这种选择.
>运行时检查程序 – 每当从进程调用系统调用时,终止此进程并报告.这个解决方案是编译器和语言无关的,但取决于平台 – 我没关系,因为我将在短期和中期的类似平台上部署后端.
所以问题是:GNU / Linux是否为管理员提供了禁止用户组,用户或特定进程使用系统调用的机会?它可能是安全策略或轻量级GNU实用程序.
我试图谷歌,但谷歌今天不喜欢我.
解决方法
mode 2 seccomp
(在撰写本文时,发现于Ubuntu 12.04或修补您自己的内核)为过滤系统调用提供了更大的灵活性.例如,您可以先设置过滤器,然后执行测试中的程序.可以使用chroot或unshare的适当使用来防止它重新发出任何“有趣”的东西.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。