一塊兒學shell(十一)之安全的shell腳本:起點

#----------------------------------------------------------# 
# ====> 紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #
# ====> 藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com          #
#----------------------------------------------------------#shell

 一塊兒學shell(十一)之安全的shell腳本:起點安全

煮酒品茶:安全性shell腳本提示、限制性shell、特洛伊***、爲shell腳本設置setuid:壞主意,ksh93與特權模式。這章基本上是徹底抄吧,由於這是原做的純經驗,也不敢本身去隨便修改。 ide

如下都是重點: 字體

bin目錄設置保護 ui

確認$PATH下的每個目錄都只有它的擁有者能夠寫入,其他任何人都不能,一樣的道理也應應用於bin目錄裏的全部程序。 spa

寫程序前,先想清楚 設計

花點時間想一想,你想要作的是什麼,該如何實行。 blog

應對全部輸入參數檢查其有效性 get

若是你期待的是數字,那麼驗證拿數字。 it

對全部可返回錯誤的命令,檢查錯誤處理代碼

不在預期內的失敗狀況,極可能是有問題的強迫失敗,致使腳本出現不當的行爲。

不要信任傳進來的環境變量

若是它們被接下來的命令(例如TZPATHIFS)使用時,請檢查並重設爲已知的值。

從已知的地方開始

在腳本開始時,請切cd到已知目錄,這麼一來,接下來的任何相對路徑名稱才能指到已知位置。請確認cd操做成功

[root@localhost new]# cd ~ ||exit 1

在命令上使用完整路徑

這麼作使你才能知道本身使用的是哪一個版本,無須理會$PATH設置

使用syslog保留審計跟蹤

當使用該輸入時,必定將用戶輸入引用起來

如:"$1""$*",這麼作能夠防止居心不良的用戶輸入做超出範圍的計算與執行

勿在用戶輸入上使用eval

甚至在引用用戶輸入以後,也不要使用eval將它交給shell再處理,若是用戶讀了你的腳本,發現你在使用eval,就能輕鬆地利用這個腳本進行任何破壞。

利用通配字符展開的結果

你能夠將空格、分號、反斜槓等放在文件名裏,讓棘手的事情交給系統管理員處理,

檢查用戶輸入是否有meta字符

若是使用eval$(....)裏的輸入,請檢查是否有像$'這類的meta字符

檢測你的代碼,並當心閱讀它

尋找是否有可被利用的漏洞與錯誤,把全部壞心眼的想法都考慮進去,當心研究你的代碼,試着找出破壞它的方式,再修正你發現的全部問題。

留意竟爭條件

***者是否是能夠在你的腳本里的任兩個命令之間執行任意命令,這對安全性是否有危害,若是是,換個方式處理你的腳本。

對符號性鏈接心存懷疑

chmod文件或是編輯文件時,檢查它是否真的是一個文件,而非鏈接到某個關鍵性系統文件的符號鏈接(利用[ -L file] [-h file])檢測file是否爲符號性鏈接。

找其餘人從新檢查你的程序,看看是否有問題。

一般另外一雙眼睛才能找出原做者在程序設計上陷入的盲點。

儘量用setgid而不要用setuid

使用新的用戶而不是root

若是你必須使用setuid訪問一組文件,請考慮創建一個新的用戶,非root的用戶作這件事並設置setuid給它。

儘量限制使用setuid的代碼

限制性shell

是將用戶置於嚴格限制文件寫入移動的環境中,用戶多半是使用訪客賬號

變動工做目錄:cd是沒有做用的。若是嘗試使用它,會收到錯誤信息

不容許重定向輸入到文件:重定向運算符>,>|,<>,>>都不被容許,這點不包含exec的使用。

指定新值給環境變量ENV,FPATH,PATH.SHELl或試圖以typeset改變它們的屬性。

標題任何帶有斜槓(、)的命令路徑名稱,shell權執行在$PATH裏找到的命令。

使用builtin命令,增長新的內置命令。

 

特洛伊***

shell腳本設置setuid壞主意

爲用戶設置一個用戶ID這是一個特殊限位。

Ksh93與特權模式

特權模式設計就是爲了對付setuidshell腳本,這是一個set -o選項,不管什麼時候當shell執行之腳本已設置setuid伴時,shell便會自動輸入它,也就是說,當有效用戶ID與實際用戶ID不一樣時。

煮酒品茶:到這裏其實大章就已經看完了,不少東西其實還都沒徹底懂,因此還須要翻閱屢次,從讀腳本到評論腳本最後到寫腳本的過程是要慢慢來的。這章的內容寫的很是深刻我心,一個好的腳本就是要把全部未知和有害的因素考慮進去。故,努力吧。

<>

相關文章
相關標籤/搜索