unix進程系統調用的追蹤

當你執行未知程序時,就表示你所做的這件事對系統可能造成危險。計算機病毒與蠕蟲經常是以此方式散佈。

如果程序時腳本,你便能進入一窺究竟。但如果它是像黑盒子一般的二進制影像文件,你就無從得知它的行行爲了。


這類程序通常會讓用戶覺得不安,我們多半不會以root的身份執行它。這時,有一個能追蹤系統調用的日誌就很有用了,它可以幫助你找出安裝程序究竟做了些什麼。就算你太晚知道而不乏恢復已刪除的或已更改的文件,至少你可以知道哪些文件已受到影響,如果你的文件系統備份或快照還在,便能馬上恢復此災難。


很可能你的系統裏就有一個這樣的程序,試試下面的命令:ktrace、par、strace、trace或truss。


linux:strace

$strace cat /dev/null
execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0
brk(0)                                  = 0xab1000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...

Solaris:truss


BSD和MAC OS X的ktrace命令有點不太一樣,它們是將追蹤結果寫成二進制文件:ktrace.out,之後再執行kdump將其轉換爲文字形式



小應用:

有些程序不正常終止時,可能會在文件系統中留下殘留數據。這些數據本應該刪除,除了浪費空間,還可能在下次執行程序時發生問題。例如daemon、郵件客戶端、編輯器、數據庫等都會產生鎖。如果非正常終止,可能會導致鎖文件沒被刪除,導致第二次啓動失敗。

下面是在Solaris上,如何找出有特定瀏覽器所產生的鎖定文件:

$truss   -f  -o  foo.log    mozilla

$grep   -i  lock   foo.log

29028:    symlink("192.168.253.187:29028",  "/home/jones/.mozilla/jones/c7rboyyz.slt/lock") = 0

.....

29028:    unlink("/home/jones/.mozilla/jones/c7rboyyz.slt/lock") = 0


不過鎖文件不見得總是有lock這個字在其中,所以有時你可能得更仔細審視追蹤日子,找出你要的鎖文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章