一起學shell(十一)之安全的shell指令碼:起點
#———————————————————-#
# ====> 紅色字型 -特指煮酒個人所見。加粗則為需要重點注意。 #
# ====> 藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com #
#———————————————————-#
一起學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不同時。
煮酒品茶:到這裡其實大章就已經看完了,很多東西其實還都沒完全懂,所以還需要翻閱多次,從讀指令碼到評論指令碼最後到寫指令碼的過程是要慢慢來的。這章的內容寫的非常深入我心,一個好的指令碼就是要把所有未知和有害的因素考慮進去。故,努力吧。
<完>
相關文章
- 跟我一起寫shell補全指令碼(Bash篇)指令碼
- 跟我一起寫shell補全指令碼(Zsh篇)指令碼
- shell指令碼之迴圈指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- shell指令碼指令碼
- shell指令碼之if elif寫法指令碼
- Shell指令碼之sed詳解指令碼
- 有點用的linux shell 指令碼Linux指令碼
- shell指令碼(6)-shell陣列指令碼陣列
- Shell指令碼學習筆記指令碼筆記
- shell指令碼(二)指令碼
- shell指令碼心得指令碼
- shell指令碼案例指令碼
- 常用shell指令碼指令碼
- 運維之shell指令碼初識運維指令碼
- shell指令碼之批次清空檔案指令碼
- shell指令碼學習筆記-1指令碼筆記
- shell和bash指令碼命令學習指令碼
- shell入門--第一個shell指令碼指令碼
- shell基礎教程二十一: shell指令碼中echo顯示內容帶顏色指令碼
- 什麼是shell指令碼?Linux為什麼學習shell?指令碼Linux
- 《Shell指令碼學習指南》學習筆記指令碼筆記
- 如何加密shell指令碼加密指令碼
- 初識shell指令碼指令碼
- 執行shell指令碼指令碼
- Shell 指令碼語句指令碼
- shell 指令碼加密 | shc指令碼加密
- Linux Shell指令碼Linux指令碼
- shell指令碼例項指令碼
- 【指令碼】shell語法指令碼
- shell指令碼舉例指令碼
- Shell指令碼基礎指令碼
- Linux shell 指令碼Linux指令碼
- Shell 指令碼編寫指令碼
- shell指令碼總結指令碼
- shell 指令碼寫法:指令碼
- 巧用shell指令碼生成快捷指令碼指令碼
- Linux命令和shell指令碼學習Linux指令碼