在一個典型的Linux系統中,至少有兩個目錄或分區保持著暫存檔案。 其中之一是/tmp目錄,再者是/var/tmp。 在更新的Linux內核的系統中,還可能有/dev/shm,它是用tmpfs檔案系統裝載的。
存儲暫存檔案的目錄存在著一個問題,即這些目錄可以成為損害系統安全的僵屍和rootkit的溫床。 這是因為在多數情況下,任何人(或任何過程)都可以向這些目錄寫入東西,還有不安全的許可問題。 我們知道都sticky bit,該位可以理解為防刪除位。 如果希望使用者能夠添加檔但同時不能刪除檔, 則可以對檔使用sticky bit位。 設置該位後,就算使用者對目錄具有寫許可權,也不能刪除該檔。 多數Linux發行版本本在臨時目錄上設置sticky位,這意味著使用者A不能清除屬於使用者B的一個檔,反之亦然。 但是,根據檔自身的許可,使用者A有可能查看並修改那個檔的內容。
一個典型的Linux安裝將/tmp設置為mode 1777,這意味著它設置了sticky位,並且可被所有的使用者讀取、寫入、執行。 多數情況下,這如同其設置的安全一樣,主要是因為/tmp目錄僅僅是一個目錄,而不是一個自己的檔案系統。 /tmp目錄依賴于/分區,這樣一來它也就必須遵循其裝載選項。
一個更加安全的解決方案可能是將/tmp設置在其自己的分區上,這樣一來它就可以獨立于/分區裝載,並且可以擁有更多的限制選項。 /tmp分區的/etc/fstab專案的一個例子看起來是這樣的:
/dev/sda7 /tmp ext3 nosuid,noexec,nodev,rw 0 0
這就設置了nosuid、noexec、nodev選項,意味著不允許任何suid程式,從這個分區不能執行任何內容,並且不存在設備檔。
你可以清除/var/tmp目錄,並創建一個symlink指向/tmp目錄,如此一來,/var/tmp中的暫存檔案就可以利用這些限制性的裝載選項。
/dev/shm虛擬檔案系統也需要保障其安全,這可以通過改變/etc/fstab而實現。 典型情況下,/dev/shm通過defaults選項載入,對保證其安全性是很不夠的。 就像/tmp的fstab一樣,它應當具備限制性更強的載入選項:
none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
在一個典型的Linux系統中,至少有兩個目錄或分區保持著暫存檔案。 其中之一是/tmp目錄,再者是/var/tmp。 在更新的Linux內核的系統中,還可能有/dev/shm,它是用tmpfs檔案系統裝載的。
最後,如果你沒有能力在現有的磁碟機上創建一個最新的/tmp分區,你可以通過創建一個loopback檔案系統來利用Linux內核的 loopback特性,這個檔案系統可被裝載為/tmp,並可以使用相同的限制載入選項。 要創建一個1GB的loopback檔案系統,需要執行:
# dd if=/dev/zero of=/.tmpfs bs=1024 count=1000000
# mke2fs -j /.tmpfs
# cp -av /tmp /tmp.old
# mount -o loop,noexec,nosuid,rw /.tmpfs /tmp
# chmod 1777 /tmp
# mv -f /tmp.old/* /tmp/
# rmdir /tmp.old
一旦完成,需要編輯/etc/fstab,以便於在啟動時自動載入loopback檔案系統:
/.tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
保障恰當的許可和使用限制性加裁選項等方法能夠防止對系統的許多損害。 如果一個僵屍在一個不能執行的檔案系統上安了家,那麼它從本質上講也是不值得擔心的