Linux
在命令上執行 shell 腳本
我想在
date -s <string>
使用命令時執行一個 shell 腳本。例如,我想通過在 shell 腳本中執行以下命令將命令記錄到文件 /tmp/user.loglogger -p user.notice "date -s command executed" -f /tmp/user.log
在 shell 上執行時如何執行 shell 腳本
date -s <string>
?為了使其更通用,我想在其他人在我的系統上發出特定的 linux 命令時執行我的 shell 腳本。這該怎麼做?
重新表述這個問題,您想知道何時有人嘗試設置系統時間。這正是
audit
子系統的用途……它允許您審核特定係統呼叫的執行。在這種情況下,您想知道何時有人呼叫任何可以更改系統時間的各種系統呼叫。通過使用該audit
子系統,無論是有人呼叫/bin/date
還是他們自己本地建構的命令版本,您都有一個可以正常工作的解決方案。有關規則語法的完整描述,請參閱
auditd(8)
和audit.rules(7)
,有關審核時間更改操作的範例,您可以在範例nispom.rules
文件中查找“時間更改”。您可以在本地系統上找到它,也可以在這裡找到它:有關
audit
子系統的更多資訊(文件有點難找):
您不能輕易地阻止使用者執行他自己的程序版本,但如果您假設使用者不是惡意的,則很容易:
- 創建一個記錄程序然後執行它的包裝腳本(使用原始參數)
- 確保包裝器替換使用者路徑中的原始程序。
您可以使用別名讓使用者使用包裝器,或者您可以簡單地移動/重命名原始程序並將包裝器放在原始位置。
如果您只想記錄一些執行,請在包裝腳本中使用正則表達式。