与安全相关的练习:
为了提高安全性,我acct
启用了传统的 Unix 记账 ( )。这有助于事后调查可疑活动。
根据手册页,/var/log/account
有一个目录包含pacct
(进程记帐)文件,其中包含内核写入的进程记帐数据,大概是针对exit
记帐处于活动状态时编辑的每个进程。命令名称被截断为 15 个字符(这似乎是一个小错误:man 5 acct
显示#define ACCT_COMM 16
不包括结构中终止 NULL 的附加字符,但我看到最大值为 15 个字符而不是 16 个)。
当我运行lastcomm
将最新pacct
文件转换为人类可读格式的命令时,即使我忽略了超过 15 个字符限制的字符,我也会得到一些行,其中第一列(最左边)不是明显的命令(磁盘上可执行文件的名称)。以下是一些示例:
kworker/dying
handle-watcher-
WorkerPool/28
ScriptStreamerT
Compositor
CompositorTileW
Chrome_ChildIOT
其中一些看起来像是内核线程的名称。我可以看到还有许多正在运行的线程(例如在 中),但这些线程未出现在此列表中。我假设缺失的线程是自启用以来top
从未运行过的长时间运行的进程。exit
acct
问题: 有人能解释一下上述每个未说明的进程是什么吗?
作为参考,这里是列出磁盘上未找到的命令的 bash 脚本,因此您可以自己运行它(确保sudo updatedb
先运行)
#!/bin/bash
fullpath_of_cmd() {
# cmd may be truncated to a max of 15 chars (see "man 5 acct")
cmd="$1"
# Search for any file matching this prefix
# (assumes locate db is up to date)
paths=$(locate "/$cmd")
echo "$paths"
}
for cmd in $(lastcomm | cut -d' ' -f1 | sort -u); do
# echo === $cmd
paths=$(fullpath_of_cmd "$cmd")
case "$paths" in
(*/$cmd*) : cool, found it ;;
(*) printf "%s -> NOT FOUND (%s)\n" $cmd $paths ;;
esac
done