我刚刚开始学习 seccomp 过滤器,我正在使用libseccomp v2.4.4。我试图编写一个基本的白名单过滤器,它只允许写入名为的文件file1
,但我在STDOUT
. 这是我的代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <seccomp.h>
#include <stdlib.h>
#include <errno.h>
int main(void)
{
FILE *fil = fopen("file1", "w");
scmp_filter_ctx filter = seccomp_init(SCMP_ACT_KILL);
if (filter==NULL || NULL==fil)
goto End1;
int chk1 = seccomp_rule_add(filter, SCMP_ACT_ALLOW, SCMP_SYS(write), 1,
SCMP_A0(SCMP_CMP_EQ, fileno(fil)));
int chk2 = seccomp_load(filter);
if (chk1<0 || chk2<0)
goto End;
fprintf(stdout,"Filter did not work correctly\n");
fprintf(fil,"Filter worked correctly\n");
End:
seccomp_release(filter); //releasing filter before closing file
fclose(fil);
End1:
return 0;
}
此外,我在file1
. 我只是一个初学者,对这里的很多事情都不确定,因为我是根据自己的理解而不是参考来编写代码的。似乎是什么问题?
编辑:我完全删除了过滤器并简单地执行了
int main(void)
{
FILE *fil = fopen("file1", "w");
fprintf(stdout,"Filter did not work correctly\n");
fprintf(fil,"Filter worked correctly\n");
End:
fclose(fil);
End1:
return 0;
}
跟踪这一点,我观察到 syscalls fstat
,close
正如@pchaigno 下面的答案中提到的那样,另外mmap
,munmap
正在被调用。所以我必须允许这些系统调用来实现预期的行为。