seccomp初探

早就听说过seccomp,只是知道他是控制syscall的。因为解一个bug,对seccomp了解多了一丢丢,记录一下。

seccomp是linux用来控制用户进程系统调用使用的。有三种模式:

SECCOMP_SET_MODE_STRICT: 严格限制系统调用的使用,只允许read,write,_exit,sigreturn。这个模式用的较少。

SECCOMP_SET_MODE_FILTER:利用bpf来过滤syscall,也就是可以让用户控制哪些syscall可以使用。这是非常合理的,给了用户较大的选择,主要使用的模式;

SECCOMP_GET_ACTION_AVAIL:不了解;

当进程使用了不被允许的syscall时会被seccomp kill掉。常见的是进程收到SIGSYS,这个信号不能屏蔽只能退出。

如果打开了audit服务,在journal log里面可以看到如下的log:

audit[3028351]: SECCOMP auid=4294967295 uid=0 gid=0 ses=4294967295 subj=unconfined pid=3028351 comm="virtiofsd" exe="/root/virtiofs/virtiofsd/virtiofsd" sig=31 arch=c00000b7 syscall=130 compat=0 ip=0x57a7cc code=0x80000000

sig 31就是SIGSYS, syscall后面的数字表明是哪个系统调用, comm和exe表示被杀掉的进程的可执行文件,pid是进程id,code是错误码。ip是被杀掉时执行的指令地址。看起来打开audit对于了解进程退出原因非常有帮助。

posted on   半山随笔  阅读(404)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示