萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux history 指令客製化:加入時間戳記、使用者、防重複的完整設定

預設 history 只顯示指令編號與內容,缺乏時間、使用者等關鍵審計資訊。透過 /etc/profile.d/ 部署腳本,讓每筆指令自動記錄「誰、何時、在哪、執行什麼」,滿足合規與故障追溯需求。

⚙️ 部署步驟

1. 建立設定腳本

sudo vim /etc/profile.d/history_command.sh

2. 腳本內容 (複製貼上)

#!/bin/bash
# 歷史指令增強設定

# 歷史檔案位置與大小
export HISTFILE=~/.bash_history
export HISTSIZE=1200          # 記憶體中保留筆數
export HISTFILESIZE=1200      # 檔案中保留筆數

# 忽略重複指令、空白開頭指令
export HISTCONTROL=ignoredups:ignorespace

# ⭐ 關鍵:輸出格式「使用者 YYYY-MM-DD HH:MM:SS 指令」
export HISTTIMEFORMAT="$(whoami) %F %T "

# 追加模式寫入 (多終端機同步不覆蓋)
shopt -s histappend

# 唯讀保護,防止子 Shell 竄改
readonly HISTTIMEFORMAT
readonly HISTFILE
readonly HISTSIZE
readonly HISTFILESIZE
readonly HISTCONTROL

3. 賦予執行權限並立即生效

sudo chmod +x /etc/profile.d/history_command.sh
source /etc/profile.d/history_command.sh

🎯 效果驗證

$ history 5
 1008 user1 2024-01-15 09:30:12 vim /etc/ssh/sshd_config
 1009 user1 2024-01-15 09:35:47 systemctl restart sshd
 1010 user1 2024-01-15 09:40:22 tail -f /var/log/auth.log
 1011 user1 2024-01-15 09:45:10 history 10
 1012 user1 2024-01-15 09:50:05 grep "Failed password" /var/log/auth.log

🔧 進階客製化參數

參數格式代碼範例輸出
日期%F2024-01-15
時間%T14:30:45
時間戳 (秒)%s1705312245
主機名$(hostname)web-server-01
終端機$(tty)/dev/pts/3
工作目錄$(pwd)/home/user1

自訂範例: export HISTTIMEFORMAT="[$(hostname)] $(whoami)@$(tty) %F %T "

🔒 安全與合規加強建議

  • 集中式日誌: 配合 syslog-ng/rsyslog 將 history 透過 PROMPT_COMMAND 即時傳送至中央日誌伺服器,防本地竄改。
  • 不可變屬性: chattr +a ~/.bash_history 僅允許追加寫入,禁止刪除/覆寫 (需 root 解除)。
  • 異常指令告警: 結合 auditd 監控敏感指令 (passwd, useradd, iptables, systemctl stop)。
  • Zsh 使用者: 設定在 ~/.zshrc,語法略異:setopt EXTENDED_HISTORY、HISTTIMEFORMAT='%F %T '。
原理說明:/etc/profile.d/*.sh 會在使用者互動式登入 Shell 時自動載入。HISTTIMEFORMAT 非空時,Bash 會在寫入歷史檔時附加時間戳;histappend 確保多終端機並行時歷史記錄不遺失;readonly 防止惡意腳本修改環境變數規避審計。
copyright © 萬盛學電腦網 all rights reserved