我如何知道 acct 是否正在运行? (Unix系统记账)

我如何知道 acct 是否正在运行? (Unix系统记账)

我已经安装了该acct软件包并且它正在运行,因为我可以在日志文件中看到文件活动。我知道有打开它的命令accton on,但如何确定它没有检查日志文件中是否有活动?

从我的阅读中我相信没有守护进程在运行,因为记帐是作为内核的一部分进行管理的,并且该程序只是允许记录活动。

PS:没有名为“acct”的进程

答案1

我认为没有比仅仅观察日志文件增长或增长失败更好的方法了。这并不是万无一失的,因为会计可以发送到备用文件。即使在没有发生任何奇怪情况的正常系统上,也会有一个 cron 作业停止记帐、轮换日志并重新启动它,这样就会有一个简短的窗口,您会在其中得到错误的答案。

也许 中的某处应该有一个指向当前会计文件的符号链接/proc,但没有。

答案2

我在 CentOS 上,它使用psacct.

psacct作为服务运行,因此您可以:

 service psacct status

您可以检查锁定文件:/var/lock/subsys/psacct

我认为它在内核空间中运行,并且我认为它实际上被设计为很难判断它是否正在运行或打开(如果您使用不伦不类的记帐文件并更改启动脚本中锁定文件的位置)这使得它非常有用用于对被破解的盒子进行取证的工具。

答案3

你是对的:没有与系统记账相关的进程,这是一个内部内核函数,它直接写入系统记账文件,在许多 Unix 上是/var/account/acct.没有系统调用来获取此内部内核函数的状态。

检查系统记帐是否打开的可靠方法是使用标准 Unix 命令lastcomm两次。第一个进程将在系统记帐文件中注册,第二个进程将确认最后终止和注册的进程是lastcomm

在负载较重的服务器上,尤其是在多处理器上,第二个lastcomm可能会在显示第一个之前显示更多其他终止的进程lastcomm。这个是正常的。

这是我获得会计状态的最佳 shell 函数:

is_acct_on() {
    t=`mktemp /tmp/acct.XXXX`
    touch ${t}
    sleep 1
    x=`find /var/account -newercc ${t} -name "acct" | head -1`
    rm ${t}
    [ -z "${x}" ]
}

用法:

is_acct_on

0如果会计关闭则返回

1如果会计已开启。

相关内容