有的同學覺得網站被掛馬,查又查不出問題,此時怎麼辦?趕緊檢查下是不是技術把 linux 系統裡網站的核心目錄設定 777 檔案許可權了。那麼,777 是什麼?下面詳解:

  一、當多使用者訪問一個網頁

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

  二、檔案的許可權只有三種

  查詢一下 linux 的標準檔案,就知道。檔案分為,讀、寫、執行三種許可權。
  rRead 可以開啟並讀取內容。
  wWrite 可以修改內容,增加內容,甚至刪除內容。
  xExecute 可以當做可執行程式,或者 shell 指令碼執行。

  特別注意,對於目錄來說,x 表示可以瀏覽他裡頭都有什麼檔案。

  三、檔案許可權針對的是三類多使用者

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

  四、實際是什麼樣子的

  linux 中所有檔案都需要記錄這 3 種許可權和 3 種人群。 3×3=9,再加上一個標記表示 “這是不是一個目錄”,一共 10 個標記。如圖所示:

  這 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–
  ownergroupother
  符號 rwxrw-r–
  二進位制 111110100
  相加之和 764
  111=2^2+2^1+2^0=7
  110=2^2+2^1=6
  100=2^2=4
  所以 rwxrw-r– 就變成了:764

  七、常用的許可權數字

  常用更改檔案許可權的命令,xxx 代表檔名

  600 只有 owner 有讀和寫的許可權
  644owner 有讀和寫的許可權,group 只有讀的許可權
  700 只有 ower 有讀和寫以及執行的許可權
  666owner,group,other 都有讀和寫的許可權
  777owner,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 的漏洞多如牛毛,無孔不入,本文章只是拋磚引玉。