Unix操作系統(tǒng)shell的使用進(jìn)行限制
我們來(lái)講一下Unix操作系統(tǒng)的知識(shí)。Unix操作系統(tǒng)是一個(gè)比較完善的多用戶(hù)操作系統(tǒng)。多個(gè)用戶(hù)可以在同一個(gè)Unix操作系統(tǒng)上進(jìn)行各自的操作,而不會(huì)發(fā)生相互的干擾。不過(guò)為了提高Unix操作系統(tǒng)多用戶(hù)操作的安全性,Unix工程師仍然要采取一些必要的措施。今天,我們來(lái)對(duì)shell的使用進(jìn)行限制。
對(duì)shell的使用進(jìn)行限制
Shell是用戶(hù)跟Unix操作系統(tǒng)內(nèi)核進(jìn)行溝通的一個(gè)工具。默認(rèn)情況下,不同的用戶(hù)其采用的shell功能是相同的。但是當(dāng)Unix操作系統(tǒng)有多個(gè)用戶(hù)在使用的話(huà),就需要對(duì)某些用戶(hù)的shell 功能進(jìn)行限制。如需要限制用戶(hù)使用cd命令,即不允許用戶(hù)隨意更改當(dāng)前目錄。用戶(hù)所創(chuàng)建的所有文件與目錄都必須在其自己的主目錄下面,即home/用戶(hù)名目錄下。
在Unix操作系統(tǒng)下可以實(shí)現(xiàn)類(lèi)似的控制。當(dāng)為某個(gè)用戶(hù)采用了限制版本的shell之后,則這個(gè)用戶(hù)只能夠執(zhí)行位于某些特定目錄下面的程序。通常情況下這個(gè)目錄是由一個(gè)完全不同的Path變量所決定的,而且他的值用戶(hù)不能夠改變,一般情況下就把這個(gè)目錄設(shè)置為當(dāng)前目錄。
為了限制某個(gè)用戶(hù)的活動(dòng)或者可以采用的命令,系統(tǒng)工程師需要?jiǎng)?chuàng)建一個(gè)用戶(hù)帳號(hào),并只允許他使用某個(gè)特殊的受到一定限制的shell。通常情況下,現(xiàn)在的shell 版本都基本上能夠支持這個(gè)功能。一般來(lái)說(shuō),如果系統(tǒng)工程師指定用戶(hù)使用受限制的shell,那么這個(gè)用戶(hù)就可能受到如下的限制。
一是這個(gè)用戶(hù)不能夠使用CD命令進(jìn)行目錄的切換。也就是說(shuō),此時(shí)用戶(hù)只能夠在Unix操作系統(tǒng)設(shè)置的當(dāng)前目錄中進(jìn)行操作。這對(duì)于普通用戶(hù)來(lái)說(shuō),是一個(gè)非常有用的限制措施。由于他們不能夠在目錄之間進(jìn)行切換操作,那么也就不會(huì)對(duì)其他用戶(hù)的資料造成無(wú)意或者有意的損壞,有利于其他用戶(hù)資料的安全性。
二是對(duì)命令的使用有所限制。當(dāng)對(duì)用戶(hù)采用了限制版本的shell之后,這個(gè)用戶(hù)就不能夠使用含有“/”的路徑。也就是說(shuō)這個(gè)用戶(hù)不能夠用相對(duì)路徑或者絕對(duì)路徑執(zhí)行一個(gè)命令。另外,也不能夠更改Path變量。
Path變量為shell 提供了定位可執(zhí)行文件的搜索路徑。當(dāng)用戶(hù)向系統(tǒng)發(fā)出一個(gè)指令時(shí),shell就會(huì)按這個(gè)Path變量所設(shè)置的搜索路徑的順序查找這個(gè)命令文件,如果找到了這個(gè)命令文件就執(zhí)行這個(gè)文件;找不到的話(huà)就提示錯(cuò)誤信息。這也就是說(shuō)這個(gè)用戶(hù)不能夠訪問(wèn)保存在其他目錄里的命令。為此設(shè)置讓用戶(hù)采用限制版本的shell,可以限制用戶(hù)的某些行為。
如Unix操作系統(tǒng)工程師可以把這個(gè)用戶(hù)可以用的命令預(yù)先在Path變量中設(shè)置;然后把不允許的命令路徑從path變量中刪除。如此的話(huà)就可以限制用戶(hù)“可以做什么;不可以做什么”。對(duì)用戶(hù)可以使用的命令進(jìn)行限制,可以保障其他用戶(hù)的安全。
三是不能夠使用一些特定的操作符號(hào)。如在Unix操作系統(tǒng)中,可以利用ls –i > ls_list命令。這個(gè)命令的意思就是查詢(xún)當(dāng)前目錄下的所有文件與目錄相關(guān)信息,并把查詢(xún)結(jié)果寫(xiě)入到一個(gè)文件中。但是如果未某個(gè)用戶(hù)指定了受限版本的shell之后,則這個(gè)用戶(hù)就不能夠使用包括>在內(nèi)的一些特殊操作符。如不能夠使用>或者>>操作符號(hào)創(chuàng)建文件或者把某些內(nèi)容追加到現(xiàn)有文件中去。
從以上的分析中可以看出,采用受限版本的用戶(hù)只能夠執(zhí)行特定目錄下的命令。如果系統(tǒng)工程師需要讓某個(gè)受限用戶(hù)來(lái)執(zhí)行其他目錄下的命令,也是可以的。此時(shí)就需要用到筆者以前文章中談到過(guò)的硬連接的功能。
如現(xiàn)在Unix操作系統(tǒng)工程師允許使用/bin/ifconfig這個(gè)命令。由于這個(gè)目錄通常不再用戶(hù)的當(dāng)前目錄下,而且用戶(hù)又能夠使用帶/符號(hào)的路徑名稱(chēng),那該如何處理呢?其實(shí)很簡(jiǎn)單,系統(tǒng)工程師指需要利用in名稱(chēng)在用戶(hù)的當(dāng)前目錄下創(chuàng)建這個(gè)命令的連接即可。此時(shí)系統(tǒng)就會(huì)根據(jù)這個(gè)連接去打開(kāi)其原命令文件。
若系統(tǒng)工程師現(xiàn)在所采用的shell版本不支持受限shell該如何處理呢?其實(shí)這也很好解決。如果用戶(hù)現(xiàn)在所使用的系統(tǒng)中沒(méi)有一個(gè)受限的shell,此時(shí)系統(tǒng)工程師可以結(jié)合標(biāo)準(zhǔn)的shell環(huán)境與-r可選項(xiàng)一起使用,來(lái)達(dá)到類(lèi)似的目的。如筆者可以利用sh –r等類(lèi)似的命令讓shell強(qiáng)制以受限的模式運(yùn)行。
不過(guò)這里需要注意的是,通常情況下Unix操作系統(tǒng)工程師不能夠把這些命令加入到/etc/passwd文件中。故系統(tǒng)工程必須先運(yùn)行普通的shell環(huán)境,然后再在啟動(dòng)文件中利用exec命令來(lái)啟動(dòng)這些命令,并且必須把Path變量設(shè)置為一個(gè)目錄。
可見(jiàn)此時(shí)設(shè)置起來(lái)比較麻煩。為此筆者的意見(jiàn)是,如果Unix操作系統(tǒng)工程師真的要讓用戶(hù)采用受限的shell,那筆者還是建議采用本身就有類(lèi)似的功能的shell版本為好。如果用戶(hù)當(dāng)前使用的shell版本沒(méi)有一個(gè)受限的shell,那么筆者建議把這個(gè)shell進(jìn)行升級(jí)。因?yàn)槿绻凑杖缟系呐渲门cshell版本升級(jí)的工作量來(lái)說(shuō),沒(méi)有多大的差別。
故如果條件允許的情況下,還是直接給用戶(hù)采用支持受限shell的軟件為好,以減少后續(xù)維護(hù)與部署的工作量。我們對(duì)Unix操作系統(tǒng)的知識(shí)就了解到這里吧。
【編輯推薦】