Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 使用 script 命令記錄用戶終端操作審計軌跡

編輯:關於 Linux

script 命令能將整個終端會話(輸入命令、輸出結果、時間戳)錄製為文件,是實現運維操作審計、合規留痕、故障複盤的利器。本文介紹通過 /etc/profile 全局部署 script,自動記錄所有非系統用戶(UID≥1000)的登錄操作。

需求場景

  • 多運維人員共用 root/sudo 賬號,需追溯具體操作人、命令、時間。
  • 生產事故事後複盤,需完整還原現場操作序列。
  • 滿足等保、ISO27001 等合規要求:操作日志留存 ≥6 個月。

部署方案:/etc/profile 全局掛載

編輯 /etc/profile 末尾添加:

# 為每個登錄用戶創建獨立日志目錄
LOG_DIR="/var/log/user_scripts"
mkdir -p "$LOG_DIR"
chmod 750 "$LOG_DIR"
chown root:adm "$LOG_DIR"

# 僅對普通用戶(UID>=1000)啟用,排除系統賬號
if [ "$UID" -ge 1000 ] && [ -z "$SCRIPT_SESSION" ]; then
    export SCRIPT_SESSION=1
    TIMESTAMP=$(date +%Y%m%d%H%M%S)
    LOG_FILE="${LOG_DIR}/${USER}-${UID}-${TIMESTAMP}.log"
    TIMING_FILE="${LOG_DIR}/${USER}-${UID}-${TIMESTAMP}.timing"

    # -t 輸出時間戳到 stderr,重定向到 timing 文件
    # -f 刷新輸出(實時寫入)
    # -q 靜默模式
    # -a 追加模式(防多次登錄覆蓋)
    exec /usr/bin/script -t 2>"$TIMING_FILE" -f -q -a "$LOG_FILE"
fi

關鍵參數解析

日志查看與回放

1. 直接查看命令流(含輸出)

cat /var/log/user_scripts/zhangsan-1001-20240115103000.log
# 或使用 less、grep 篩選
grep "rm -rf" /var/log/user_scripts/*.log

2. 純命令提取(去除輸出)

# 利用 timing 文件回放,仅捕获输入
scriptreplay -t /var/log/user_scripts/zhangsan-1001-20240115103000.timing \
             /var/log/user_scripts/zhangsan-1001-20240115103000.log 2>&1 | \
             grep -E '^[\$#] '  # 簡易提取提示符行

3. 實時回放(如看錄像)

scriptreplay -t timing_file log_file
# -d 加速倍數
scriptreplay -t timing_file -d 2 log_file

日志輪轉與存儲管理

# /etc/logrotate.d/user_scripts
/var/log/user_scripts/*.log /var/log/user_scripts/*.timing {
    daily
    missingok
    rotate 180
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        # 可選:推送到日志中心(ELK、Kafka)
    endscript
}

進階:跳板機/堡壘機集中審計

生產環境建議部署 跳板機,所有運維通過跳板機 SSH 到目標服務器,在跳板機統一啟用 script 或使用專業堡壘機(如 Jumpserver、Teleport、Ansible AWX),實現:

  • 集中存儲、統一權限、Web 界面回放。
  • 命令過攔截(禁止 rm -rf / 等高危命令)。
  • 文件傳輸(SFTP)審計、錄屏回放。
  • 對接 LDAP/AD/OIDC 統一身份認證。

注意事項與繞過風險

參數作用
-t將時間戳(每次輸出間隔)輸出到 stderr,配合 2>timing_file 記錄,供 scriptreplay 回放
-f每次輸出後 flush,確保實時寫入,防崩潰丟失
-q靜默啟動,不提示 "Script started/ended"
-a追加模式,避免同用戶多次登錄覆蓋舊日志
exec替換當前 Shell 進程,使 script 成為登錄 Shell,退出 script 即登出
風險說明緩解措施
用戶手動 exit 退出 scriptexec 替換 Shell,exit 即登出,無法繞過正確配置 exec,無法在 script 內再次 exec
用戶使用 ssh -t 強制分配 TTY 繞過script 依賴 TTY,正常 SSH 即分配 TTY配置正確,無繞過空間
用戶修改 /etc/profile需 root 權限嚴格控制 root/sudo 權限
性能開銷高頻 I/O 寫入磁盤日志目錄掛載高性能存儲、開啟 logrotate 壓縮

script 部署簡單、零依賴、原生支持,是中小團隊快速落地操作審計的首選方案。大規模環境建議上堡壘機平台,實現全生命週期審計閉環。

Copyright © Windows教程網 All Rights Reserved