使用者空間程序應該在哪裡保存他們的日誌?
我正在編寫一個我想在沒有特權的情況下執行的腳本。我希望將腳本遇到的錯誤記錄到某個日誌文件中。我沒有權限寫一個到
/var/log
. 而且我不想在我的主目錄中有一個。是否存在使用者空間腳本可以記錄執行時資訊的位置?
/var/log
在不產生任何潛在安全問題的情況下讓我的腳本日誌資訊的最佳做法是什麼?我對在腳本上設置 uid / gid 猶豫不決。
您不能以普通使用者的身份寫入 /var/log,但如果您提出要求,syslog 守護程序會為您執行此操作。如果您想將消息記錄到標準系統日誌(例如
/var/log/syslog
),4.4BSD 實用程序logger
可能在您的系統上可用。它預設安裝在 Debian 上,並且位於bsdutils
Debian 衍生產品的軟體包中。您將獲得任何預先存在的日誌輪換、維護和監視工具的優勢,但缺點是需要讀取系統日誌的權限,以及將腳本的消息與來自其他程序的消息混合在一起。
$ logger Hello $ echo Goodbye | logger $ sudo tail -2 /var/log/syslog Feb 19 21:16:15 debian-host jander: Hello Feb 19 21:16:21 debian-host logger: Goodbye
有幾個配置選項可用;您可以閱讀更多內容
man logger
。
如果您作為一個普通使用者決定執行一個程序,那麼它的日誌自然存放在您的主目錄中。您的主目錄用於儲存所有文件,無論它們是您執行的程序的日誌還是其他任何文件。
如果程序作為系統的一部分執行,作為典型的專用系統使用者執行,那麼其日誌的自然位置是
/var/log
. 創建一個子目錄/var/log/myapp
並為其賦予適當的權限,以便您的應用程序可以在那裡寫入。如果相關並且您的作業系統允許,請將日誌文件標記為僅附加。只有 root 可以做到這一點。這樣做的好處是,如果您的應用程序遭到入侵,它將無法刪除過去的日誌,這對於對入侵進行取證分析非常有用。您將需要 root 的干預來輪換日誌:
chown
以便應用程序無法再打開rename
日誌文件,日誌文件,創建一個具有適當所有權的新的僅附加文件,然後通知應用程序打開新的空文件.