介绍
在本次实验中,你将学习如何检查 Linux 系统中是否应用了 seccomp 过滤器。seccomp 是一项安全功能,用于限制进程可以进行的系统调用。
你将探索三种验证 seccomp 状态的方法:检查 /proc/self/status 文件以查看进程的 seccomp 状态;使用 dmesg 命令检查内核消息,查找与 seccomp 相关的事件;检查 /sys/kernel/security 目录,获取 seccomp 配置信息。通过这些步骤,你将掌握在 Linux 环境中理解和验证 seccomp 应用的实用技能。
使用 cat /proc/self/status 检查 seccomp 状态
在这一步中,我们将探讨如何检查 Linux 系统中进程的 seccomp 状态。seccomp(安全计算)是一项安全功能,它允许进程限制自身可以进行的系统调用,有助于减轻安全漏洞的影响。
我们可以通过查看 /proc/self/status 文件来检查当前进程的 seccomp 状态。该文件包含了进程的各种状态信息。
如果终端尚未打开,请打开它。你可以点击桌面左侧的 Xfce Terminal 图标来打开终端。
现在,输入以下命令并按下回车键:
cat /proc/self/status
此命令将显示 /proc/self/status 文件的内容。滚动输出结果,查找以 Seccomp: 开头的行。
你应该会看到类似以下的输出:
Name: zsh
Umask: 0002
State: R (running)
Tgid: ...
Ngid: 0
Pid: ...
PPid: ...
TracerPid: 0
Uid: ...
Gid: ...
FDSize: 64
Groups: ...
NStgid: ...
NSpid: ...
NSpgid: ...
NSsid: ...
VmPeak: ... kB
VmSize: ... kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: ... kB
VmRSS: ... kB
RssAnon: ... kB
RssFile: ... kB
RssShmem: ... kB
VmData: ... kB
VmStk: ... kB
VmExe: ... kB
VmLib: ... kB
VmPTE: ... kB
VmSwap: 0 kB
HugetlbPages: 0 kB
CoreDumpFilter: 00000000
Threads: 1
SigQ: .../...
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
voluntary_ctxt_switches: ...
nonvoluntary_ctxt_switches: ...
Seccomp: 0
Seccomp: 行表示 seccomp 的状态。值为 0 意味着该进程未启用 seccomp。其他可能的值表示不同的 seccomp 模式。
理解 /proc/self/status 的输出是在 Linux 中检查进程信息的一项基本技能。
点击 Continue 进入下一步。
在 dmesg 中验证 seccomp
在这一步中,你将学习如何使用 dmesg 命令检查与 seccomp 相关的内核消息。dmesg 是一个用于显示内核环形缓冲区消息的命令。这些消息包含有关硬件、设备驱动程序和其他内核级事件的信息,其中包括像 seccomp 操作这样的安全相关事件。
当 seccomp 处于活动状态并阻止系统调用时,内核通常会将一条消息记录到环形缓冲区中。你可以使用 dmesg 查看这些消息,并筛选出与 seccomp 相关的消息。
如果终端尚未打开,请打开它。
现在,输入以下命令并按下回车键:
dmesg | grep seccomp
下面来拆解一下这个命令:
dmesg:此命令用于显示内核消息。|:这是一个管道符号。它将左边命令(dmesg)的输出作为输入传递给右边的命令(grep)。grep seccomp:此命令用于在接收到的输入中搜索包含 "seccomp" 这个词的行。
该命令的输出将显示所有包含 "seccomp" 一词的内核消息。在一些系统进程或容器使用 seccomp 的典型环境中,你可能会看到类似以下的输出:
[ ... ] audit: type=1326 audit(...): auid=... uid=... gid=... ses=... subj=unconfined seccomp=0 pid=... comm="..." exe="..." sig=0 arch=c000003e syscall=... compat=0 ip=... code=0x...
[ ... ] audit: type=1326 audit(...): auid=... uid=... gid=... ses=... subj=unconfined seccomp=2 pid=... comm="..." exe="..." sig=0 arch=c000003e syscall=... compat=0 ip=... code=0x...
这些消息表明内核审计系统正在记录与 seccomp 相关的事件。审计消息中的 seccomp= 字段显示了事件发生时进程的 seccomp 模式。
如果你没有看到任何输出,这可能意味着在这个特定环境中最近没有记录与 seccomp 相关的事件。这也是正常的,具体取决于系统的活动情况。
将 dmesg 与 grep 结合使用是一种强大的方法,可以筛选内核消息、诊断问题或观察安全事件。
点击 Continue 进入下一步。
在 /sys/kernel/security 中检查 seccomp
在这最后一步中,我们将探索 /sys/kernel/security 目录,该目录为包括 seccomp 在内的各种内核安全模块提供了一个接口。通过这个目录,我们可以检查,有时还能配置内核与安全相关的方面。
如果终端尚未打开,请打开它。
首先,让我们使用 cd 命令导航到 /sys/kernel/security 目录:
cd /sys/kernel/security
现在我们已经进入了 /sys/kernel/security 目录,使用 ls 命令列出其内容:
ls
你应该会看到一个与不同安全模块相关的目录和文件列表。查找与 seccomp 相关的目录或文件。输出可能如下所示(具体内容会因系统而异):
apparmor cap device_cgroup lockdown lsm selinux seccomp smack tomoyo
你应该能看到一个名为 seccomp 的目录。这个目录包含的文件提供了内核层面 seccomp 配置和状态的相关信息。
让我们进入 seccomp 目录:
cd seccomp
现在,列出 seccomp 目录的内容:
ls
根据内核版本和配置的不同,你可能会看到像 policy 这样的文件或其他文件。这些文件可以提供关于系统中已加载或可用的 seccomp 策略的更详细信息。
例如,如果存在 policy 文件(文件名可能不同),你可以尝试查看其内容:
cat policy
cat policy 的输出取决于系统是否全局启用了 seccomp 策略,或者该文件是否提供了其他信息。在许多标准配置中,这个文件可能不会直接包含大量人类可读的策略细节,但它的存在表明 seccomp 是一个被识别的安全模块。
探索 /sys 文件系统,特别是 /sys/kernel/security 路径,是了解 Linux 内核中已启用和配置的安全功能的关键方法。
你现在已经学习了三种在 Linux 环境中检查 seccomp 状态及相关信息的不同方法。
点击 Continue 完成实验。
总结
在本次实验中,你学习了如何检查 Linux 中是否应用了 seccomp 过滤器。我们探索了三种方法:检查 /proc/self/status 文件以查看进程的 Seccomp: 状态;使用 dmesg 命令验证内核日志中与 seccomp 相关的消息;通过 /sys/kernel/security 文件系统检查 seccomp 状态。
这些步骤为确定进程的 seccomp 状态以及了解 Linux 内核如何报告 seccomp 提供了实用的方法,这对于安全分析和故障排除至关重要。



