实时 history 监控
实时 history 监控
This commit is contained in:
81
实时 history 监控
Normal file
81
实时 history 监控
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 实时 history 监控 - 强制实时写入
|
||||||
|
echo "启用实时 history 监控..."
|
||||||
|
|
||||||
|
# 配置所有用户的 bash 为实时记录
|
||||||
|
configure_realtime_history() {
|
||||||
|
for user_dir in /home/* /root; do
|
||||||
|
if [ -d "$user_dir" ]; then
|
||||||
|
user=$(basename "$user_dir")
|
||||||
|
bashrc="$user_dir/.bashrc"
|
||||||
|
|
||||||
|
# 添加实时 history 配置
|
||||||
|
if [ -f "$bashrc" ]; then
|
||||||
|
if ! grep -q "REAL_TIME_HISTORY" "$bashrc"; then
|
||||||
|
echo "
|
||||||
|
# REAL_TIME_HISTORY - 实时记录命令
|
||||||
|
export PROMPT_COMMAND='history -a; history -c; history -r'
|
||||||
|
export HISTTIMEFORMAT='%F %T '
|
||||||
|
shopt -s histappend
|
||||||
|
" >> "$bashrc"
|
||||||
|
echo "已为用户 $user 配置实时 history"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 监控 history 文件变化
|
||||||
|
monitor_history() {
|
||||||
|
echo "开始监控命令历史..."
|
||||||
|
|
||||||
|
# 获取初始文件状态
|
||||||
|
declare -A file_sizes
|
||||||
|
for user_dir in /home/* /root; do
|
||||||
|
if [ -d "$user_dir" ]; then
|
||||||
|
user=$(basename "$user_dir")
|
||||||
|
history_file="$user_dir/.bash_history"
|
||||||
|
if [ -f "$history_file" ]; then
|
||||||
|
file_sizes["$user"]=$(stat -c%s "$history_file")
|
||||||
|
else
|
||||||
|
file_sizes["$user"]=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 持续监控
|
||||||
|
while true; do
|
||||||
|
for user_dir in /home/* /root; do
|
||||||
|
if [ -d "$user_dir" ]; then
|
||||||
|
user=$(basename "$user_dir")
|
||||||
|
history_file="$user_dir/.bash_history"
|
||||||
|
|
||||||
|
if [ -f "$history_file" ]; then
|
||||||
|
current_size=$(stat -c%s "$history_file")
|
||||||
|
last_size=${file_sizes["$user"]}
|
||||||
|
|
||||||
|
if [ "$current_size" -gt "$last_size" ]; then
|
||||||
|
# 读取新内容
|
||||||
|
new_content=$(tail -c +$((last_size + 1)) "$history_file" 2>/dev/null)
|
||||||
|
if [ -n "$new_content" ]; then
|
||||||
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 用户 $user 执行命令:"
|
||||||
|
echo "$new_content" | while IFS= read -r line; do
|
||||||
|
if [ -n "$line" ] && [ "${#line}" -gt 1 ]; then
|
||||||
|
echo " → $line"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "---"
|
||||||
|
fi
|
||||||
|
file_sizes["$user"]=$current_size
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 执行
|
||||||
|
configure_realtime_history
|
||||||
|
monitor_history
|
||||||
Reference in New Issue
Block a user