Linux SUID SGID 講解

Dus發表於2015-02-16

SUID屬性  

UNIX的核心是根據什麼來確定一個程式對資源的訪問許可權的呢?

  • 是這個程式的執行使用者的(有效)ID,包括user id和group id。使用者可以用id命令來查到自己的或其他使用者的user id和group id。
  • 除了一般的user id 和group id外,還有兩個稱之為effective 的id,就是有效id,上面的四個id表示為:uid,gid,euid,egid。核心主要是根據euid和egid來確定程式對資源的訪問許可權。
  • 一個程式如果沒有SUID或SGID位,則euid=uid egid=gid,分別是執行這個程式的使用者的uid和gid。

  • 例如kevin使用者的uid和gid分別為204和202,foo使用者的uid和gid為200,201,kevin執行myfile程式形成的程式的euid=uid=204,egid=gid=202,核心根據這些值來判斷程式對資源訪問的限制,其實就是kevin使用者對資源訪問的許可權,和foo沒關係。 所以沒有訪問許可權。

  • 如果一個程式設定了SUID,則euid和egid變成被執行的程式的所有者的uid和gid,例如kevin使用者執行myfile,euid=200,egid=201,uid=204,gid=202,則這個程式具有它的屬主foo的資源訪問許可權。

  • SUID的作用就是這樣:讓本來沒有相應許可權的使用者執行這個程式時,可以訪問他沒有許可權訪問的資源。passwd就是一個很鮮明的例子。

  • SUID的優先順序比SGID高,當一個可執行程式設定了SUID,則SGID會自動變成相應的egid。

  • SUID屬性只能運用在可執行檔案上,當使用者執行該執行檔案時,會臨時擁有該執行檔案所有者的許可權。
  • 在使用“ls -l”或“ll”命令瀏覽檔案時,如果可執行檔案所有者許可權的第三位是一個小寫的“s”就表明該執行檔案擁有SUID屬性。
  • 如果在瀏覽檔案時,發現所有者許可權的第三位是一個大寫的“S”則表明該檔案的SUID屬性無效,比如將SUID屬性給一個沒有執行許可權的檔案。

SGID屬性

  • SGID於SUID不同,SGID屬性可以應用在目錄或可執行檔案上。當SGID屬性應用在目錄上時,該目錄中所有建立的檔案或子目錄的擁有組都會是該目錄的擁有組。比如“/charles”目錄的擁有組是charles,當“/charles”目錄擁有SGID屬性時,任何使用者在該目錄中建立的檔案或子目錄的擁有組都會時charles;當SGID屬性應用在可執行檔案上時,其他使用者在使用該執行檔案時就會臨時擁有該執行檔案擁有組的許可權。
  • 在使用“ls -l”或“ll”命令瀏覽檔案或目錄時,如果擁有組許可權的第三位是一個小寫的“s”就表明該執行檔案或目錄擁有SGID屬性

Sticky屬性

  • Sticky屬性只能應用在目錄,當目錄擁有Sticky屬性所有在該目錄中的檔案或子目錄無論是什麼許可權只有檔案或子目錄所有者和root使用者能刪除。
  • 在使用“ls -l”或“ll”命令瀏覽目錄時,如果其他使用者許可權的第三位是一個小寫的“t”就表明該執行檔案或目錄擁有Sticky屬性。

相關文章