閑聊下為什么Linux系統(tǒng)下病毒這么少?
概述
很多人認為 Linux 病毒少是因為Linux不像Windows那么普及,其實這種觀點很早已經(jīng)被人批駁過了,一個最有力的論據(jù)是:如果寫病毒的人寫 Windows 病毒是因為 Windows 用戶多而因此破壞性大,那么 Internet 上大多數(shù)服務(wù)器都是基于 Unix/Linux 的,攻擊這些服務(wù)器,破壞性豈不是更大么?
Linux賬號限制
對一個二進制的 Linux 病毒,要感染可執(zhí)行文件,這些可執(zhí)行文件對啟動這個病毒的用戶一定要是可寫的。而實際情況通常并不是這樣的。實際情況通常是,程序被 root 擁有,用戶通過無特權(quán)的帳號運行。而且,越是沒有經(jīng)驗的用戶,他擁有可執(zhí)行文件的可能性就越小。因此,越是不了解這種危險的用戶的主目錄越不適合病毒繁殖。
即使這個病毒成功地感染了這個用戶擁有的一個程序,由于這個用戶權(quán)限受限,它進一步傳播的任務(wù)也會非常困難(當(dāng)然,對于運行單用戶系統(tǒng)的 Linux 新手,這個論證可能不適用。這樣的用戶可能會對 root 帳戶比較粗心)。
Linux網(wǎng)絡(luò)限制
Linux 網(wǎng)絡(luò)程序構(gòu)建地很保守,沒有使現(xiàn)在 Windows 病毒如此快速傳播變的可能的高級宏工具。這并不是 Linux 的固有特征;它僅僅是兩種用戶基礎(chǔ)的不同和這種不同導(dǎo)致的在這兩種市場中的成功產(chǎn)品的不同的反映。
Linux內(nèi)核和用戶空間
linux的內(nèi)核和用戶空間分得很清晰,用戶甚至可以在啟動時定義自己的init=XXX參數(shù)使得用戶空間的第一個進程是自己定義的,這種內(nèi)核空間和內(nèi)核空間的不耦合是十分重要的,內(nèi)核在init內(nèi)核線程中通過execve一個用戶進程讓用戶接手系統(tǒng),這個進程是可以自己定義的,不過一般是/sbin/init進程,這樣的結(jié)果就是即使用戶空間全部被注入了,那么你第一,可以刪除這些骯臟的文件;第二,可以設(shè)置一個你自己定義的干凈的init進程,需要做的就是重新啟動一下系統(tǒng),一切就搞定了,linux中強大shell命令使得你可以很簡單的備份一份干凈的無病毒的根文件系統(tǒng),因此在linux下殺毒將是一件很簡單的事情。用戶可以自主控制用戶空間的第一個進程是這里的要點,在windows下這是很難的,你想替換smss程序,試試看,系統(tǒng)會提示你“請確定磁盤未滿或未被寫保護而且文件未被使用”,并且system32下的dllcache也是一個讓你又愛又恨的目錄,不信的話,請手動刪除一下IE試試看。
開源的Linux
Linux的應(yīng)用軟件和系統(tǒng)軟件幾乎都是開源的。這對病毒有兩方面的影響。首先,病毒很難藏身于開源的代碼中間。其次,對僅有二進制的病毒,一次新的編譯安裝就截斷了病毒一個主要的傳播途徑。雖然 Linux 發(fā)行商也提供大量的二進制軟件包,但是用戶大都是從發(fā)行商提供的可靠的軟件倉庫中下載這些軟件包,大都具有 md5 驗證機制,安全性極高。
一個計算機病毒,像生物病毒一樣,要想傳播開來,其繁殖速度必須超過其死亡(被消滅)的速度。上面提到的障礙有效地降低了 Linux 病毒的繁殖速度。我們沒有看到一個真正的 Linux 病毒瘋狂傳播,原因就在于存在的 Linux 病毒中沒有一個能夠在 Linux 提供的敵對的環(huán)境中茁壯成長。