我搜索了 AskUbuntu 数据库,但找到的最接近的答案是关于如何记录错误的问题。
我正在寻找的是每次使用 sudo gedit / gksu gedit / pkexec gedit 时将其附加到日志文件/审计跟踪中。实际上,我将使用一个名为的包装器脚本,gsu
该脚本调用pkexec gedit
。
我想要做的是将~/gedit-log
以下内容附加到审计文件中:
YYYY-MM-DD hh:mm:ss Count /SystemDirectoryName/SystemFileName
请记住,我可能会导航到 /SystemDirectoryName 然后调用,gsu gedit SystemFileName
因此第一个参数不能自动使用,因为必须添加路径。因此需要一个 bash 命令“这是文件名,请提供完整路径和文件名”。
当前日期和时间应采用人类可读的格式(而不是从 1970 年(纪元时间)算起的秒数)。示例中的日期和时间掩码可能不合适,而应符合行业标准。
需要一个命令将组合字符串 + CR/LF(回车换行符)附加到审计跟踪/日志文件。
将来,需要一个处理程序/脚本来统计某个文件被编辑的所有次数(/etc/default/grub 可能会有很多编辑),并将其放入“计数”字段中,然后删除多余的记录。这可能是一项cron
日常工作?
有两个日期/时间字段可能比较合理。一个用于首次更改,一个用于上次更改。
希望此代码已经存在于 Linuxverse 中,或者可以轻松采用类似的代码。
代码本身可能会被放入单独的 bash 脚本中,因此它可以重新用于许多情况...例如,该用户编辑了该工资文件等。
答案1
对于我来说,最简单的答案不是使用journalctl
衍生产品,而是使用“强力”编程/脚本。
这是代码。
~/bin/gsu
:
#!/bin/bash
# Usage: gsu gedit file1 file2...
# -OR- gsu natuilus /dirname
# & is used to spawn process and get prompt back ASAP
# > /dev/null is used to send gtk warnings into dumpster
COMMAND="$1" # extract gedit or nautilus
pkexec "$COMMAND" "${@:2}"
log-file "${@:2}" gsu-log-file-for-"$COMMAND"
/usr/local/bin/log-file
:
#! /bin/bash
# NAME: log-file
# PATH: /usr/local/bin
# DESC: Update audit trail/log file with passed parameters.
# CALL: log-file FileName LogFileName
# DATE: Created Nov 18, 2016.
# NOTE: Primarily called from ~/bin/gsu
ABSOLUTE_NAME=$(realpath "$1")
TIME_STAMP=$(date +"%D - %T")
LOG_FILE="$2"
# Does log file need to be created?
if [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
echo "__Date__ - __Time__ - ______File Name______" >> "$LOG_FILE"
# MM/DD/YY - hh:mm:ss - "a/b/c/FileName"
fi
echo "$TIME_STAMP" - '"'"$ABSOLUTE_NAME"'"' >> "$LOG_FILE"
exit 0
gsu-log-file-for-gedit
经过几次编辑后的日志文件内容:
__Date__ - __Time__ - ______File Name______
11/18/16 - 19:07:54 - "/etc/default/grub"
11/18/16 - 19:08:34 - "/home/rick/bin/gsu"
11/18/16 - 19:09:26 - "/home/rick/bin/gsu"
未来的增强功能
合并脚本将取出最后两行并将其合并为:
11/18/16 - 19:09:26 - "/home/rick/bin/gsu" (2 edits, first on 11/18/16 - 19:08:34"