案發時間: 2017
現場(環境):CentOS 7
被害人(套件名稱): Linux 系統、Apache
鑑識工具: du 、lsof
筆錄(錯誤原因):
某天因為伺服器中的LOG存放空間不足,所以打算將全部的 LOG 都抓出來再來研究一下。
但在將LOG全數移出後,仍然發現空間並沒有因為我們LOG移出後就釋放出來。
詳細狀況(錯誤訊息):
硬體內目前使用狀況,opt已經使用了39G
[root@www ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 50G 39G 11G 79% /opt
但是透過du這個指令去查詢整體使用狀況發現大小不符合
[root@www ~]# du -shc /opt
1.1G /opt
1.1G total
那我們中間的38G跑到哪裡去了???
#發現資料量大小完全不對。
#因為/opt下有另外開立存放log的位置(EX: apache_log等)
#猜測是因為移除log時沒有重啟服務,造成雖然log資訊已經移除,但卻因程序的問題卡在系統當中。
#接下來要使用lsof 來協助我們查證使用狀況。
#CentOS7中預設未含有lsof指令;如需安裝可使用下列兩個指令。
#查詢哪個套件包中包含lsof指令。
這個指令可以學起來,當你要在套件包中找你要的指令時,是很實用的(provides)
安裝lsof 套件
[root@www ~]# yum provides lsof
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.cs.nctu.edu.tw
* epel: mirror01.idc.hinet.net
* extras: centos.cs.nctu.edu.tw
* updates: centos.cs.nctu.edu.tw
lsof-4.87-4.el7.x86_64 : A utility which lists open files on a Linux/UNIX system
Repo : base
lsof-4.87-4.el7.x86_64 : A utility which lists open files on a Linux/UNIX system
Repo : @base
#安裝自己所需版本。
[root@www ~]# yum install lsof-4.87-4.el7.x86_64
#檢查被刪除掉的檔案是否仍有因為程序的問題卡在空間內。
[root@www ~]# lsof | grep deleted
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 1363 root 2w REG 8,17 37279654328 1572874 /opt/log/httpd/error_log (deleted)
httpd 1363 root 9w REG 8,17 1001326331 1572871 /opt/log/httpd/access_log (deleted)
.....
#發現有大量Apache_log 雖然移出了,但因為程序而將原先已移出的log站存於硬碟之中。
#此時將Apache服務重新啟用 ; 釋放掉那些因程序而卡在暫存內的資源。
[root@www ~]# systemctl restart httpd
#再次檢查使用狀況。
[root@www ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 50G 1.1G 46G 3% /opt
#可以看到使用空間大幅下降。
#證明因為程序未停止,所以即便你已經先刪除了占用空間的程序日誌,日誌所占存的空間仍然存在。
解決方法:
- 將日誌檔定期備份至log Server或者其他備份伺服器。
- 注意服務的運作狀況,看是否有特殊的日誌檔增長狀況發生。(EX : Apache、tomcat...等等)
- df -Th 、 du -shc 、lsof | grep deleted 等方式查證是否有確實降低空間的佔用。
最重要的一點,當你要對運作中的服務做任何異動,都建議先將其服務停止再動作。
否則很容易跟這個事件發現一樣空間消失的狀況。
(案件結案)