Linux History安全問題【儲存記錄防止刪除】+完善Linux/UNIX審計 將每個shell命令記入日誌

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   使用   ar   strong   

 

2011-09-27 22:11:51|  分類: rhel5_033|舉報|字型大小 訂閱

    Linux利用PROMPT_COMMAND實現審計功能

這個系統審計,記錄什麼使用者,在什麼時間,做了什麼操作。 然後將查到的資訊記錄到一個檔案裡。

一. 配置

 

1. 在/etc/profile 檔案的最後,添加如下2行代碼:

 

 

 

export HISTORY_FILE=/var/log/`date ‘+%Y%m’`.log 

export PROMPT_COMMAND=’{ date “+%Y-%m-%d %T ##### $(who am i |awk “{print \$1\” \”\$2\” \”\$5}”)  #### $(history 1 | { read x cmd; echo “$cmd”; })”; } >> $HISTORY_FILE’ 

添加完成儲存退出。這樣任何操作命令都會在/var/log/日期.log中看到。還可以自己定義目錄或者檔案。讓別人找不到 只允許自己看。只需要修改

 

export HISTORY_FILE=/var/log/`date ‘+%Y%m’`.log  這個記錄就可

/etc/profile: 此檔案為系統的每個使用者佈建環境資訊,當使用者第一次登入時,該檔案被執行.並從/etc/profile.d目錄的設定檔中搜集shell的設定.

 

[[email protected] ~]#. /etc/profile 或者   [[email protected] ~]#source /etc/profile

 使更改生效,如果沒有報錯說明成功了。

 驗證日誌裡面是否有資料

 [[email protected] ~]# more /var/log/201107.log

2011-07-21 17:29:08 ##### root pts/2 (192.168.23.250)  #### . /etc/profile

可以看到裡面已經有資料。

 還可以使用

 PROMPT_COMMAND=’{ date “+%Y-%m-%d %T ##### USER:$USER IP:$SSH_CLIENT PS:$SSH_TTY #### $(history 1 | { read x cmd; echo “$cmd”; })”; } >>$HISTORY_FILE’

命令不一樣但是結果是一樣的。

 

 

編者按:為了確保伺服器的安全,保留shell命令的執行曆史是非常有用的一條技巧。然而,shell雖然有曆史功能,但是這個功能並非針對審計的目的而設計,因此很容易被使用者篡改或是丟失。本文介紹的步驟能夠協助你將每個shell命令記入日誌(你可以將本文和bash history logging攻防一文參考著閱讀,看看攻防雙方的思路有何不同)。本文作者David Douthitt是一位經驗豐富的UNIX和Linux系統管理員,曾做過Linux發行版的打包工作,也是《Advanced Topics in System Administration》和《GNU Screen: A Comprehensive Manual》兩本書的作者。以下為本文:

將使用者執行的每個shell命令記入日誌比最初想象的要來得困難。shell的曆史功能原本旨在協助使用者使用以前用過的命令。我們都知道這種使用場合:你剛輸入了一個長長的欄位,可是拼錯了一個字元。shell的曆史讓你可以改正這一個字元,而不必輸入其餘的所有字元。

然而, shell曆史很難滿足審計的目的。換言之,它不是為了確保系統安全而設計的。

對於bash shell來說,問題顯得尤其困難,因為該shell的目的是,不管用什麼辦法,儘可能為使用者簡化生活——所以,它擁有所有的“花哨功能”(bells and whistles)。必須顧及所有這些多種功能,並且防止對曆史檔案變更。

Korn shell比較簡單,使得保護shell的曆史比較容易。

如果想要嚴加保管這些shell的曆史,需要執行一系列的步驟。

首先,鎖定shell的曆史檔案本身。更改它的屬性,末尾只添加chattr +a .sh_history或chattr +a .bash_history。這樣一來,就不可能刪除或變更檔中的資料,連使用者都無法改變屬性——只有root使用者才能改變。

其次,確保曆史變數設定合理、無法更改。這些曆史變數包括最重要的HISTFILE、HISTCOMMAND和HISTIGNORE。要做到這一點,使用shell的typeset命令,帶-r選項,這使得指定的變數擁有唯讀屬性。良好的操作規範是使所有曆史環境變數都變為唯讀,比如:

export HISTCONTROL=  export HISTFILE=$HOME/.bash_history  export HISTFILESIZE=2000  export HISTIGNORE=  export HISTSIZE=1000  export HISTTIMEFORMAT="%a %b %Y %T %z "  typeset -r HISTCONTROL  typeset -r HISTFILE  typeset -r HISTFILESIZE  typeset -r HISTIGNORE  typeset -r HISTSIZE  typeset -r HISTTIMEFORMAT

HISTTIMEFORMAT是bash shell的擴充,將在曆史檔案中提供時間戳記。

對於bash shell來說,你需要更改曆史的一些標準選項:

shopt -s cmdhist  #設定cmdhist將把多行命令放入到單單一個曆史行  shopt -s histappend  #設定histappend將確保被添加到曆史檔案,而不是像通常的做法那樣覆蓋曆史檔案。

另外對於bash shell來說,還要設定PROMPT_COMMAND:

PROMPT_COMMAND="history -a"  typeset -r PROMPT_COMMAND

這是由於bash shell實際上把曆史寫入到記憶體中,曆史檔案僅在shell會話結束時加以更新。這個命令會把上一個命令附加到磁碟上的曆史檔案。

最後,建立一個SIGDEBUG陷阱,將命令發送到系統日誌(syslog)。VMware的ESXi藉助自己版本的ash shell已經具有這樣的功能。簡而言之,應建立一個把當前命令記入日誌(從曆史檔案擷取)的函數,然後用logger命令,把它發送到系統日誌。這一步在bash shell和Korn Shell中都適用。

這些步驟有些冗長,不過在新版的bash和ksh中有一些新的功能特性,讓這一切變得極其容易。GNU Bash在4.1版中添加了記入到系統日誌中的功能,只需要編譯shell的時候開啟該功能即可啟用。

自推出ksh93以來,Korn Shell就一直具有審計功能。類似bash 4.1,使用者審計是一項編譯時間功能。想看看你所用的ksh93版本是否安裝了審計功能,可以執行下列命令中的某一條:

echo ${.sh.version}  echo $KSH_VERSION

在Ubuntu 10.10中,我得到了來自ksh93的這個輸出:

# echo ${.sh.version}  Version JM 93t+ 2009-05-01

如果審計功能開啟,特徵字串(JM)還會有字母A(開啟審計功能),可能還有字母L(開啟針對使用者的審計功能)。IBM DeveloperWorks和Musings of an OS Plumber都刊有介紹Korn Shell審計的出色文章。

Bash shell含有審計功能的可能性也比較小。Ubuntu 10.10上的bash是4.1.5(1)版本。

對於仍在使用C shell(以及尤其是tsch)的使用者,tcsh有一個變種名為“tcsh-bofh”,它支援記入到系統日誌中。遺憾的是,tcsh-bofh並沒有得到長期的維護。早在2010年1月,tcsh-bofh的FreeBSD連接埠就從FreeBSD連接埠樹(port tree)去除了。

上述資訊也可以在shell之外擷取。比如有兩個命令:lastcomm(來自Ubuntu Main軟體倉庫中的acct程式包)和auditctl(來自Ubuntu Universe軟體倉庫中的auditd程式包)。另外, Linux Journal在2002年刊發過一篇關於Linux進程統計的好文章。另外還有rootsh和snoopylogger這兩個程式包,只是兩者都不在Ubuntu軟體倉庫中。Rootsh好比是typescript的執行版本,而snoopylogger是你可以添加到使用者環境的系統庫。(這些方法有許多來自在serverfault.com上所提的一個問題,請參閱這個文章。)

Linux History安全問題【儲存記錄防止刪除】+完善Linux/UNIX審計 將每個shell命令記入日誌

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.