在看《鳥哥的Linux私房菜》的過程中,關于SUID和SGID有了自己的一點心得體會,來這裡發表一下!
首先說SUID,這個權限的含義就是當一個使用者運作一個程式的時候,如果這個程式有SUID權限,那麼這個程式運作時的所屬使用者不是運作這個程式的使用者,而是這個程式的所屬使用者。舉個例子:chfn這個程式,如下圖: 這個程式是屬于root的,且具有SUID權限,其他使用者具有運作權限,如果我用一個普通使用者vbird來運作會發生什麼情況呢?請看下圖:vbird是一個普通使用者,當vbird運作這個程式的時候,我用root去查找系統中關于chfn的程序,會發現這個程序的所有者是root,這就是SUID。
接下來再講一下SGID,我個人感覺關于程序的SGID權限和SUID差不多,這裡沒有什麼難點。主要是在于關于檔案夾的。如果一個檔案夾擁有SGID權限的話,那麼其他使用者進入到這個檔案之後,有效使用者組都是這個檔案夾的使用者組,即建立的檔案或者檔案夾的使用者組都是這個檔案夾的使用者組。這句話聽起來可能比較拗口,接下來舉個例子,就很好了解了。
首先,介紹使用者群組,我這裡有一個使用者michael,其主組也是michael,附屬組是一個project。如下圖:
michael的主組是michael意味着michael登入後,預設的有效組就是michael,即michael建立一個一個檔案或者檔案夾,預設都是屬于michael組的。
現在,有一個檔案夾project,擁有SGID權限,且所屬組為project,那麼michael在裡面建立檔案或者檔案夾會發生什麼情況呢?請看下圖:
大家請看,我建立的檔案test和檔案夾dtest都是屬于project組的,而不是屬于michael組,且dtest檔案夾也擁有SGID的權限。這就是sgid的功能。最後,我是有個想法,如果michael的附屬組裡面不包含project,那麼michael在project/這個檔案夾裡面建立東西會怎麼樣呢?我特地實驗了一下,發現建立的檔案還是和原來一樣,這就出現了一種很神奇的情況,某個檔案所屬的使用者和所屬的組并沒有任何關系。如下圖: