![我如何知道 acct 是否正在运行? (Unix系统记账)](https://linux22.com/image/45356/%E6%88%91%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%20acct%20%E6%98%AF%E5%90%A6%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%EF%BC%9F%20%EF%BC%88Unix%E7%B3%BB%E7%BB%9F%E8%AE%B0%E8%B4%A6%EF%BC%89.png)
我已经安装了该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
如果会计已开启。