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