1. 程式人生 > >Linux 文件特殊權限 SUID SGID SBIT

Linux 文件特殊權限 SUID SGID SBIT

我們 swd 讀取 root權限 sgid 能夠 可用 配置文件 name

  文件除了常規的權限r, w, x 還有一些特殊的權限,s與t權限,具體的用處如下

  1 SetUID

  當s 這個標誌出現在文件所有者的x權限上時, 例如/usr/bin/passwd,

[[email protected] ~]# ll -d /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

這個文件的權限狀態為 -rwsr-xr-x 此時被稱作Set UID 簡稱SUID 的特殊權限。 那麽SUID的權限對於一個文件的特殊功能是什麽呢?

SUID 僅對二進制程序有效;

執行者對於該程序需要具有x的可執行權限;

本權限僅在執行程序過程中有效;

執行者將具有該程序所有者的權限;

舉個例子,我們linux系統中, 所有賬號的密碼都記錄在/etc/shadow 這個文件中,這個文件的權限為---------- 1 root root 1401 Jun 27 16:17 /etc/shadow, 意思是這個文件僅有root可以強制寫入。 既然這個文件只有root 可以修改, 那麽其他賬戶能否自己修改自己的密碼呢? 顯然是可以的,結果不是很沖突麼!

表面上 /etc/shadow 明明只能root強制修改,一般用戶不能訪問,為什麽一般用戶還能夠修改這個文件內的密碼呢?這就是SUID的功能,

  • 普通用戶對於/usr/bin/passwd具有x 權限的,它能夠執行passwd這個命令;
  • passwd這個命令的擁有者是root;
  • 普通用戶執行passwd的過程中,會“暫時”獲得root權限;
  • 普通用戶執行passwd命令時暫時獲得root權限時就可以修改/etc/shadow

如果普通用戶執行cat命令去讀取/etc/shadow時,能夠讀取嗎?顯然不能,因為cat 不具有SUID權限。

此外SUID僅可用在二進制程序上,不能夠用在shell script上。

2 Set GID

當s 標誌在文件所有者的x 項目為SUID, 那 s 在用戶的 x 時稱為Set GID即 SGID. 舉個例子來說明

[[email protected] ~]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate

/usr/bin/locate 這個程序可以去查詢 /var/lib/mlocate/mlocate.db 這個文件的內容,因為他們屬於同一個用戶組,如果我們使用普通賬號執行locate時, 那這個賬號就可以取得slocate 用戶組的支持,因此它就可以訪問mlocate.db的內容

[[email protected] ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
-rw-r----- 1 root slocate 4028188 Jun 27 03:13 /var/lib/mlocate/mlocate.db

與SUID不同的是,SGID可以針對文件或者目錄來設置。如果是針對文件,SGID與SUID類似

  • SGID 僅對二進制程序有用;
  • 程序執行者對於該程序需要具備 x 的權限;
  • 執行者在執行的過程中獲得該程序用戶組的支持;

  除了二進制程序之外,SGID能夠用在目錄上, 當一個目錄設置了SGID之後具有如下功能:

  • 用戶若對於此目錄具有 x 與 r 的權限時,該用戶能夠進入此目錄;
  • 用戶在此目錄下的有效用戶組將會變成該目錄的用戶組;
  • 若用戶在此目錄下具有w權限, 則用戶所創建的新文件的用戶組與此目錄的用戶組相同;

  3 Sticky Bit

  Sticky Bit 僅針對目錄有效, 它對於目錄的作用是:

  • 當用戶對於此目錄具有 w, x 權限時;
  • 當用戶在該目錄下創建文件或目錄時,僅有自己與root 才有權利刪除該文件;

  舉例來說, /tmp 本身的權利是 drwxrwxrwt 這樣的權限下任何人都可以在 /tmp 內添加、修改文件,但僅有該文件/目錄創建者與root 能夠刪除自己的目錄或者文件,這個特性非常重要。

  4 SUID/SGUID/SBIT 權限設置

  如何配置文件或者目錄使其具有SUID與SGID的權限呢,我們在之前的配置r, w, x的數字前面加上一個數字就可以配置權限了

  • 4 為SGUID
  • 2 為SGID
  • 1 為 SBIT

  舉例,如果將一個文件權限改為 "-rwsr-xr-r" 時,由於s 在用戶權限中,所以是SUID,在原來的基礎755之前加上4即可, chmod 4755 filename

Linux 文件特殊權限 SUID SGID SBIT