雲端計算之linux伺服器使用者管理
技術背景:
工程師A:公司裡那麼多伺服器,每天伺服器上都會建立些新使用者,這樣不安全
工程師B:不給他們建立使用者的許可權不就好了?
工程師A:不放權,事事都自己管,那不累死了
工程師B:那就寫指令碼監控,這樣就知道什麼時候,誰通過哪個終端建立了哪個使用者了
技術實現:
伺服器環境:centos7.4
1.執行pstree可以看到:程序樹上有一個auditd程序
auditd程序是審計監控,可以記錄誰在什麼時候對哪個檔案做了什麼操作,本指令碼主要使用這個技術
2.本次是監聽使用者的建立,新建立的使用者會寫入/etc/passwd檔案中,所以要通過audit審計監控這個檔案
auditctl -w /etc/passwd -p rwxa
auditctl -l ==>就可以看到自己建立的監聽規則
以上命令只是臨時建立,伺服器重啟後就沒了,不適用,所以要寫入配置檔案中
vim /etc/audit/rules.d/audit.rules
-w /etc/passwd -p rwxa
3.建立新使用者,檢視審計資訊
useradd li1
echo 123 | passwd --stdin li1
ausearch -f /etc/passwd | grep useradd | tail -1
==>就可以看到剛剛操作的詳細資訊
timer=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $2}' | awk -F'[(.)]' '{print $2}'` 但是,並不能看到在哪個終端,建立了誰
4.通過上面的結果可以獲取到時間,使用者id,與父程序
獲取到操作的時間,不過是秒數,需要轉換為標準時間
timer=`date -d @$timer +%F-%Hh`
這樣就可以得到年-月-日-時h的時間格式了
uid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $15}' | awk -F'=' '{print $2}'`
這樣可以取出使用者ID,然後在通過/etc/passwd將使用者id轉換為使用者名稱
uname=`awk -F: '$3=='$uid'{print $1}' /etc/passwd`
取出ppid父程序,通過這個父程序可以得到操作者的終端ip地址
ppid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $12}' | awk -F'=' '{print $2}'`
addr=`cat /var/log/audit/audit.log |grep "$ppid"| grep hostname | tail -1 | awk '{print $12}'|awk -F'=' '{print $2}'`
然後可以檢視/etc/passwd得到該操作者建立了誰
WhoIsCreated=`tail -1 /etc/passwd | awk -F: '{print $1}'`
5.建立一個檔案,將剛剛得到的結果追加寫入這個檔案中
vim /root/users.txt
時間 使用者 地點 建立了誰?
echo $timer $uname $addr $WhoIsCreated >> /root/users.txt
6.可以將該結果通過郵件的方式傳送給管理員
echo $timer $uname $addr $WhoIsCreated | mail -S "通知"
7.總結:以上操作可以寫入指令碼配合週期性計劃任務自動執行 vim audit_useradd.sh #!/bin/bash #comment=`ausearch -f /etc/passwd | grep useradd | tail -1` timer=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $2}' | awk -F'[(.)]' '{print $2}'` timer=`date -d @$timer +%F-%Hh` uid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $15}' | awk -F'=' '{print $2}'` uname=`awk -F: '$3=='$uid'{print $1}' /etc/passwd` ppid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $12}' | awk -F'=' '{print $2}'` addr=`cat /var/log/audit/audit.log |grep "$ppid"| grep hostname | tail -1 | awk '{print $12}'|awk -F'=' '{print $2}'` WhoIsCreated=`tail -1 /etc/passwd | awk -F: '{print $1}'`
echo $timer $uname $addr $WhoIsCreated >> /root/a.txt