Linux shell編程之shell命令歷史記錄

目錄shell

shell的命令歷史記錄安全

需求bash

相關參數app

實現步驟學習

 


 

shell的命令歷史記錄

 

需求

>>>系統須要一個目錄用來記錄全部用戶的命令歷史記錄,來作安全保護。spa

>>>建立一個目錄/var/history,該目錄會建立文件記錄全部登陸用戶的歷史命令ci

      文件以 username-userid.log 格式命名;(默認用於記錄用戶歷史命令的文件是當前用戶家目錄下的.bash_history)table

>>>全部用戶執行過的命令都會被追加到對應的文件中 ,而且不能刪除和修改 ——>特殊屬性aawk

>>>用戶輸入的命令要實時刷入硬盤 ——> 特殊屬性s登錄

目錄格式以下:

[bei@localhost ~]$ ls -al /var/history/

dr-xr-xrwx.  2 root      root       4096 Aug  7 22:43 .

drwxr-xr-x. 22 root      root       4096 Jul 22 00:05 ..

-rw-------.  1 bei       bei       76219 Sep 18 20:18 bei-507.log

-r--------.  1 root      root      12815 Sep 18 20:17 root-0.log

文件格式以下:

[bei@localhost ~]$ cat -n /var/history/bei-507.log | tail -5

  4363  ls -al

  4364  #1537327334

  4365  history

  4366  #1537327341

  4367  ifconfig

 


 

相關參數

參數

描述

HISTFILE

用於指定保存命令歷史記錄的路徑及文件名稱(默認~/.bash_history

HISTFILESIZE

用於指定保存命令記錄文件中的最大行數(默認值500,建議設置爲null

HISTSIZE

命令歷史記錄中的記錄的命令最大行數(默認值500,建議設置爲100000
定義了
history命令輸出的行數

HISTTIMEFORMAT

在歷史記錄文件中,使用註釋符來區分時間戳和相關命令

可設置history命令顯示的歷史記錄條目關聯的時間戳輸出格式
例:
readonly HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[{}]//g'     ` `whoami ` "

history命令輸出爲:

[bei@localhost ~]$ history | tail -5

 2188  2018-09-18 20:22:14 (192.168.20.xxx) bei history

 2189  2018-09-18 20:22:21 (192.168.20.xxx) bei ifconfig

 2190  2018-09-18 20:22:49 (192.168.20.xxx) bei cat -n /var/history/bei-507.log | tail -5

 2191  2018-09-18 20:27:45 (192.168.20.xxx) bei history | tail -10

 2192  2018-09-18 20:27:51 (192.168.20.xxx) bei history | tail -5

HISTCONTROL

控制命令在歷史列表中記錄方式

ignorespace:以空格開頭的行不會記錄在歷史中

ignoredups:忽略重複的命令

ignoreboth:參數ignorespaceignoredups同時生效

關於readonly

變量前寫上readonly,非root用戶變量不可更改

 


 

實現步驟

>>>建立目錄/var/history ——> mkdir /var/history

給目錄/var/history賦予全部人的寫權限 ——> chmod a+w /var/history

給目錄/var/history賦予特殊屬性a         ——> chattr +a /var/history

>>>編輯/etc/profile修改shell命令記錄的參數

readonly HISTFILE=/var/history/$USER-$UID.log      #設置保存命令歷史記錄的路徑及文件名稱

readonly HISTSIZE=null

readonly HISTFILESIZE=500000

readonly HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[{}]//g'     ` `whoami ` "

shopt -s histappend                                                         #一個用戶能夠同時打開多個終端

readonly PROMPT_COMMAND="history -a"             #實時追加當前歷史命令到history文件

 

if [ "$HISTCONTROL" = "ignorespace" ] ; then

    export HISTCONTROL=ignoreboth

else

    export HISTCONTROL=ignoredups

fi

 

export HISTSIZE HISTCONTROL

 

 


 

說明:

>>>以上內容是本人學習的總結

>>>如還有錯誤,請留言,指正

>>>亦可分享本身的想法,互相學習