【網站安全】網站被掛木馬與777許可權的奧妙

光山居士發表於2016-10-11

某天站長平臺的微信群裡的一位同學說網站被人掛馬了,查了半天也查不到原因。藝龍SEO負責人劉明問了一句“是不是技術把linux系統裡網站的核心目錄設定777檔案許可權了”,同學查後發現果然如此。那麼,777是什麼?老虎機嗎?愛偷懶的程式設計師都該會心一笑,省事大法啊。這簡單的數字背後代表了一套偉大的檔案許可權控制思想。

一、當使用者訪問一個網頁
  這個時候,你的伺服器內部發生了什麼,請參考下圖。其中任何一個環節有漏洞,都會出問題。注意,本圖片只代表個人理解,並非真實流程。
037081476005822.png

二、檔案的許可權只有三種
  查詢一下linux的標準文件,就知道。檔案分為,讀、寫、執行三種許可權。
r Read 可以開啟並讀取內容。
w Write 可以修改內容,增加內容,甚至刪除內容。
x Execute 可以當做可執行程式,或者shell指令碼執行。
特別注意,對於目錄來說,x表示可以瀏覽他裡頭都有什麼檔案。

三、檔案許可權針對的是三類使用者。
  owner 檔案所有者,或者說是建立了這個檔案的人。
group 檔案所在的組,一個組可以包含很多個owner,但不一定包含當前檔案這個owner。
other 其他人,也就是除了當前這個owner,除了當前這個group外的所有人。

四、實際是什麼樣子的。
  linux中所有檔案都需要記錄這3種許可權和3種人群。3×3=9,再加上一個標記表示“這是不是一個目錄”,一共10個標記。如圖所示,
093561476005959.png
這12行表示12個檔案,都是一個叫sin的人建立都,而且sin的分組是staff。

五、詳細解釋一下。
  我們從前到後逐一說一遍。寫著子母(drwx)的,表示有這個許可權。寫著橫線(-)的,表示沒有這個許可權。
drwxrwxrwx
1: 這是不是一個資料夾。d表示是,-表示否。(如果寫的是l,可以理解為他是快捷方式)
2:owner是否可以讀取這個檔案的內容。r表示是,-表示否。
3:owner是否可以改寫這個檔案的內容。w表示是,-表示否。
4: owner是否可以執行這個檔案。x表示是,-表示否
5:group是否可以讀取這個檔案的內容。r表示是,-表示否。
6: group是否可以改寫這個檔案的內容。w表示是,-表示否。
7: group是否可以執行這個檔案。x表示是,-表示否。
8: other是否可以讀取這個檔案的內容。r表示是,-表示否。
9:other是否可以改寫這個檔案的內容。w表示是,-表示否。
10:other是否可以執行這個檔案。x表示是,-表示否。

六、怎麼用數字方便的表示檔案許可權。
  因為10個位置中,第1個不是許可權,我們就只看後邊9個位置。
如何把這個許可權轉化成數字呢?rwxrw-r–
owner group other
符號 r w x r w – r – –
二進位制 1 1 1 1 1 0 1 0 0
相加之和 7 6 4
111 = 2^2 + 2^1 + 2^0 = 7
110 = 2^2 + 2^1 =6
100 = 2^2 = 4
所以rwxrw-r–就變成了:764

七、常用的許可權數字
  常用更改檔案許可權的命令,xxx代表檔名
600 只有owner有讀和寫的許可權
644 owner有讀和寫的許可權,group只有讀的許可權
700 只有ower有讀和寫以及執行的許可權
666 owner,group,other都有讀和寫的許可權
777 owner,group,other都有讀和寫以及執行的許可權

八、終於講到正題了
  講了這麼說,你應該明白777的意思就是,任何人可以幹任何事。那等於什麼許可權都沒設啊!linux再安全也架不住自己人刻意製造漏洞吧。這完全等同於把鋼鐵俠屁股上的材料換成了窗戶紙。

linux的安全原則是最小許可權原則,能不給的許可權就不要給。而很多懶惰或者新手的程式設計師往往為了省事使用最大許可權。

有的人問,網站需要上傳圖片,需要w很正常,否則圖片放哪呢。那我想問,你家的房子,是不是可以隨便挪動?冰箱能挪動,承重牆能挪的動嗎?請注意,客廳,臥室,廁所,廚房的空間都是rw的,但是承重牆只能是r的,不能隨便w。

同理,網站核心程式碼是不可寫的,只能可讀。

學會了許可權的基本支援,怎麼運用呢?(只能說大概意思,具體應該怎麼部署,還是找專業都運維同學問吧,我好久沒碰web了。)

假設我把核心程式碼放在/var/www/,我把圖片放在/var/pic/。前者目錄rw,裡頭所有檔案r。後者本身w,裡頭所有檔案r

webserver只能解析/var/www/裡的檔案,不能執行/var/pic/裡的。這樣不至於讓人家把木馬程式放到/var/pic/裡執行。

由於每個網站使用的語言都不一樣,無法做一個統一說明,只能舉幾個例子。假如你的網站使用php語言,植入的木馬基本也都是php語言寫的命令。

可以分別試試這兩個命令,因為php木馬常用eval和create_function來做壞事(說/var/www/路徑不存在的同學,面壁思過10分鐘)。

grep “eval(” /var/www/* -r

grep “create_function(” /var/www/* -r 

請注意,並不是沒有用777許可權,就萬無一失了,web的漏洞多如牛毛,無孔不入,本文章只是拋磚引玉。


相關文章