在一(yī)個典型的
Linux系統中(zhōng),至少有兩個目錄或分(fēn)區保持着臨時文件。其中(zhōng)之一(yī)是/tmp目錄,再者是/var/tmp。在更新的
Linux内核的系統中(zhōng),還可能有/dev/shm,它是用tmpfs文件系統裝載的。
存儲臨時文件的目錄存在着一(yī)個問題,即這些目錄可以成爲損害系統安全的僵屍和rootkit的溫床。這是因爲在多數情況下(xià),任何人(或任何過程)都可以向這些目錄寫入東西,還有不安全的許可問題。我(wǒ)們知(zhī)道都sticky bit,該位可以理解爲防删除位。如果希望用戶能夠添加文件但同時不能删除文件, 則可以對文件使用sticky bit位。設置該位後,就算用戶對目錄具有寫權限,也不能删除該文件。多數
Linux發行版本在臨時目錄上設置sticky位,這意味着用戶A不能清除屬于用戶B的一(yī)個文件,反之亦然。但是,根據文件自身的許可,用戶A有可能查看并修改那個文件的内容。
一(yī)個典型的
Linux安裝将/tmp設置爲mode 1777,這意味着它設置了sticky位,并且可被所有的用戶讀取、寫入、執行。多數情況下(xià),這如同其設置的安全一(yī)樣,主要是因爲/tmp目錄僅僅是一(yī)個目錄,而不是一(yī)個自己的文件系統。/tmp目錄依賴于/分(fēn)區,這樣一(yī)來它也就必須遵循其裝載選項。
一(yī)個更加安全的解決方案可能是将/tmp設置在其自己的分(fēn)區上,這樣一(yī)來它就可以獨立于/分(fēn)區裝載,并且可以擁有更多的限制選項。/tmp分(fēn)區的/etc/fstab項目的一(yī)個例子看起來是這樣的:
/dev/sda7 /tmp ext3 nosuid,noexec,nodev,rw 0 0
這就設置了nosuid、noexec、nodev選項,意味着不允許任何suid程序,從這個分(fēn)區不能執行任何内容,并且不存在設備文件。
你可以清除/var/tmp目錄,并創建一(yī)個symlink指向/tmp目錄,如此一(yī)來,/var/tmp中(zhōng)的臨時文件就可以利用這些限制性的裝載選項。
/dev/shm虛拟文件系統也需要保障其安全,這可以通過改變/etc/fstab而實現。典型情況下(xià),/dev/shm通過defaults選項加載,對保證其安全性是很不夠的。就像/tmp的fstab一(yī)樣,它應當具備限制性更強的加載選項:
none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
在一(yī)個典型的
Linux系統中(zhōng),至少有兩個目錄或分(fēn)區保持着臨時文件。其中(zhōng)之一(yī)是/tmp目錄,再者是/var/tmp。在更新的
Linux内核的系統中(zhōng),還可能有/dev/shm,它是用tmpfs文件系統裝載的。
最後,如果你沒有能力在現有的驅動器上創建一(yī)個最新的/tmp分(fēn)區,你可以通過創建一(yī)個loopback文件系統來利用
Linux内核的 loopback特性,這個文件系統可被裝載爲/tmp,并可以使用相同的限制加載選項。要創建一(yī)個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
一(yī)旦完成,需要編輯/etc/fstab,以便于在啓動時自動加載loopback文件系統:
/.tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
保障恰當的許可和使用限制性加裁選項等方法能夠防止對系統的許多損害。如果一(yī)個僵屍在一(yī)個不能執行的文件系統上安了家,那麽它從本質上講也是不值得擔心的。