一、用戶信息文件 /etc/passwd
linux
# 格式:account:password:UID:GID:GECOS:directory:shell # 用戶名:密碼:用戶ID:組ID:用戶說明:家目錄:登錄以後的 shell root:x:0:0:root:/root:/bin/bash
# 查看可登陸用戶: cat /etc/passwd | grep /bin/bash # 查看UID=0的用戶 awk -F: '$3==0{print $1}' /etc/passwd # 查看sudo權限的用戶 more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
注意:無密碼只容許本機登錄,遠程不容許登錄git
二、影子文件:/etc/shadow
github
# 用戶名:加密密碼:密碼最後一次修改日期:兩次密碼的修改時間間隔:密碼有效期:密碼修改到期到的警告天數:密碼過時以後的寬限天數:帳號失效時間:保留 root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
三、查看當前登陸用戶及登陸時長web
who # 查看當前登陸系統的全部用戶(tty 本地登錄 pts 遠程登陸) w # 顯示已經登陸系統的所用用戶,以及正在執行的指令 uptime # 查看登錄多久、多少用戶,負載狀態
四、排查用戶登陸信息shell
# 顯示logged in表示用戶還在登陸 # pts表示從SSH遠程登陸 # tty表示從控制檯登陸,就是在服務器旁邊登陸 last
# ssh表示從SSH遠程登陸 # tty表示從控制檯登陸 sudo lastb
lastlog
在排查服務器的時候,***沒有在線,可使用last
命令排查***什麼時間登陸的有的***登陸時,會將/var/log/wtmp
文件刪除或者清空,這樣咱們就沒法使用last命令得到有用的信息了。apache
在******以前,必須使用chattr +a
對/var/log/wtmp
文件進行鎖定,避免被***刪除windows
五、sudo用戶列表安全
/etc/sudoers
# 查詢特權用戶特權用戶(uid 爲0): awk -F: '$3==0{print $1}' /etc/passwd # 查詢能夠遠程登陸的賬號信息: awk '/\$1|\$6/{print $1}' /etc/shadow # 除root賬號外,其餘賬號是否存在sudo權限。如非管理須要,普通賬號應刪除sudo權限: more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)" # 禁用或刪除多餘及可疑的賬號 usermod -L user # 禁用賬號,賬號沒法登陸,/etc/shadow 第二欄爲 ! 開頭 userdel user # 刪除 user 用戶 userdel -r user # 將刪除 user 用戶,而且將 /home 目錄下的 user 目錄一併刪除
.bash\_history
文件查看賬號執行過的系統命令:打開 /home 各賬號目錄下的 .bash_history,查看普通賬號執行的歷史命令。bash
爲歷史的命令增長登陸的 IP 地址、執行命令時間等信息:服務器
# 一、保存1萬條命令: sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile # 二、在/etc/profile的文件尾部添加以下行數配置信息: USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` if [ "$USER_IP" = "" ] then USER_IP=`hostname` fi export HISTTIMEFORMAT="%F %T $USER_IP `whoami` " shopt -s histappend export PROMPT_COMMAND="history -a" # 三、讓配置生效 source /etc/profile
注意:歷史操做命令的清除: history -c
該操做並不會清除保存在文件中的記錄,所以須要手動刪除.bash\_profile
文件中的記錄
netstat -antlp | more
使用 ps 命令,分析進程,獲得相應pid號:
ps aux | grep 6666
查看 pid 所對應的進程文件路徑:
# $PID 爲對應的 pid 號 ls -l /proc/$PID/exe 或 file /proc/$PID/exe
分析進程:
# 根據pid號查看進程 lsof -p 6071 # 經過服務名查看該進程打開的文件 lsof -c sshd # 經過端口號查看進程: lsof -i :22
查看進程的啓動時間點:
ps -p 6071 -o lstart
根據pid強行中止進程:
kill -9 6071
注意: 若是找不到任何可疑文件,文件可能被刪除,這個可疑的進程已經保存到內存中,是個內存進程。這時須要查找PID 而後kill掉
系統運行級別示意圖:
運行級別 | 含義 |
---|---|
0 | 關機 |
1 | 單用戶模式,能夠想象爲windows的安全模式,主要用於系統修復 |
2 | 不徹底的命令行模式,不含NFS服務 |
3 | 徹底的命令行模式,就是標準字符界面 |
4 | 系統保留 |
5 | 圖形模式 |
6 | 重啓動 |
查看運行級別命令:
runlevel
開機啓動配置文件:
/etc/rc.local /etc/rc.d/rc[0~6].d
啓動Linux系統時,會運行一些腳原本配置環境——rc腳本。在內核初始化並加載了全部模塊以後,內核將啓動一個守護進程叫作init
或init.d
。這個守護進程開始運行/etc/init.d/rc
中的一些腳本。這些腳本包括一些命令,用於啓動運行Linux系統所需的服務
開機執行腳本的兩種方法:
一、編輯修改/etc/rc.local
二、update-rc.d:此命令用於安裝或移除System-V風格的初始化腳本鏈接。腳本是存放在/etc/init.d/
目錄下的,固然能夠在此目錄建立鏈接文件鏈接到存放在其餘地方的腳本文件。
此命令能夠指定腳本的執行序號,序號的取值範圍是 0-99,序號越大,越遲執行。
當咱們須要開機啓動本身的腳本時,只須要將可執行腳本丟在/etc/init.d
目錄下,而後在/etc/rc.d/rc_.d
文件中創建軟連接便可
語法:
update-rc.d 腳本名或服務 <remove|defaults|disable|enable>
#一、在/etc/init.d目錄下建立連接文件到後門腳本: ln -s /home/b4yi/kali-6666.elf /etc/init.d/backdoor #二、用 update-rc.d 命令將鏈接文件 backdoor 添加到啓動腳本中去 sudo update-rc.d backdoor defaults 99
開機即執行。
more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
須要注意的幾處利用cron的路徑:
crontab -l # 列出當前用戶的計時器設置 crontab -r # 刪除當前用戶的cron任務
上面的命令其實是列出了/var/spool/cron/crontabs/root
該文件的內容:
/etc/crontab
只容許root用戶修改 /var/spool/cron/
存放着每一個用戶的crontab任務,每一個任務以建立者的名字命名 /etc/cron.d/
將文件寫到該目錄下,格式和/etc/crontab
相同 /etc/cron.hourly/
、/etc/cron.daily/
、/etc/cron.weekly/
、/etc/cron.monthly/
目錄中,讓它每小時/天/星期/月執行一次小技巧:
more /etc/cron.daily/* 查看目錄下全部文件
重點關注如下目錄中是否存在惡意腳本;
/var/spool/cron/* /etc/crontab /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/ /etc/anacrontab /var/spool/anacron/*
查詢已安裝的服務:
RPM 包安裝的服務:
chkconfig --list 查看服務自啓動狀態,能夠看到全部的RPM包安裝的服務 ps aux | grep crond 查看當前服務 系統在3與5級別下的啓動項 中文環境 chkconfig --list | grep "3:啓用\|5:啓用" 英文環境 chkconfig --list | grep "3:on\|5:on"
源碼包安裝的服務:
查看服務安裝位置 ,通常是在/user/local/ service httpd start 搜索/etc/rc.d/init.d/ 查看是否存在
按照三種方式查找修改的文件:
- 按照名稱
- 依據文件大小
- 按照時間查找
find / -name a.Test # 若是文件名記不全,可以使用通配符*來補全 # 若是不區分大小寫,能夠將-name 替換爲-iname
find / -size +1000M # +1000M表示大於1000M的文件,-10M表明小於10M的文件
# -atime 文件的訪問時間 # -mtime 文件內容修改時間 # -ctime 文件狀態修改時間(文件權限,全部者/組,文件大小等,固然文件內容發生改變,ctime也會隨着改變) # 要注意:系統進程/腳本訪問文件,atime/mtime/ctime也會跟着修改,不必定是人爲的修改纔會被記錄 # 查找最近一天之內修改的文件: find / -mtime -1 -ls | more # 查找50天前修改的文件: find ./ -mtime +50 -ls
-user 根據屬主查找 -group 根據屬組查找 -nouser 查找沒有屬主的文件 -nogroup 查找沒有屬組的文件 # 查看屬主是root的文件 find ./ -user root -type f # -type f表示查找文件,-type d表示查找目錄 # 注意:系統中沒有屬主或者沒有屬組的文件或目錄,也容易形成安全隱患,建議刪除。
ps -ef --sort -pcpu
ps -ef --sort -pmem
補充:
一、查看敏感目錄,如/tmp目錄下的文件,同時注意隱藏文件夾,以「..」爲名的文件夾具備隱藏屬性。
二、獲得發現WEBSHELL、遠控***的建立時間,如何找出同一時間範圍內建立的文件?
可使用find命令來查找,如find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前訪問過的文件。
三、針對可疑文件可使用 stat 進行建立修改時間。
日誌默認存放位置:/var/log/
必看日誌:secure、history
查看日誌配置狀況:more /etc/rsyslog.conf
日誌文件 | 說明 |
---|---|
/var/log/cron | 記錄了系統定時任務相關的日誌 |
/var/log/cups | 記錄打印信息的日誌 |
/var/log/dmesg | 記錄了系統在開機時內核自檢的信息,也可使用dmesg命令直接查看內核自檢信息 |
/var/log/mailog | 記錄郵件信息 |
/var/log/message | 記錄系統重要信息的日誌。這個日誌文件中會記錄Linux系統的絕大多數重要信息,若是系統出現問題時,首先要檢查的就應該是這個日誌文件 |
/var/log/btmp | 記錄錯誤登陸日誌,這個文件是二進制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 記錄系統中全部用戶最後一次登陸時間的日誌,這個文件是二進制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久記錄全部用戶的登陸、註銷信息,同時記錄系統的啓動、重啓、關機事件。一樣這個文件也是一個二進制文件,不能直接vi,而須要使用last命令來查看 |
/var/log/utmp | 記錄當前已經登陸的用戶信息,這個文件會隨着用戶的登陸和註銷不斷變化,只記錄當前登陸用戶的信息。一樣這個文件不能直接vi,而要使用w,who,users等命令來查詢 |
/var/log/secure | 記錄驗證和受權方面的信息,只要涉及帳號和密碼的程序都會記錄,好比SSH登陸,su切換用戶,sudo受權,甚至添加用戶和修改用戶密碼都會記錄在這個日誌文件中 |
/var/log/wtmp 登陸進入,退出,數據交換、關機和重啓紀錄 /var/log/lastlog 文件記錄用戶最後登陸的信息,可用 lastlog 命令來查看。 /var/log/secure 記錄登入系統存取數據的文件,例如 pop3/ssh/telnet/ftp 等都會被記錄。 /var/log/cron 與定時任務相關的日誌信息 /var/log/message 系統啓動後的信息和錯誤日誌 /var/log/apache2/access.log apache access log
日誌分析技巧:
一、定位有多少IP在爆破主機的root賬號: grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more 定位有哪些IP在爆破: grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c 爆破用戶名字典是什麼? grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr 二、登陸成功的IP有哪些: grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more 登陸成功的日期、用戶名、IP: grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 三、增長一個用戶kali日誌: Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001 Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali , shell=/bin/bash Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali #grep "useradd" /var/log/secure 四、刪除用戶kali日誌: Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali' # grep "userdel" /var/log/secure 五、su切換用戶: Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0) sudo受權執行: sudo -l Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
河馬 WebShell 查殺:http://www.shellpub.com
https://github.com/grayddq/GScan
https://github.com/ppabc/security\_check
https://github.com/T0xst/linux