特殊權限 SUID、SGID、Sticky

 

. 前提 

本篇主要講解SUID, SGID, Sticky三個權限的基本原理和應用.linux

 

爲何要使用特殊權限?vim

好比系統中假若有超過四類人然而每一類人都須要一種獨特權限.只有三種獨特權限的基礎權限系統就會明顯不夠用.centos

特殊權限能夠擴展系統基礎權限的功能,使得linux權限更增強大靈活.安全

 

在理解特殊權限以前,須要先具有幾個關於安全上下文的認知:app

 

前提:進程有屬主和屬組;文件有屬主和屬組;編輯器

(1) 任何一個可執行程序文件能不能啓動爲進程:取決於發起者對程序文件是否擁有執行權限;測試

(2) 啓動爲進程以後,其進程的屬主爲發起者;進程的屬組爲發起者所屬的組;ui

(3) 進程訪問文件時的權限,取決於進程的發起者:centos7

(a) 進程的發起者,同文件的屬主:則應用文件屬主權限;spa

(b) 進程的發起者,屬於文件的屬組;則應用文件屬組權限;

(c) 應用文件「其它」權限; 

. SUID 

  1. 權限設定方法:

    1. 字母表示法:

chmod u+s FILE...

chmod u-s FILE...

 

  1. 數字表示法:

chmod 4755 FILE 添加SUID權限到二進制程序文件(添加到DIR無心義)

 

在普通三位數字權限位以前,4表明添加的SUID

 

chmod 0xxx .... 能夠刪除文件的SUID(沒法刪除目錄的SUID)  

  1. 文件權限表示:

      # ll f1
      -rwsr-xr-x. 1 root root 0 Nov 17 20:18 f1

       文件屬主的x權限,s代替.表示被設置了SUID

      若是屬主位沒有x權限,會顯示爲大寫S,表示有故障(權限無效) 

  1. SUID相關說明:

    1. 啓動爲進程以後,其進程的屬主爲原程序文件的屬主;
    2. 只能做用在二進制程序上,不能做用在腳本上,且設置在目錄上無心義 ;
    3. 執行suid權限的程序時,此用戶將繼承此程序的全部者權限;  
  1. SUID工做原理

 

  1. 環境前提:
    1. linux中有一個二進制程序cat,屬主屬組均爲root
    2. linux中有一個系統文件/etc/shadow,屬主屬組均爲root
    3. 咱們建立一個普通用戶叫user1
    4. user1具備對cat的執行權限
    5. user1 不具備對/etc/shadow的任何權限

 

  1. 默認狀況下
    1. user1執行cat,系統建立一個cat進程,進程的屬主屬組取程序發起者,也就是user1:user1
    2. cat進程訪問/etc/shadow,因爲進程屬主屬組是user1:user1,/etc/shadow的屬組屬主都不匹配,因此被拒絕訪問.

 

  1. cat設置SUID以後
    1. user1執行cat.系統建立一個cat進程,進程的屬主取cat的屬主,屬組取程序發起者,就是root:user1
    2. cat進程訪問/etc/shadow,因爲進程屬主是root,/etc/shadow的屬主匹配,因此被容許訪問.  
  1. 舉例說明:

passwd命令是linux系統中用來修改密碼的命令.系統中全部用戶均可以使用.

passwd命令改密碼的行爲是經過修改/etc/shadow文件來實現.

 

看一下/etc/shadow的文件權限:

    # ll /etc/shadow
    ----------. 1 root root 1771 Nov 16 17:06 /etc/shadow 

 

可見/etc/shadow對普通用戶沒有任何權限.

因此普通用戶默認沒法使用文本編輯器打開或者編輯這個文件.

 

那爲何經過passwd這個命令就能夠編輯呢?

 

ls命令查看passwd命令的源文件信息:

    # ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd 

 

咱們發現passwd這個程序的屬主位的執行位不是x而是s,說明passwd被設置了特殊權限SUID.

 

因而普通用戶運行passwd命令,系統建立的passwd進程的屬主由默認爲"程序發起者"變爲了passwd的屬主

passwd的屬主是root,因此普通用戶實際上是在用root的權限修改/etc/shadow文件.最後passwd命令執行結束,passwd進程被關閉. 

 

  1. 作個實驗:

給命令vim添加SUID,可讓普通用戶本身把本身變爲超級用戶.

 

看一下vim的原權限

    #ll /usr/bin/vim
    -rwxr-xr-x. 1 root root 2289640 Aug  2 08:45 /usr/bin/vim 

 

vim加個SUID

    # chmod u+s /usr/bin/vim 

 

