本文目录导读:

我来介绍使用Shell脚本监控用户操作行为的几种方法:
监控登录和命令历史
实时监控用户登录
#!/bin/bash
# user_monitor.sh
LOG_FILE="/var/log/user_monitor.log"
# 监控登录用户变化
while true; do
CURRENT_USERS=$(who | wc -l)
echo "$(date '+%Y-%m-%d %H:%M:%S') - 当前登录用户数: $CURRENT_USERS" >> $LOG_FILE
who >> $LOG_FILE
echo "---" >> $LOG_FILE
sleep 60
done
监控特定用户的命令执行
#!/bin/bash
# command_monitor.sh
MONITOR_USER="username"
LOG_FILE="/var/log/cmd_monitor.log"
# 监控特定用户的~/.bash_history
tail -f /home/$MONITOR_USER/.bash_history | while read line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') - $MONITOR_USER: $line" >> $LOG_FILE
done
使用auditd进行系统调用监控
#!/bin/bash # audit_monitor.sh # 安装并配置auditd yum install audit audit-libs -y 2>/dev/null || apt-get install auditd -y 2>/dev/null # 添加审计规则 auditctl -w /etc/passwd -p wa -k passwd_changes auditctl -w /etc/shadow -p wa -k shadow_changes auditctl -w /etc/sudoers -p wa -k sudoers_changes # 搜索审计日志 ausearch -k passwd_changes --format text | tail -20
文件操作监控
#!/bin/bash
# file_monitor.sh
WATCH_DIR="/etc /home /root"
LOG_FILE="/var/log/file_monitor.log"
# 使用inotify监控文件变化
while read -r line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') - $line" >> $LOG_FILE
# 通过邮件发送警报(可选)
# echo "$line" | mail -s "文件变化警报" admin@example.com
done < <(inotifywait -mr -e modify,create,delete,move $WATCH_DIR 2>/dev/null)
SSH连接监控
#!/bin/bash
# ssh_monitor.sh
LOG_FILE="/var/log/ssh_monitor.log"
# 监控SSH日志
tail -f /var/log/auth.log 2>/dev/null | grep -E "sshd" | while read line; do
if echo "$line" | grep -qE "Accepted|Failed"; then
USER=$(echo "$line" | grep -oP "user \K\w+")
IP=$(echo "$line" | grep -oP "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
ACTION=$(echo "$line" | grep -oP "^\w+ \d+ \d+:\d+:\d+.*?(Accepted|Failed)")
echo "$(date '+%Y-%m-%d %H:%M:%S') - SSH $ACTION - 用户: $USER - IP: $IP" >> $LOG_FILE
# 记录失败的登录尝试
if echo "$line" | grep -q "Failed"; then
echo "警告:SSH登录失败 - 用户: $USER - IP: $IP" >> $LOG_FILE
fi
fi
done
综合监控脚本
#!/bin/bash
# comprehensive_monitor.sh
# 配置
LOG_DIR="/var/log/user_activity"
MONITOR_USERS=("root" "admin" "devops")
ALERT_EMAIL="admin@example.com"
# 创建日志目录
mkdir -p $LOG_DIR
# 函数:记录用户活动
log_user_activity() {
local user=$1
local activity=$2
local log_file="$LOG_DIR/${user}_activity.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') | $user | $activity" >> $log_file
# 检测可疑活动
case "$activity" in
*"sudo"*|*"su"*|*"passwd"*|*"useradd"*|*"userdel"*)
echo "高危操作警报: $user - $activity" | mail -s "安全警报" $ALERT_EMAIL
;;
esac
}
# 主监控循环
echo "启动用户行为监控..."
echo "时间: $(date)"
echo "监控用户: ${MONITOR_USERS[*]}"
echo "日志目录: $LOG_DIR"
while true; do
# 监控当前登录用户
who >> "$LOG_DIR/current_users.log"
# 监控特定用户的活动
for user in "${MONITOR_USERS[@]}"; do
# 检查用户是否在线
if who | grep -q "^$user"; then
# 获取该用户的进程信息
ps -u "$user" --no-headers 2>/dev/null | while read -r line; do
pid=$(echo "$line" | awk '{print $1}')
cmd=$(echo "$line" | awk '{$1=$2=""; print $0}' | sed 's/^ *//')
log_user_activity "$user" "PID:$pid $cmd"
done
fi
done
# 检查并清理旧的日志文件(保留30天)
find "$LOG_DIR" -name "*.log" -mtime +30 -delete 2>/dev/null
sleep 10
done
使用系统审计
#!/bin/bash
# system_audit.sh
AUDIT_DIR="/var/log/audit"
# 安装audit包
install_audit() {
if command -v yum &> /dev/null; then
yum install -y audit audit-libs
elif command -v apt-get &> /dev/null; then
apt-get install -y auditd audispd-plugins
fi
}
# 配置审计规则
configure_audit() {
cat > /etc/audit/rules.d/user_monitor.rules << EOF
# 监控用户创建和删除
-w /etc/passwd -p wa -k user_account
-w /etc/shadow -p wa -k user_account
-w /etc/group -p wa -k user_account
# 监控sudo命令
-w /etc/sudoers -p wa -k sudo_usage
-w /var/log/sudo.log -p rw -k sudo_log
# 监控重要文件
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /etc/crontab -p wa -k cron_changes
# 监控系统调用(可选)
-a always,exit -S execve -k process_execution
EOF
auditctl -D
auditctl -R /etc/audit/rules.d/user_monitor.rules
}
# 生成报告
generate_report() {
local report_file="$AUDIT_DIR/report_$(date +%Y%m%d).txt"
echo "=== 用户行为审计报告 ===" > $report_file
echo "生成时间: $(date)" >> $report_file
echo "" >> $report_file
# 最近的小时内的活动
echo "=== 最近1小时内的用户活动 ===" >> $report_file
ausearch -ts recent -i >> $report_file 2>/dev/null
# 特定类型的事件
echo "" >> $report_file
echo "=== sudo使用记录 ===" >> $report_file
ausearch -k sudo_usage -ts today -i >> $report_file 2>/dev/null
echo "" >> $report_file
echo "=== 账户变更记录 ===" >> $report_file
ausearch -k user_account -ts today -i >> $report_file 2>/dev/null
}
# 主函数
main() {
echo "系统审计配置开始..."
install_audit
configure_audit
generate_report
echo "审计配置完成,日志位置: $AUDIT_DIR"
}
main
使用proctable监控进程
#!/bin/bash
# process_monitor.sh
LOG_FILE="/var/log/process_monitor.log"
monitor_processes() {
while true; do
echo "=== $(date '+%Y-%m-%d %H:%M:%S') ===" >> $LOG_FILE
# 监控所有用户进程
ps aux --sort=-%cpu | head -20 >> $LOG_FILE
# 监控特定进程
echo "--- 监控进程 ---" >> $LOG_FILE
ps -eo pid,ppid,user,cmd,%cpu,%mem --sort=-%cpu | head -10 >> $LOG_FILE
# 监控网络连接
echo "--- 网络连接 ---" >> $LOG_FILE
netstat -tulpn 2>/dev/null | grep -E "LISTEN|ESTABLISHED" >> $LOG_FILE
echo "" >> $LOG_FILE
sleep 300 # 每5分钟监控一次
done
}
# 启动监控
monitor_processes &
echo "进程监控已启动,PID: $!"
使用方法
-
赋予执行权限:
chmod +x monitor_script.sh
-
作为服务运行:
# 创建systemd服务 cat > /etc/systemd/system/user-monitor.service << EOF [Unit] Description=User Activity Monitor After=network.target
[Service] Type=simple ExecStart=/path/to/monitor_script.sh Restart=always User=root
[Install] WantedBy=multi-user.target EOF
systemctl daemon-reload systemctl enable user-monitor.service systemctl start user-monitor.service
3. **查看监控日志**:
```bash
tail -f /var/log/user_monitor.log
注意事项
- 权限管理:监控脚本需要root权限才能获取全面信息
- 日志轮转:使用logrotate管理日志文件大小
- 性能影响:频繁的监控可能影响系统性能
- 隐私考虑:确保符合公司政策和当地法律法规
- 安全存储:保护监控日志的安全,防止未授权访问
这些脚本可以帮助你全面监控用户操作行为,但建议根据具体需求选择合适的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播