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