1. 程式人生 > >Unix/Linux檔案系統安全

Unix/Linux檔案系統安全

  1. 檔案系統安全:檔案系統安全是Unix/Linux系統安全的核心,檔案系統用來控制誰能訪問資訊以及他們能做什麼(認證,授權,就像前面密碼學裡面提到的AAA技術,當然那個最後一個A還代表一個審計技術)
    1. 檔案系統基礎,在Unix/Linux系統中,所有的東西都是檔案,這個說法早已聽說過N次了吧。使用者資料是檔案,目錄是檔案,程序是檔案,命令是檔案,甚至網路連線也是檔案
      Unix/Linux系統檔案型別:
      1. 正規檔案,這個名詞起的比較恰當,就是普通的那些檔案,比如ASCII檔案,二進位制資料檔案,可執行檔案等等
      2. 目錄,目錄是包含一組其他檔案的二進位制檔案
  • 特殊檔案,這個名詞起的更恰當,通常就是在/dev檔案下面的裝置檔案,對硬體驅動器進行資訊編碼
  1. 連結:硬連結,把兩個或多個處於同一儲存位置的檔名連線起來(像不像連結串列,結點是檔名,都處於同一個儲存位置,就是記憶體)。軟連結(符號鏈),就是指向其他檔案
  2. Sockets,程序間通訊使用的特殊檔案
  3. 這些不同的檔案型別以樹的結構進行組織,以root作為樹根,這個樹中的所有內容統稱檔案系統,雖然現在很多的Unix系統都是基於許多磁碟和網路的檔案系統組成,但是它只為使用者提供一個樹,樹的每一項都由若干屬性來描述,包括一個或多個名字、擁有者、分組、一組許可權、長度和其他。這些屬性被儲存在了一個叫做i結點的資料結構中,一個檔案系統中每一個i結點都有一個唯一的數字,每個檔案有不同的i結點,i結點關注Unix系統所有的檔案活動,Unix檔案系統安全通過i結點中的3個資訊來實現,第一個是UID指明瞭檔案的擁有者,第二個是GID指明瞭檔案所在的分組,第三個是模式,包括了檔案的許可權設定。當然i結點中還包含了檔案大小,檔案型別硬連結數目,檔案修改時間等一系列檔案的基本屬性資訊等。攻擊者篡改檔案時,往往修改i結點設定而留下一個足印
  1. 目錄結構:還記得網站後臺那個基於Debian Linux的目錄結構嗎,就拿那個來舉一個例子
    1. /bin 使用者命令的可執行檔案,裡面就是一大堆終端命令(比如mkdir建立目錄)命名的檔案,但是都是二進位制形式,就好比system32一樣
    2. /dev 特殊裝置檔案
  • /etc 系統執行檔案,軟體都裝在這裡吧,就好比windows裡面的program file,比如你的ss服務端,是吧
  1. /home 就是使用者的起始目錄
  2. /lib 引導系統以及root檔案系統中執行命令所需的共享庫檔案
  3. /lost+found 與特定的檔案系統斷開連線時丟失的檔案
  • /mnt 臨時安裝的檔案系統,比如CD-ROM和U盤,如果是U盤的話,需要自己使用命令列來掛載,怪哉之後會在mnt資料夾裡面
  • /proc 一個偽檔案系統,用來作為到核心資料結構或正在執行的程序的介面(多除錯呼叫很有用)
  1. /sbin 為只被root使用的可執行檔案以及那些只需要引導或安裝/usr的檔案保留
  2. /tmp 臨時檔案
  3. /usr 為使用者和系統命令使用的可執行檔案、標頭檔案、共享庫、幫助檔案、本地程式。裡面有一個名為include的資料夾,充滿了C++的標頭檔案,裡面還有一個lib檔案應該放的也是一些共享庫檔案,還有一個sbin檔案
  • /var 裡面存放一些資料,比如你的網站wordpress就是放在這裡面的,還有一些統計檔案和日誌檔案
  1. 檔案許可權,檔案許可權是Unix檔案系統安全的關鍵,Unix檔案系統中每一個檔案屬於一個使用者和一個分組,通常一個檔案屬於建立它的使用者和該使用者的基本分組。每個檔案和目錄有3組許可權與之相關,一組為檔案的擁有者,一組為檔案所屬分組的成員,一組為其他使用者(the world或others),每組許可權由3個許可權標誌位來控制,就是那個rwx位,r可讀,w可寫,x可執行,剛剛說了一共有3組使用者,那麼這3組使用者就有9個rwx位,再加上一位用來指明檔案型別,這就是10個位,這被稱為一個模式位,指明檔案型別的那一位被放在最前面。放在最前面的檔案型別可有如下幾種表示方法,p為管道檔案,d為目錄檔案,l為符號連線檔案,-為普通檔案,s為socket檔案,c為字元裝置檔案,b為塊裝置檔案。排序方式為:檔案型別 檔案擁有者許可權 檔案擁有組許可權 其他人許可權 連結數 所有者ID 所有組ID 檔案大小 最後一次修改時間 檔名
    檔案的許可權還可以用八進位制來表述
  2. SUID和SGID:SUID和SGID設定了使用者ID和分組ID屬性,允許使用者以特殊的許可權來執行程式,這種程式執行時執行具有檔案所有者的許可權和檔案所在組的許可權。如果一個檔案被設定了SUID或SGID,會分別表現在所有者或同組使用者的可執行位上,也就是RWX位中的X位,其中用s來代替,如果表現在第一個rwx(即檔案所有者許可權中),那麼為SUID,如果設定在了第二個RWX位(所在組許可權)中,那麼為SGID,在UNIX的設定中,檔案許可權使用12個二進位制位來控制,如果擁有此許可權,那麼設定為1,否則為0,這12個分別為SGTrwxrwxrwx,只說說SG,後面的前面提到了,S為11位,最後的那個x為0位,第一個S代表SUID,第二個G代表SGID 。SUID程式是為了使普通使用者完成一些普通使用者許可權不能完成的位而設計的,比如使用者都會被允許修改自己的密碼,但是修改密碼是需要root許可權的,因此修改密碼的程式都會以管理員的許可權執行
    如果要檢視這些檔案的許可權的話,可以使用ls -l來顯示檔名和特性
  3. Unix檔案許可權的修改,在Unix系統中可以使用chmod命令來修改檔案的許可權,chmod語句只能由檔案的擁有者或root來執行,chmod有兩個變元,第一個是檔案的許可權,第二個是檔案的名字,在許可權變元的設計中可以使用絕對模式或者符號模式,絕對模式比如chmod 777 filename通過八進位制的許可權符來更改檔案的許可權
    當然,檔案許可權的修改也可以使用符號模式,符號模式中許可權的修改就由一個八進位制的數字變為了3個變元,變為了who op permission,其中who指的是使用者的分組,其中u代表使用者,g代表分組,其他使用0,全部使用a或者ugo。op選項使用+、-、=三個選項來控制,+指的是使得選擇的許可權加到已存在的檔案許可權中去,-指的是將其刪除,=指的是檔案只能擁有這些許可權。permission選項使用rwx和SUID和SGID或者粘位n的任一組合。比如在一下的語句中chmod g+r filename 就是向檔案filename中,對擁有者所在分組加入讀許可權。
    與chmod相關的還有chown(用於改變檔案的所有權)和chgrp(用於改變所有者分組),命令的格式問chown user filename 出其中chown命令可以一次性改變擁有者和分組,對於擁有者和分組使用.來劃分
  1. 建立檔案的預設許可權,建立一個檔案的預設許可權可以使用umask命令來設定,其中umask命令的用法為 umask 選項 許可權值
首發於我的個人網站: 點選開啟連結