不可思議!只需這一招,審計變得手到擒來,用戶行為無所遁形!
Linux 審計在安全管理中至關重要,不僅能檢測和預防潛在的安全威脅,還能追蹤用戶行為、確保合規性并提供詳盡的操作記錄。這些審計功能為系統管理員和安全專家提供了維護系統完整性和安全性所需的重要信息。
PROMPT_COMMAND是一個在 Bash shell 中非常有用的環境變量。它允許用戶在每次顯示命令提示符之前執行指定的命令。這可以用于多種用途,例如自動更新命令提示符的內容、記錄命令歷史、監視系統狀態等。
今天通過配置PROMPT_COMMAND實現審計命令行所有操作。最終實現的效果如下圖:
什么是PROMPT_COMMAND?
PROMPT_COMMAND 是一個 Bash 環境變量,它包含一個命令或一組命令。這些命令在每次顯示命令提示符之前執行。通過使用 PROMPT_COMMAND,可以動態地更改提示符的內容或執行其他自動化任務。
實現審計命令行所有操作
1.配置環境變量
編輯/etc/profile,在改文件中導出一個變量,并設置改變量為只讀模式。如下圖所示:
該命令太長,可能不太容易理解。別擔心,接下來我們將通過拆解,詳細解析這個命令的作用和用法。
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[]*[0-9]\+[ ]*//") [$RETRN_VAL]"'
readonly PROMPT_COMMAND
2.命令拆解與解析
(1) RETRN_VAL=$?
$?是一個特殊變量,它存儲了上一個命令的退出狀態(返回值)。將其賦值給RETRN_VAL變量,以便在后續使用。
(2) logger -p local6.debug
logger是一個命令,用于將消息寫入系統日志。選項-p指定消息的優先級。local6.debug表示使用 local6這個本地設施(facility),并且日志級別為debug。
(3) "$]:
RETRN_VAL]"
這是傳遞給 logger 命令的日志消息。它包含以下幾部分:
- $(whoami): 這個命令返回當前用戶的用戶名。
- [$$]: 這個特殊變量表示當前進程的進程ID
- $(history 1 | sed "s/^[]*[0-9]\+[ ]*//"): 這部分命令獲取最近執行的命令,并使用sed刪除歷史編號。
- [$RETRN_VAL]: 包含上一個命令的退出狀態。
(4) readonly:將環境變量設置為只讀以防止被修改。
3.自定義日志路徑
然后在/etc/rsyslog.d目錄下創建一個history.conf,內容如下;
local6.debug /var/log/users-command.log
該配置的意思是將local6.debug的日志指定到自定義的文件目錄下。
4.重啟rsyslog服務
重啟rsyslog服務,執行如下命令:
systemctl restart rsyslog
完成了上述配置后,每個用戶登錄系統上做了什么操作都一目了然了。如下圖:
總結
PROMPT_COMMAND是一個強大的工具,可以用來定制 Bash 提示符并實現自動化任務。通過正確配置 PROMPT_COMMAND,你可以提高命令行的效率和信息可見性。希望本教程能幫助你更好地理解和使用 PROMPT_COMMAND。