權限變爲

    -rwsr-xr-x. 1 root root 2289640 Aug  2 08:45 /usr/bin/vim

 

 

如今用普通用戶登陸

    # su quintin 

 

嘗試使用vim編輯系統帳戶文件/etc/passwd

    $ vim /etc/passwd 

 

找到本身的用戶名一行

 

  

修改第三列本身的uid0

rootuid不用改.

 

而後保存,提示只讀文件,使用w!強制保存,成功!

   

咱們知道普通用戶quintinvim是有執行權限的,而對/etc/passwd則沒有編輯權限.

 

一般狀況下quintin啓動vim,系統會建立一個以當前用戶quintin爲屬主屬組的vim進程,

此時vim進程的屬主屬組爲quintin:quintin,因爲不管是屬主仍是屬組都不具備對/etc/passwd的編輯權限,

因此這個vim進程無權編輯/etc/passwd.

 

而給/usr/bin/vim設置了SUID以後,quintin或任何用戶啓動vim程序時,

系統建立的vim進程的屬主則是取了/usr/bin/vim這個程序文件自身的屬主root,

因此此時vim進程的屬主屬組爲root:quintin. 系統檢查發現正好匹配了/etc/passwd的屬主,因而放行vim進程.

 

其餘文本編輯器同理.

 

退出vim並從新登錄quintin賬戶

 

這時發現命令提示符已徹底變爲root,並且系統認爲我就是root

 

 由於linux只經過uid判斷超級管理員,quintin賬戶把本身的uid變成了超級管理員同樣的0,

因此從新登錄以後,quintin具備了root的身份.

 

測試:

找一個屬主屬組都爲rootother位無w的文件

    # ll /app/f11
    -rw-r--r--.  1 root root   0 Nov 17 20:18 f11 

 

改個名字

    # mv f11 f1 

 成功.

 

.  SGID 

  1. 權限設定方法:

    1. 字母表示法

chmod g+s DIR/FILE...

chmod g-s DIR/FILE...

 

  1. 數字表示法 :

chmod 2755  DIR/FILE 添加SGID到目錄或文件

在普通數字權限位前,2表明添加SGID

chmod 0755 DIR/FILE 刪除文件的SGID,(目錄不受影響)

chmod 755 DIR/FILE 同上 

  1. 文件權限表示:

    # ll /app/f1
    -rwxr-sr-x. 1 root root 0 Nov 17 20:18 /app/f1 

文件屬組的x權限,s代替.表示被設置了SGID

若是屬組位沒有x權限,會顯示爲大寫S,表示有故障(權限無效) 

 

  1. SGID相關說明:

    1. 做用在二進制程序上時:

執行sgid權限的程序時,此用戶將繼承此程序的所屬組權限

  1. 做用於目錄上時:

此文件夾下全部用戶新建文件都自動繼承此目錄的用戶組. 

  1. SGID實例:

    1. 做用在二進制程序上時,原理同SUID,只是由user位變爲group.
    2. 做用於目錄上時演示:

 

普通賬戶quintin/tmp中建立一個目錄叫quintindir,添加SGID.權限777

 

        $ chmod 2777 quintindir/
        $ ll -d quintindir/
        drwxrwsrwx. 2 quintin quintin 6 Nov 18 14:42 quintindir/ 

 

切換到普通用戶user1,quintindir目錄中建立一個文件和一個目錄

        $ touch user1file
        $ mkdir user1dir
        $ ll
        -rw-rw-r--. 1 user1 quintin 0 Nov 18 14:47 user1file
        drwxrwsr-x. 2 user1 quintin 6 Nov 18 14:47 user1dir 

 

結果顯示,user1quintindir目錄下建立的文件和目錄都自動繼承了quintindir的屬組

並且新目錄的權限也繼承了SGID.

因此設定了SGID的目錄中的全部新建文件和目錄都會自動屬於quintin.

 

 

. Sticky粘滯位 

  1. 權限設定方法:

    1. 字母表示法:

chmod o+t DIR...

chmod o-t DIR...

chmod +t DIR...

  1. 數字表示法:

chmod 1755 DIR

在普通數字權限位前,1表明添加Sticky 

  1. 文件權限表示:

       

         # ll -d tmp
            drwxrwxrwt. 2 root root 19 Nov 17 20:02 tmp 

 

        文件other位的x權限,t代替.表示被設置了Sticky

        若是other位沒有x權限,會顯示爲大寫T,表示有故障(權限無效) 

  1. Sticky相關說明:

    1. 對於一個多人可寫的目錄,若是設置了sticky,則每一個用戶僅能刪除和更名本身的文件或目錄
    2. 只能做用在目錄上.普通文件設置無心義,且會被linux內核忽略
    3. 用戶在設置Sticky權限的目錄下新建的目錄不會自動繼承Sticky權限 
  1. Sticky實例: 

  1. 目的:

