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

按登入 IP 記錄所有用戶操作審計日誌方案

編輯:Linux 教學

痛點

傳統 history 僅記錄命令,無時間戳、無登入 IP、用戶可篡改 ~/.bash_history,事後無法追溯「誰在何時從哪裡執行了什麼」。

解決方案:全局 /etc/profile 注入審計腳本

# 追加至 /etc/profile 末尾
cat >> /etc/profile <<'EOF'
# === 審計日誌配置 ===
HISTDIR="/var/log/user_audit"
mkdir -p "$HISTDIR"
chmod 755 "$HISTDIR"

# 取得真實登入 IP(支援 SSH、控制台、su/sudo)
USER_IP=$(who -u am i 2>/dev/null | awk '{print $NF}' | tr -d '()')
[[ -z "$USER_IP" ]] && USER_IP=$(hostname)

# 每用戶每 IP 獨立日誌目錄
USER_DIR="$HISTDIR/${LOGNAME}_${USER_IP//./_}"
mkdir -p "$USER_DIR"
chmod 700 "$USER_DIR"

# 歷史記錄參數
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTTIMEFORMAT="%F %T "
# 日誌檔名含時間戳,按天輪轉
export HISTFILE="$USER_DIR/$(date +%Y%m%d).audit.log"

# 即時寫入(避免進程崩潰丟失)
shopt -s histappend
PROMPT_COMMAND="history -a; ${PROMPT_COMMAND:-:}"

# 僅 root 可讀取審計目錄
chmod 700 "$HISTDIR"
EOF

關鍵點解析

日誌樣本

# /var/log/user_audit/admin_192_168_1_50/20240520.audit.log
2024-05-20 10:15:22 ls -l /etc
2024-05-20 10:15:35 vim /etc/nginx/nginx.conf
2024-05-20 10:16:01 systemctl reload nginx

進階加固(防竄改)

  1. 只寫掛載:將審計目錄掛載為 noexec,nosuid,nodev,甚至使用 chattr +a(僅允許追加)。
  2. 遠端轉發:配合 rsyslog imfile 模組將審計日誌實時推送至中央日誌伺服器。
  3. 簽名驗證:定期對日誌檔計算 sha256sum 並簽名存證。
  4. 強制 Shell:將用戶登入 Shell 設為 /bin/rbash 或自定義受限 Shell,限制 unset HISTFILE 等破壞行為。

局限性與補充

  • 僅對交互式 Bash 生效(sh、zsh、python -c、ssh command 等不經過 /etc/profile 的場景不覆蓋)。
  • 建議配合 auditd 監控 execve 系統調用,實現全命令審計(含參數、環境變量、工作目錄)。
  • 容器環境需在映像構建時注入,或採用 sysdig/falco 等運行時安全工具。

總結

通過修改 /etc/profile 實現「零侵入、全用戶、帶 IP 與時間戳」的操作審計,成本極低、即刻生效。配合中央日誌與 auditd,可構建較完整的命令審計體系,滿足等保三級、ISO27001 等合規要求。

Copyright © Windows教程網 All Rights Reserved
配置作用
HISTTIMEFORMAT每條記錄前自動加上 YYYY-MM-DD HH:MM:SS
HISTFILE 含日期天級輪轉,便於歸檔與 logrotate 管理
histappend + PROMPT_COMMAND每次提示符前追加寫入,而非 Shell 退出時一次性寫入
目錄權限 700防止普通用戶竄改或刪除審計日誌
IP 獲取邏輯who -u am i 可識別 SSH 客戶端 IP;控制台回退主機名