#----------------------------------------------------------#
# ====> 紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #
# ====> 藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com #
#----------------------------------------------------------#shell
一塊兒學shell(十一)之安全的shell腳本:起點安全
煮酒品茶:安全性shell腳本提示、限制性shell、特洛伊***、爲shell腳本設置setuid:壞主意,ksh93與特權模式。這章基本上是徹底抄吧,由於這是原做的純經驗,也不敢本身去隨便修改。
如下都是重點:
爲bin目錄設置保護
確認$PATH下的每個目錄都只有它的擁有者能夠寫入,其他任何人都不能,一樣的道理也應應用於bin目錄裏的全部程序。
寫程序前,先想清楚
花點時間想一想,你想要作的是什麼,該如何實行。
應對全部輸入參數檢查其有效性
若是你期待的是數字,那麼驗證拿數字。
對全部可返回錯誤的命令,檢查錯誤處理代碼
不在預期內的失敗狀況,極可能是有問題的強迫失敗,致使腳本出現不當的行爲。
不要信任傳進來的環境變量
若是它們被接下來的命令(例如TZ、PATH、IFS)使用時,請檢查並重設爲已知的值。
從已知的地方開始
在腳本開始時,請切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與特權模式
特權模式設計就是爲了對付setuid的shell腳本,這是一個set -o選項,不管什麼時候當shell執行之腳本已設置setuid伴時,shell便會自動輸入它,也就是說,當有效用戶ID與實際用戶ID不一樣時。
煮酒品茶:到這裏其實大章就已經看完了,不少東西其實還都沒徹底懂,因此還須要翻閱屢次,從讀腳本到評論腳本最後到寫腳本的過程是要慢慢來的。這章的內容寫的很是深刻我心,一個好的腳本就是要把全部未知和有害的因素考慮進去。故,努力吧。
<完>