作者 主題: 如何得知是哪一個pid刪除文件?  (閱讀 3429 次)

0 會員 與 1 訪客 正在閱讀本文。

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
如何得知是哪一個pid刪除文件?
« 於: 2013-12-23 11:30 »
各位大大好:
想請教一下,因我目前有一個資料夾,裡面都是一些圖片檔,常常被砍掉裡面的所有圖片,但目前不確定是被誰(daemon),那目前小弟的做法是直接在那資料夾做一個假的檔案,叫test.jpg,並且透過inotifywatch去監控那隻test.jpg,我目前所能獲得的資訊只有幾點幾分被砍,但不知道該如何追蹤是被誰砍掉?煩請有經驗的大大指導!
不強就要挨打

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #1 於: 2013-12-23 14:13 »
auditctl 試過嗎?

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #2 於: 2013-12-23 15:12 »
回darkranger大大:

這個我沒用過,不過我先試試!感謝您的指教! :)
不強就要挨打

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #3 於: 2013-12-24 15:05 »
小弟愚味,想在請問一下

代碼: [選擇]
auditctl -w /home/test.txt  -p rw -k test
auditctl -l
LIST_RULES: exit,always watch=/home/test.txt perm=rw key=test
auditctl -a always,exit -F arch=b64 -S unlink
auditctl -l
LIST_RULES: exit,always watch=/home/test.txt perm=rw key=test
LIST_RULES: exit,always arch=3221225534 (0xc000003e) syscall=unlink


像我這樣的寫法是指會針對/home/test.txt 只做監控刪除的監控?煩請大大指教


而且我發現當這個工具啟用時,只有要user登入,好像也會做紀錄,不能單單只紀錄/home/test.txt相關活動的紀錄?
« 上次編輯: 2013-12-24 15:21 由 zarr12steven »
不強就要挨打

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #4 於: 2013-12-24 15:22 »
剛剛測試了一下,確定是可以抓到是誰砍掉的

代碼: [選擇]
type=PATH msg=audit(12/24/2013 14:25:22.680:60) : item=1 name=/home/test.txt inode=522246 dev=fc:00 mode=file,777 ouid=root ogid=root rdev=00:00
type=PATH msg=audit(12/24/2013 14:25:22.680:60) : item=0 name=/home/ inode=522242 dev=fc:00 mode=dir,755 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(12/24/2013 14:25:22.680:60) :  cwd=/home/daniel
type=SYSCALL msg=audit(12/24/2013 14:25:22.680:60) : arch=x86_64 syscall=unlinkat success=yes exit=0 a0=ffffffffffffff9c a1=11a10c0 a2=0 a3=7fffdba9ed00 items=2 ppid=1346 pid=2426 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root ses=4 tty=pts0 comm=rm exe=/bin/rm key=test
不強就要挨打

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #5 於: 2013-12-24 18:32 »
回應一下自已剛剛問的問題,後來測試一下,發現原來其實下這樣也行
代碼: [選擇]
auditctl -a exit,always -F arch=b64 -S unlink -F path=/home/test.txt  -F perm=rw -k test-a 附加規則
-F 是建立檔案要監控的規則
-S 要監視的系統呼叫的名稱
-k 指定 keyword,方便ausearch時使用

但出現的LOG卻不會出現是誰砍了test.txt,只會出現updated rules如下:
代碼: [選擇]
type=CONFIG_CHANGE msg=audit(12/24/2013 16:34:57.024:110) : auid=root ses=4 op="updated rules" path=/home/test.txt key=test list=exit res=1
當我去監控mount point的檔案時,我打的指令是下面這行
代碼: [選擇]
auditctl -a exit,always -F arch=b64 -S unlink -F path=/mnt/test/test.txt  -F perm=rw -k test
出現的LOG也不會出現是誰砍了test.txt,只會出現updated rules如下:
代碼: [選擇]
type=CONFIG_CHANGE msg=audit(12/24/2013 16:34:57.024:110) : auid=root ses=4 op="updated rules" path=/home/test/test.txt  key=test list=exit res=1

但後來我又去查了man page,我就把-F 改成 -q,卻會出現錯誤,指令如下:
代碼: [選擇]
auditctl -a exit,always -F arch=b64 -S unlink -q /mnt/photo,/mnt/test/test.txt  -F perm=rw -k test
Syscall auditing requested for make equivalent

於是乎我索性就把-S unlink給拿掉了,然後再把檔案給砍掉
代碼: [選擇]
type=CONFIG_CHANGE msg=audit(12/24/2013 16:44:55.532:111) : auid=root ses=4 op="remove rule" key=test list=exit res=1
下面這個是去監控local端的指令&log
代碼: [選擇]
# auditctl -w /home/test.txt -p rw -k test
# auditctl -a exit,always -S unlink

