Shell腳本給管理和使用系統都帶來了巨大的便利,而後在多用戶系統中,也帶來了許多安全性問題。在腳本中可能存在的安全性問題以下:shell
(1)在腳本中使用cd命令,切換到不安全的目錄執行腳本。安全
(2)在腳本中修改了環境變量的值,從而致使系統產生了變化。bash
(3)在某個目錄中建立了非法的文件。例如使用重定向在目錄/etc中建立了文件nologin,這將致使其餘用戶沒法登錄。this
在Shell腳本中,提供了一種受限模式。腳本在受限模式中運行時,能夠極大地保護系統的安全性。當腳本中出現cd命令、重定向、修改環境變量等不安全的行爲時,Bash將會拒絕執行。spa
一、調用Shell時啓動受限模式rest
要啓動Bash的受限模式,能夠在調用Shell語句後加上選項r,這時若是腳本中出現不安全的命令,會被系統拒絕。code
[root@localhost shell]# cat strict_mode.sh #!/bin/bash -r #上面的選項r表示開啓受限模式 # this is an example script. # 2013.12.20 cd / echo "`pwd`" echo "test" >~/test.tmp cat ~/test.tmp SHELL=/bin/ksh echo "SHELL="$SHELL
[root@localhost shell]# ./strict_mode.sh ./strict_mode.sh: line 6: cd: restricted /home/zhu/shell ./strict_mode.sh: line 9: /root/test.tmp: restricted: cannot redirect output cat: /root/test.tmp: No such file or directory ./strict_mode.sh: line 12: SHELL: readonly variable SHELL=/bin/bash
從上面的執行結果能夠看出,在Shell的受限模式下切換工做目錄、重定向及修改環境變量等操做都被拒絕。blog
二、使用set命令啓動受限模式ip
[root@localhost shell]# cat strict_mode.sh #!/bin/bash # this is an example script. # 2013.12.20 set -r cd / echo "`pwd`" echo "test" >~/test.tmp cat ~/test.tmp SHELL=/bin/ksh echo "SHELL="$SHELL
[root@localhost shell]# ./strict_mode.sh ./strict_mode.sh: line 8: cd: restricted /home/zhu/shell ./strict_mode.sh: line 11: /root/test.tmp: restricted: cannot redirect output cat: /root/test.tmp: No such file or directory ./strict_mode.sh: line 14: SHELL: readonly variable SHELL=/bin/bash
三、臨時文件的安全性class
除了受限模式以外,若是在腳本中使用了臨時文件,這些臨時文件也可能會形成安全性問題。爲此建議不要將臨時文件放入系統臨時目錄/tmp中,由於任何登陸系統的用戶均可以看見系統臨時目錄中的文件。除此以外,腳本運行完成或由系統產生的中斷退出時,建議刪除腳本使用的臨時文件。