保障Linux的臨時(shí)文件安全
存儲(chǔ)臨時(shí)文件的目錄存在著一個(gè)問(wèn)題,即這些目錄可以成為損害系統(tǒng)安全的僵尸和rootkit的溫床。這是因?yàn)樵诙鄶?shù)情況下,任何人(或任何過(guò)程)都可以向這些目錄寫(xiě)入東西,還有不安全的許可問(wèn)題。我們知道都sticky bit,該位可以理解為防刪除位。如果希望用戶能夠添加文件但同時(shí)不能刪除文件, 則可以對(duì)文件使用sticky bit位。設(shè)置該位后,就算用戶對(duì)目錄具有寫(xiě)權(quán)限,也不能刪除該文件。多數(shù)Linux發(fā)行版本在臨時(shí)目錄上設(shè)置sticky位,這意味著用戶A不能清除屬于用戶B的一個(gè)文件,反之亦然。但是,根據(jù)文件自身的許可,用戶A有可能查看并修改那個(gè)文件的內(nèi)容。
一個(gè)典型的Linux安裝將/tmp設(shè)置為mode 1777,這意味著它設(shè)置了sticky位,并且可被所有的用戶讀取、寫(xiě)入、執(zhí)行。多數(shù)情況下,這如同其設(shè)置的安全一樣,主要是因?yàn)?tmp目錄僅僅是一個(gè)目錄,而不是一個(gè)自己的文件系統(tǒng)。/tmp目錄依賴(lài)于/分區(qū),這樣一來(lái)它也就必須遵循其裝載選項(xiàng)。
一個(gè)更加安全的解決方案可能是將/tmp設(shè)置在其自己的分區(qū)上,這樣一來(lái)它就可以獨(dú)立于/分區(qū)裝載,并且可以擁有更多的限制選項(xiàng)。/tmp分區(qū)的/etc/fstab項(xiàng)目的一個(gè)例子看起來(lái)是這樣的:
/dev/sda7 /tmp ext3 nosuid,noexec,nodev,rw 0 0
這就設(shè)置了nosuid、noexec、nodev選項(xiàng),意味著不允許任何suid程序,從這個(gè)分區(qū)不能執(zhí)行任何內(nèi)容,并且不存在設(shè)備文件。
你可以清除/var/tmp目錄,并創(chuàng)建一個(gè)symlink指向/tmp目錄,如此一來(lái),/var/tmp中的臨時(shí)文件就可以利用這些限制性的裝載選項(xiàng)。
/dev/shm虛擬文件系統(tǒng)也需要保障其安全,這可以通過(guò)改變/etc/fstab而實(shí)現(xiàn)。典型情況下,/dev/shm通過(guò)defaults選項(xiàng)加載,對(duì)保證其安全性是很不夠的。就像/tmp的fstab一樣,它應(yīng)當(dāng)具備限制性更強(qiáng)的加載選項(xiàng):
none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
最后,如果你沒(méi)有能力在現(xiàn)有的驅(qū)動(dòng)器上創(chuàng)建一個(gè)最新的/tmp分區(qū),你可以通過(guò)創(chuàng)建一個(gè)loopback文件系統(tǒng)來(lái)利用Linux內(nèi)核的 loopback特性,這個(gè)文件系統(tǒng)可被裝載為/tmp,并可以使用相同的限制加載選項(xiàng)。要?jiǎng)?chuàng)建一個(gè)1GB的loopback文件系統(tǒng),需要執(zhí)行:
# 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,以便于在啟動(dòng)時(shí)自動(dòng)加載loopback文件系統(tǒng):
/.tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
保障恰當(dāng)?shù)脑S可和使用限制性加裁選項(xiàng)等方法能夠防止對(duì)系統(tǒng)的許多損害。如果一個(gè)僵尸在一個(gè)不能執(zhí)行的文件系統(tǒng)上安了家,那么它從本質(zhì)上講也是不值得擔(dān)心的。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論