log:
type=PATH msg=audit(12/24/2013 17:09:26.248:138) : item=1 name=/home/test.txt inode=528492 dev=fc:00 mode=file,644 ouid=root ogid=root rdev=00:00
type=PATH msg=audit(12/24/2013 17:09:26.248:138) : item=0 name=/home/ inode=522242 dev=fc:00 mode=dir,755 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(12/24/2013 17:09:26.248:138) :  cwd=/var/log/audit
type=SYSCALL msg=audit(12/24/2013 17:09:26.248:138) : arch=x86_64 syscall=unlinkat success=yes exit=0 a0=ffffffffffffff9c a1=155f0c0 a2=0 a3=7fff91809c40 items=2 ppid=1346 pid=3980 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root ses=4 tty=pts0 comm=rm exe=/bin/rm key=test


所以小弟想問,那是否我監控mount point目錄時用下面這種二種指令的差異性是?? ???
代碼: [選擇]
# auditctl -w /home/test.txt -p rw -k test
# auditctl -a exit,always -S unlink

代碼: [選擇]
auditctl -a exit,always -F arch=b64 -S unlink -F path=/mnt/test/test.txt  -F perm=rw -k test


參考資料:
http://lccnetvip.pixnet.net/blog/post/36136146-聯成電腦講師專欄:使用-linux-系統下的存取
http://manpages.ubuntu.com/manpages/maverick/man8/auditctl.8.html
不強就要挨打

HaWay

  • 大隻佬!
  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 3977
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #6 於: 2013-12-25 13:10 »
看起來應該是一樣的, 我沒有實際測過, 不清楚

-w path
              [略] If you place a watch on a file, its the same as using the -F
              path option on a syscall rule. If you place a watch on a directory,
              its the same as using the -F dir option on a syscall rule.  [略]
我做人那麼 nice, 肯定有什麼誤會.....

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #7 於: 2013-12-25 13:43 »
回haway大大
用-w 的參數我也試過,是可以正常使用的。但由於我放到線上的伺服器去做時,就會報錯,好像是因為本身mount 過來的資料(從netappp上mount過來的),不給監控,當我一下auditctl -w /mnt/test/test.txt -p rw -k test,就會被killed,妙的是我要kill auditctl的父程序時,還砍不掉,最後會導致zombie。

後來也有改用-q,結果還是一樣會報錯誤,我猜想應該是netapp那台機器本身有限制了,所以導致無法監控其檔案,目前正在查找其他方式來實現! :'(
« 上次編輯: 2013-12-25 13:44 由 zarr12steven »
不強就要挨打

HaWay

  • 大隻佬!
  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 3977
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #8 於: 2013-12-25 13:46 »
換個方式如果是去監看 pid 呢?
我做人那麼 nice, 肯定有什麼誤會.....

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #9 於: 2013-12-25 13:50 »

所以小弟想問,那是否我監控mount point目錄時用下面這種二種指令的差異性是?? ???
代碼: [選擇]
# auditctl -w /home/test.txt -p rw -k test
# auditctl -a exit,always -S unlink

代碼: [選擇]
auditctl -a exit,always -F arch=b64 -S unlink -F path=/mnt/test/test.txt  -F perm=rw -k test
後來我自已測試了一下,指令都是可以使用的,只是跳出來的log結果會不同,看起來要以第一個方法去下指令比較正確,使用-a 這個參數,會去附加到前一條的規則。(若有錯誤,煩請指教)
不強就要挨打

zarr12steven

  • SA 苦力組
  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #10 於: 2013-12-25 14:09 »
換個方式如果是去監看 pid 呢?


回haway大大:

這個本來也有想過

Q1:假設我懷疑是php程式所刪除的,那我去監控php的父程序,那是不是也可以監控得到底下所有子程序的行為?? ???

root      5658  0.0  0.0 254012  7912 ?        Ss   Nov25  14:58 php-fpm: master process (/etc/php-fpm.conf)     
nobody   21602  2.6  0.1 260164 29256 ?        S    14:00   0:04 php-fpm: /path/xxx (/aaa/xxx.php)                                                     
                                 
nobody   21645  3.8  0.1 262072 31732 ?        S    14:00   0:06 php-fpm: /path/xxx (/aaa/xxx.php)

Q2: 那如果不是php的程式所刪,那我要如何得知我應該要去監控哪一個pid才是正確的? ???

小弟愚味,請指教!@@"

不強就要挨打

HaWay

  • 大隻佬!
  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 3977
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #11 於: 2013-12-30 17:13 »
這東西真好玩

我也是看到回復開始玩這東西

但我現在搞不懂的是為什麼我設定的想得跟跑出來不一樣..... T_T
我做人那麼 nice, 肯定有什麼誤會.....

xiang

  • 鑽研的研究生
  • *****
  • 文章數: 711
  • 性別: 男
    • 檢視個人資料
Re: 如何得知是哪一個pid刪除文件?
« 回覆 #12 於: 2013-12-31 11:48 »
講一場講一場~~~~