Linux權限管理:setUID、setGID 和 Sticky BIT

1、setUID、setGID 和 Sticky BIT 的功能詳解

  setuid 功能:

    1、只有可執行的二進制文件程序才能設定 SUID 權限(前提)

    2、命令執行者要對該程序有執行(x)權限(必要條件)

    3、命令執行者再執行該程序時獲得該程序文件屬主的身份

    4、setuid 權限只在該程序執行過程中生效

  setgid 功能: -- 對文件而言

    1、只有可執行的二進制程序設置SGID

    2、命令執行者要對該程序擁有執行(x)權限

    3、命令執行再執行程序的時候,組身份升級爲該程序文件的屬組

    4、setgid 權限童謠只在該程序執行過程中有效

  sticky BIT 功能:

    1、粘位一般用於對目錄進行操作

    2、普通用戶對該目錄擁有 w 和 x 權限

    3、設置了粘位的目錄,其目錄下的文件只有由那個創建的人才能刪除,其他人即使擁有w權限也是不行的(root管理員除外)
  

2、setuid、setgid 和 sticky BIT的實例應用

  setuid和setgid

  setuid 和setgid位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程序或命令。比 如我們用普通用戶運行passwd命令來更改自己的口令,實際上最終更改的是/etc/passwd文件我們知道/etc/passwd文件是用戶管理的 配置文件,只有root權限的用戶才能更改
  

  作爲普通用戶如果修改自己的口令通過修改/etc/passwd肯定是不可完成的任務,但是不是可以通過一個命令來修改呢答案是肯定的,作爲普通用 戶可以通過passwd 來修改自己的口令這歸功於passwd命令的權限我們來看一下;
  

  因爲/usr/bin/passwd 文件已經設置了setuid 權限位(也就是r-s--x--x中的s),所以普通用戶能臨時變成root,間接的修改/etc/passwd,以達到修改自己口令的權限
  我們在Linux 系統中的超級權限的控制中 有提到過我們知道Linux的用戶管理是極爲嚴格的,不同的用戶擁有不同的權限,爲了完成只有root用戶才能完成的工作,我們必須爲普通用戶提升權 限,最常用的方法就是su或sudo雖然setuid 和setgid也是讓普通用戶超越自身擁有的普通權限達到root權限的方法,但我不推薦大家使用,因爲它能爲系統帶來隱患!!
  注意:setuid和setgid會面臨風險,所以儘可能的少用

  我們想讓一個普通用戶 qiuyu 擁有root用戶擁有超級rm刪除權限,我們除了用su或sudo 臨時切換到 root身份操作以外,還能怎麼做呢?

  

  

  rm: 無法刪除 beinantest.txt: 權限不夠
  那我們怎麼才能讓qiuyu 這個普通用戶也擁有root超級的rm 刪除功力呢?
  

  

  我們只是設置了rm 的setuid位,讓普通用戶在rm指令上有超級root的刪除超級權力
  通過這個例子,我們應該能明白setuid和setgid位的應用了,如同前面所說,讓普通用戶超越本身的能力,讓普通用戶能執行只有root才能 執行的命令在這一點,我們要和su和sudo 區分開來請參見su和sudo的文檔:Linux 系統中的超級權限的控制
  

  sticky BIT

  我們知道 /tmp 是系統的臨時文件目錄,所有的用戶在該目錄下擁有所有的權限,也就是說在該目錄下可以任意創建、修改、刪除文件,那如果用戶A在該目錄下創建了一個文件,用戶B將該文件刪除了,這種情況我們是不能允許的。爲了達到該目的,就出現了stick  bit(粘滯位)的概念。它是針對目錄來說的,如果該目錄設置了stick  bit(粘滯位),則該目錄下的文件除了該文件的創建者和root用戶可以刪除和修改/tmp目錄下的stuff,別的用戶均不能動別人的,這就是粘滯位的作用。

  設置 /tmp目錄的粘位:

  

  再由 qihuan 用戶進入該目錄下新建 aa 文件並操作:

  

   再用 qiuyu 用戶對 aa 進行刪除操作:

  

3、setuid、setgid和 sticky BIT的設置方法
  Chmod命令中的特殊權限位含義:

    1、S_ISUID 04000 文件的 (set user-id on execution)位

    2、S_ISGID 02000 文件的 (set group-id on execution)位

    3、S_ISVTX 01000 文件的sticky 位

    上面的都是8進制數。

  如何設置UID、GID、STICK_BIT:

    SUID:置於 u 的 x 位,原位置有執行權限,就置爲 s,沒有了爲 S .

      chmod u+s  xxx # 設置setuid權限

      chmod 4551 file // 權限: r-sr-x—x

    SGID:置於 g 的 x 位,原位置有執行權限,就置爲 s,沒有了爲 S .

      chmod g+s  xxx # 設置setgid權限

      chmod 2551 file // 權限: r-xr-s--x

    STICKY:粘滯位,置於 o 的 x 位,原位置有執行權限,就置爲 t ,否則爲T .

      chmod o+t  xxx # 設置stick bit權限,針對目錄

      chmod 1551 file // 權限: r-xr-x--t

4、注意事項

  注意:特殊權限只對可執行權限的文件有效,沒有執行權限的文件被設置成特殊限位時毫無意義的

  沒有可執行權限的文件被設置成特殊權限位的標誌:

  SUID---S(大寫)---不可用狀態

  SGID---S(大寫)---不可用狀態

  SBIT----T(大寫)---不可用狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章