2012-03-12 491 views
4

我編寫了一個腳本,用於發送登錄到日誌文件的人的日期和用戶名以記錄誰已經登錄。我想知道如何將此腳本設置爲當用戶登錄時自動執行,而不必在終端中手動運行它。注:用戶名是登錄的當前用戶登錄後自動運行Bash腳本

我的代碼:

#!/bin/bash 

printf "$(date) $HOSTNAME booted!\n" >> /home/USERNAME/boot.log 
+0

是否有任何安全考慮?你相信用戶嗎?特別是 - 如果用戶有能力禁用日誌記錄或篡改他/她登錄的現有記錄,那麼這樣做是否正確? – ruakh 2012-03-12 20:21:48

回答

4

解決此問題的更優雅的方法是從日誌文件中讀取,這些日誌文件已被寫入並且不能被用戶更改。沒有人可以說它比Bjørne Malmanger's in his answer更好:

我不會相信用戶給你提供的信息。作爲root你 把它;-)

一個很好的方式做,這是last命令,這是偉大的,因爲它巧妙地顯示所有登錄:圖形,控制檯和SSH。

last 

不太優雅但仍然安全的方法是在/var/log/auth.log上執行grep。在我的Gnome/Ubuntu系統,我可以用它來追蹤圖形登錄:需要爲每個登錄類型被發現

grep "session opened for user USERNAME" 

爲您的機器正確的模式:圖形,控制檯和SSH。這很麻煩,但是如果你需要的信息比last的信息更遠,你可能需要這樣做。

直接回答你的問題:

您可以修改這樣的腳本來獲取用戶名

#!bin/bash 
printf "$(date) $HOSTNAME booted!\n" >> /home/$(whoami)/boot.log 

這行添加到/ etc/profile文件

. /path/to/script.sh 

這是不安全,但因爲用戶將能夠編輯自己的日誌

+0

我會遠離bashrc文件。每次打開一個新shell時,它們都會記錄下來,如果有人在xterm或GNU Screen中使用了選項卡,它們會很快填滿。 – gpojd 2012-03-12 20:31:12

+0

@gpojd:好點。知道任何替代方法,除了跟蹤auth.log? – cmc 2012-03-12 20:32:17

+1

我認爲它可以在/ etc/profile中正常工作。它只在發生新的登錄時運行,而不是在打開新的shell時運行。 – gpojd 2012-03-12 20:34:53

2

爲什麼不'您是否使用last命令?

我不會相信用戶給你提供的信息。作爲根你採取;-)