本文目录导读:

Windows 版本 (PowerShell脚本)
基础日志记录脚本
# AutoLogTracker.ps1
$logFile = "C:\Logs\UserActivity_$env:COMPUTERNAME.log"
$logDir = Split-Path $logFile -Parent
# 创建日志目录
if (!(Test-Path $logDir)) {
New-Item -ItemType Directory -Path $logDir -Force
}
function Write-Log {
param([string]$Event, [string]$User)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "$timestamp | $env:COMPUTERNAME | $User | $Event"
Add-Content -Path $logFile -Value $logEntry
}
# 记录登录事件
$currentUser = [System.Environment]::UserName
Write-Log -Event "LOGIN" -User $currentUser
# 注册注销事件
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action {
param($event)
$logFile = "C:\Logs\UserActivity_$env:COMPUTERNAME.log"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "$timestamp | $env:COMPUTERNAME | $env:USERNAME | LOGOUT"
Add-Content -Path $logFile -Value $logEntry
}
通过任务计划程序自动运行
创建启动脚本 (StartLogTracker.bat):
@echo off powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\AutoLogTracker.ps1"
设置任务计划:
# 以管理员身份运行
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File C:\Scripts\AutoLogTracker.ps1"
$trigger = @(
@{UserId="NT AUTHORITY\SYSTEM"; LogonType=5},
@{UserId="NT AUTHORITY\SYSTEM"; LogonType=6}
)
Register-ScheduledTask -TaskName "AutoLogTracker" -Action $action -Trigger $trigger -RunLevel Highest
Linux 版本 (Bash脚本)
使用系统日志的监控脚本
#!/bin/bash
# auto_log_tracker.sh
LOG_FILE="/var/log/user_activity_$(hostname).log"
LAST_LOGIN_FILE="/tmp/last_login_check"
# 确保日志目录存在
sudo touch $LOG_FILE
sudo chmod 644 $LOG_FILE
# 初始化检查点
if [ ! -f $LAST_LOGIN_FILE ]; then
echo "0" | sudo tee $LAST_LOGIN_FILE > /dev/null
fi
# 监控登录/注销事件
function monitor_user_activity() {
# 读取上次检查的时间戳
last_check=$(cat $LAST_LOGIN_FILE)
# 检查login记录 (utmp/wtmp)
last -f /var/log/wtmp | awk -v last_check="$last_check" '
{
if ($0 ~ /^[a-zA-Z]/ && $0 !~ /^reboot|^shutdown|^wtmp/) {
print strftime("%Y-%m-%d %H:%M:%S") " | " strftime("%s") " | " $1 " | LOGIN"
}
}'
# 更新检查点
date +%s | sudo tee $LAST_LOGIN_FILE > /dev/null
}
# 实时监控 (使用auditd)
function realtime_monitor() {
# 使用inotify监控utmp文件变化
while true; do
inotifywait -e modify /var/run/utmp 2>/dev/null
monitor_user_activity >> $LOG_FILE
done
}
# 运行监控
case "$1" in
start)
echo "Starting user activity monitoring..."
monitor_user_activity >> $LOG_FILE
realtime_monitor &
echo $! > /tmp/auto_log_tracker.pid
;;
stop)
echo "Stopping monitoring..."
if [ -f /tmp/auto_log_tracker.pid ]; then
kill $(cat /tmp/auto_log_tracker.pid) 2>/dev/null
rm -f /tmp/auto_log_tracker.pid
fi
;;
status)
if [ -f /tmp/auto_log_tracker.pid ] && kill -0 $(cat /tmp/auto_log_tracker.pid) 2>/dev/null; then
echo "Monitoring is running"
else
echo "Monitoring is not running"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac
使用systemd的登录跟踪
创建systemd服务 (/etc/systemd/system/user-activity-tracker.service):
[Unit] Description=User Activity Logging Service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/auto_log_tracker.sh start ExecStop=/usr/local/bin/auto_log_tracker.sh stop Restart=always User=root [Install] WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload sudo systemctl enable user-activity-tracker.service sudo systemctl start user-activity-tracker.service
跨平台解决方案 (Python脚本)
创建一个跨平台的Python脚本 user_tracker.py:
#!/usr/bin/env python3
import os
import sys
import time
import psutil
import logging
from datetime import datetime
import platform
import subprocess
class UserActivityTracker:
def __init__(self, log_file=None):
if log_file is None:
log_file = f"/var/log/user_activity_{platform.node()}.log" if platform.system() != "Windows" \
else f"C:\\Logs\\user_activity_{platform.node()}.log"
self.log_file = log_file
self.setup_logging()
self.previous_users = set()
def setup_logging(self):
os.makedirs(os.path.dirname(self.log_file), exist_ok=True)
logging.basicConfig(
filename=self.log_file,
level=logging.INFO,
format='%(asctime)s | %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
self.logger = logging.getLogger(__name__)
def get_active_users(self):
"""获取当前活动用户"""
users = set()
if platform.system() == "Windows":
import win32api
import win32security
try:
# 使用Windows API获取登录用户
for session in win32api.EnumLogonSessions():
for info in win32api.EnumLogonSessions(session):
if info:
users.add(str(info[0]))
except:
pass
else:
# Linux系统
try:
result = subprocess.run(['who', '-u'], capture_output=True, text=True)
for line in result.stdout.split('\n'):
if line.strip():
parts = line.split()
if len(parts) > 0:
users.add(parts[0])
except:
pass
return users
def track_users(self):
"""跟踪用户登录/注销"""
current_users = self.get_active_users()
# 检查登录事件
new_users = current_users - self.previous_users
for user in new_users:
self.logger.info(f"{user} | LOGIN")
print(f"[{datetime.now()}] {user} 登录")
# 检查注销事件
logged_out_users = self.previous_users - current_users
for user in logged_out_users:
self.logger.info(f"{user} | LOGOUT")
print(f"[{datetime.now()}] {user} 注销")
self.previous_users = current_users
def run(self, interval=5):
"""主循环"""
print(f"开始监控用户活动 (间隔: {interval}秒)")
print(f"日志文件: {self.log_file}")
try:
while True:
self.track_users()
time.sleep(interval)
except KeyboardInterrupt:
print("\n停止监控...")
if __name__ == "__main__":
tracker = UserActivityTracker()
tracker.run(interval=10)
安装依赖:
pip install psutil pywin32 # Windows需要pywin32
使用说明
Windows部署:
- 以管理员身份运行PowerShell
- 执行基础脚本或设置任务计划
- 查看
C:\Logs\UserActivity_*.log
Linux部署:
- 给予脚本执行权限:
chmod +x auto_log_tracker.sh - 创建systemd服务或直接运行:
./auto_log_tracker.sh start - 查看
/var/log/user_activity_*.log
Python版本:
# 运行 python3 user_tracker.py # 查看日志 tail -f /var/log/user_activity_*.log # Linux type C:\Logs\user_activity_*.log # Windows
日志格式示例
2024-01-15 08:30:00 | server01 | john | LOGIN
2024-01-15 12:00:00 | server01 | john | LOGOUT
2024-01-15 13:00:00 | server01 | jane | LOGIN
这些脚本会自动记录所有用户的登录和注销事件,并保存到指定的日志文件中,您可以根据需要调整监控间隔和日志路径。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播