我但願在系統中建立一個不少用戶能夠共同使用的目錄,可是要求用戶之間不能互相刪除改變對方的文件. 

  1. 實現:

root用戶先建立一個777權限目錄/app/tmp

普通用戶quintinwang分別在其中建立幾個文件和目錄

 

 

這時候有個問題,就是目錄中的任何用戶均可以隨意刪除其餘人的文件.

因此root要給/tmp這個文件夾設定一個Sticky.

        # chmod 1777 tmp
        # ll -d tmp
        drwxrwxrwt. 5 root root 97 Nov 20 00:49 tmp 

 

設定完畢可見目錄tmpother權限中的x位已經顯示爲t.說明已設定成功. 

  1. 測試

切換到quintin用戶,進入/app/tmp目錄

嘗試刪除或更名用戶wang的文件或目錄

 

更名文件

      [quintin@centos7 /app/tmp]$ mv wangf1 aaa
      mv: cannot move ‘wangf1’ to ‘aaa’: Operation not permitted 

 

更名目錄

      [quintin@centos7 /app/tmp]$ mv wangd1 bbb
      mv: cannot move ‘wangd1’ to ‘bbb’: Operation not permitted 

 

移動文件

      [quintin@centos7 /app/tmp]$ mv wangf1 qdir1/
      mv: cannot move ‘wangf1’ to ‘qdir1/wangf1’: Operation not permitted 

 

刪除文件

      [quintin@centos7 /app/tmp]$ rm -f wangf1
      rm: cannot remove ‘wangf1’: Operation not permitted 

 

刪除目錄

      [quintin@centos7 /app/tmp]$ rm -f wangf1
      rm: cannot remove ‘wangf1’: Operation not permitted 

 

以上全部操做均提示Operation not permitted,表Sticky權限已發揮做用.

  1. 提示:

普通用戶在設定了Sticky位的目錄下建立的子目錄不會繼承這個Sticky權限,因此要注意設定好本身目錄的權限. 

 

. 總結: 

  1. 做用範圍及功能:

    1. SUID:做用於文件(二進制程序)

此用戶將繼承此程序的全部者權限

 

  1. SGID:做用於文件(二進制程序)和目錄
    1. 對於文件:

此用戶將繼承此程序的所屬組權限.

  1. 對於目錄:

此文件夾下全部用戶新建文件都自動繼承此目錄的用戶組.

 

  1. Sticky:做用於目錄

設定後,目錄中的用戶只能刪除、移動或更名本身的文件或目錄

 

 

二進制文件

目錄

SUID

此用戶將繼承此程序的全部者權限

無心義

SGID

此用戶將繼承此程序的所屬組權限

此目錄下全部用戶新建文件都自動繼承此目錄的用戶組

Sticky

無心義

目錄中每一個用戶僅能刪除、移動或更名本身的文件或目錄

 

  1. 添加權限方法及注意事項:

 

  1. 字母權限法很靈活,不管目錄仍是文件均可以隨意添加刪除超級權限

chmod u+s ... 添加SUID

chmod g+s ... 添加SGID

chmod +s ...同時添加SUIDSGID

chmod -s ...同時刪除SUIDSGID

chmod o+t ...添加Sticky

chmod +t ...同上

 

  1. 數字權限表示法添加/刪除時:
    1. 數字權限法能夠同時刪除文件的全部三種超級權限

chmod 0755 FILE

chmod  755 FILE

  1. 數字權限法只能刪除目錄的Sticky.不能刪除目錄的SUIDSGID.
  2. 數字權限法每次只能設置一種超級權限.添加權限時:

對於文件,會刪除掉原有的其餘超級權限.

對於目錄,添加SUIDSGID,Sticky會被刪除.

 

  1. 全部表示爲大寫字母的權限均爲無效(故障)權限,由於缺乏了相應的x權限.

 

  1. 幾個權限位映射參考:

SUID: user, 佔據屬主的執行權限位;

s: 屬主擁有x權限

S:屬主沒有x權限

SGID: group,  佔據group的執行權限位;

s: group擁有x權限

S:group沒有x權限

Sticky: other, 佔據ohter的執行權限位;

t: other擁有x權限

T:other沒有x權限

相關文章
相關標籤/搜索