Linux基礎之權限管理(含SUID\SGID\STICKY和ACL)

概述

    Linux系統是一個多人多任務的操作系統,系統上同時可能有很多人登錄,每個人都會利用系統上的各類資源完成一定的操作。那么如何合理的規范這些用戶的行為,保證資源的合理分配,則就需要用到權限管理的相關內容了。權限管理是Linux系統上最基礎,也是最重要的一部分內容,本章就簡要說明下權限管理的相關內容。內容主要包含以下幾個部分:

    1、權限管理的一些基礎概念理解

    2、普通權限管理的相關命令詳解

    3、特殊權限管理SUID、SGID、STICKY

    4、ACL相關內容

    5、chattr特殊權限簡介

    本章涉及到的命令有:chmod、chown、chgrp、umask、setfacl、getfacl、chattr、lsattr

第一部分    權限管理的一些基礎概念理解

    1、權限位介紹

        在Linux系統上,普通權限分為三類:讀(r)、寫(w)、執行(x)

        文件的從屬關系也分為三類:

            屬主(u):標明這個文件是誰的

            屬組(g):標明該文件屬于哪個用戶組

            other(o):除開文件屬主和屬組之外的所有人

        利用命令:ls -l /etc/passwd

        可以看到:-rw-r–r– 1 root root 1701 8月   1 20:12 /etc/passwd

        其中-rw-r–r–這部分就顯示了該文件權限相關的定義

        最前面一位,代表該文件的類型,主要有-、d、l、s、p、c、b等類型具體后期在進行說明。

        剩下的9位,每3位分成一個組,共3組,其中:

            左3位:代表文件的屬主的權限,3位的順序固定格式,rwx,分別代表讀寫執行,如果某位上為-,代表無該權限

            中3位:代表文件的屬組的權限

            右3位:代表除開屬主和屬組之外的其他人對該文件的權限

        針對上面提到的rw-r–r–這個權限表示文件的屬主,也就是對該文件有讀、寫權限,屬組對該文件具有讀權限,其他人對該文件具有讀權限

    2、各權限位對文件和目錄的意義

        在Linux系統上,讀寫執行三個權限針對文件和目錄是具有不同的效果的,具體的功能如下:

        對文件而言:

            r:表示可獲取文件的數據;cat、nano文件內容

            w:表示可修改文件的數據;可修改內容,不能刪除文件本身,但文件內容可以刪

            x:表示可將此文件發起運行為進程;針對可執行程序文件或腳本,一般的文件不需要加x權限

        對目錄而言:

            r:表示可使用ls命令獲取其下的所有文件列表信息,但是獲取不到ls -l的詳細信息

            w:表示可修改此目錄下的文件列表,即創建或刪除文件

            x:表示可cd至目錄中,且可使用ls -l來獲取所有文件的詳細屬性信息

        除了以上三種常見的權限表示外,還有一個權限表示:

            X:功能是遞歸賦權時,會自動檢測是目錄還是文件,目錄的話,會自動加上x權限,如果是文件,就看文件之前有沒有x權限,有的話,就+x權限,如果文件之前沒有x權限,就不加x權限

    3、權限表示法

       針對各個權限的表示,除了常規的r、w、x之外,還有一種方法進行表示(利用二進制數字)

           001:代表執行x

           010:代表寫w

           100:代表讀r

       換算成十進制就是:

           r:4

           w:2

           x:1

       0-7的數字可代表—、–x、-w-、-wx、r–、r-x、rw-、rwx

           常見的權限:

           664  rw-rw-r–

           640  rw-r—–

           600 rw——-

           755  rwxr-xr-x

           750  rwxr-x—

           775  rwxrwxr-x

        

    4、UMASK介紹

        在我們創建文件或目錄時,系統會自動為我們分配一些權限,這些權限是怎么得來的,這就是依賴于umask值了

        umask:文件的權限反向掩碼

            能夠實現在創建文件時的默認權限為:666-umask

            能夠實現在創建目錄時的默認權限為:777-umask

            注意:之所以文件用666去減,表示文件默認不能擁有執行權限;如果得到的結果中,仍然有執行權限,這需要將其+1

        

        系統上默認的umask值為:

            root:默認umask是022

            普通用戶:默認umask是002

        

        查看umask值可以直接在命令行下:umask

        指定umask值可以直接在命令行下:umask 數字  來指定umask值,值只能是3位數字,不大于777

        umask -S 顯示以權限直觀方式顯示創建目錄時的umask,顯示結果類似這種格式:u=rwx,g=rx,o=rx

        umask -p  顯示uamsk本身和其值,顯示結果類似這種格式:umask 0022

        

        注意:在命令行里設置的umask只對當前shell有效,退出登錄后失效

        想永久生效,對當前用戶生效,可放在家目錄的.bashrc里面

        如果要對所有用戶都生效,全局設置在/etc/profile和/etc/bashrc里面定義了關于默認umask的定義

        umask.png

       

 

    5、安全上下文

        安全上下文:

         1、進程以某用戶的身份運行,進程是發起此進程用戶的代理,因此以此用戶的身份和權限完成所有操作;

         2、權限匹配模型

         a) 判斷進程的屬主(誰發起的進程誰就是該進程的屬主),是否為被訪問文件的屬主;如果是,則應用屬主的權限;否則進入第2步;

         b) 判斷進程的屬主,是否屬于被訪問文件的屬組;如果是,則應用屬組權限;否則進入第3步;

         c) 應用other的權限;

        

        通俗的理解就是:

        當A用戶運行某個程序文件,例如cat,由于cat命令本身就是一個二進制程序文件,那么此時就對cat文件的權限進行判斷,A屬不屬于cat文件的屬主,如果屬于,查看cat文件上關于屬主的權限的定義,根據權限的定義來判斷A能對cat文件進行哪些操作;然后如果A不屬于cat的屬主,就判斷A是不是cat文件的屬組,如果屬于屬組,那就根據屬組權限定義的權限,對cat文件能執行哪些操作,如果既不屬于cat的屬主,又不屬于文件的屬組,那么就執行cat文件上關于其他用戶的權限定義,根據定義的權限,執行相應的操作。那么通過查看,我們發現A既不屬于cat文件的屬主,也不屬于文件的屬組,就執行了關于其他人的權限,其他人的權限具有x權限,就是執行,故A可以運行cat命令。

        當A執行cat命令時,如果cat程序需要調用一個文件,例如我們執行cat /etc/passwd  此時,一旦cat程序運行起來,那么A就是cat進程的屬主,該進程是發起此進程的用戶的代理,也就是說,cat進程調用的一些資源,當請求/etc/passwd時,請求的身份是cat進程的身份,此時,cat進程的身份是A,那么就判斷A用戶對/etc/passwd文件的權限是什么,就對應的可以進行哪些操作

第二部分    普通權限管理的相關命令詳解

    1、chmod命令

         格式:

         chmod [OPTION]… MODE[,MODE]… FILE…

                chmod [OPTION]… OCTAL-MODE FILE…

              chmod [OPTION]… –reference=RFILE FILE…

          三類用戶:

          u:屬主

          g:屬組

          o:其他

          a:所有

          選項:

              -R  表示遞歸修改目錄及其子目錄和文件的權限

    

        用法一、chmod [OPTION]… MODE[,MODE]… FILE…

            MODE表示法

                賦權表示法(直接操作一類用戶的所有權限位):u=、g=、o=、a=、ug=、uo=、…..

                    如:chmod g=rx /test/11.xx

                    chmod uo=rx /test/11.xx

                    chmod u=rx,g=w /test/11.xx

                授權表示法:直接操作一類用戶的一個權限位:u+、u-、g+…..

                    如:chmod u-x /test/11.xx

                    chmod o+r /test/11.xx

                    chmod ug+x /test/11.xx

                    chmod ug-rx /test/11.xx

                    chmod u-r,g+x /test/11.xx

        chmod2.png

                

        用法二、chmod [OPTION]… OCTAL-MODE FILE…(八進制權限表示)

          例如:chmod 660 /test/11.xx

        chmod2.png

        用法三、chmod [OPTION]… –reference=RFILE FILE…(依照別的文件權限,給指定文件賦權)

          例如:chmod –reference=/etc/issue  /test/11.xx

        chmod3.png        

       

         注意:普通用戶僅能夠修改屬主為自己的文件的權限

       

     2、chown命令

         語法:chown [OPTION]… [OWNER][:[GROUP]] FILE…

                  chown [OPTION]… –reference=RFILE FILE…

            選項:

         -R:表示遞歸修改

         例如:chown -R nwc:newbee /test/

               chown newbee  /test/11.xx

               chown nwc.newbee /test/11.xx

        chown1.png

         第二種用法:

             chown –reference=/etc/issue /test/11.xx

        chown2.png

    3、chgrp命令

        具體用法與chown類似,但是chgrp只能用來更改文件或目錄的所屬組

        chgrp.png

   

 

第三部分    特殊權限管理SUID、SGID、STICKY

    1、SUID

        功能:設置了SUID權限后,當用戶運行某二進制程序文件時,該進程的屬主不是進程發起者,而是進程二進制程序文件本身的屬主

        作用對象:二進制可執行程序文件

        前提條件:執行二進制程序的用戶必須要對該二進制程序具有執行權限

        展示位置:屬主的x位,如果屬主有x,則顯示為s,如果屬主沒有x,則顯示為S

        設置方法:

            chmod u+s FILE

            chmod 4XXX FILE

        取消方法:

            chmod u-s FLIE

        suid1.png

        suid3.png

    2、SGID

        功能:

            針對二進制程序文件而言:

                對二進制程序文件設置了SGID權限,則進程的屬組不是發起進程的用戶的主組,而是會變成程序文件本身的屬組

            針對目錄而言:      

                當目錄屬組有寫權限,且有SGID權限時,那么所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或目錄時,新文件的屬組不是用戶的基本組,而是此目錄的屬組;

                可理解為:一般是一個小組協同工作時,創建一個協同目錄,讓這個目錄擁有SGID權限,然后小組內的人都在同一個屬組內,讓此屬組對該目錄有寫權限,這樣,小組內的人在這個目錄下創建文件時,文件的屬組就變成了該目錄的屬組,這樣組內的其他人就對文件具有寫權限了,實現了小組工作的協同,但此時組內的人也能刪出其他人創建的文件,為了防止這種情況發生,就有了STICKY權限

        作用對象:二進制程序文件和目錄

        前提條件:對二進制程序文件有x權限,對目錄而言有w和x權限

        展示位置:文件或目錄的屬組的執行權限位,如果屬組有x,則顯示為s,如果屬組沒有x,則顯示為S

        設置方法:

            chmod g+s FILE|DIR

            chmod 2XXX FILE|DIR

        取消方法:

            chmod g-s FILE|DIR

        

        例如:在對二進制程序執行SGID權限時:

        sgid1.png

        

        在對目錄執行二進制權限時:

        sgid11.png

        sgid22.png

        sgid33.png

        

    3、STICKY

        功能:對于屬組或全局可寫的目錄,組內的所有用戶或系統上的所有用戶,在此目錄中都能創建新文件或刪除所有的已有文件;如果為此目錄設置了Sticky權限,則每個用戶能創建新文件,只能刪除自己的文件,無法刪除組內其他用戶創建的文件

        作用對象:目錄

        前提條件:屬組或全局可寫的目錄,目錄有執行權限

        展示位置:other的執行權限位,如果other原本有執行權限,顯示為小寫t,否則,顯示為大寫T

        設置方法:

            chmod o+t DIR

            chmod 1XXX  DIR

        取消方法:

            chmod o-t  DIR

        sticky.png

第四部分    ACL相關內容

    1、ACL基礎介紹

        假設一種情況,針對某文件,我們不希望個別人訪問,這個問題如何解決。如果改掉原文件本身的權限,這樣勢必造成影響范圍過大,原本只是不希望某一個人不能訪問的,改掉文件本身的權限之后,可能造成大部分人都訪問不了,這樣,勢必就不利于資源的合理規劃和利用。那么為了解決這種情況,就有了ACL訪問控制列表這種權限控制機制。

        ACL提供了除了文件的屬主、屬組、其他人之外的另外一種靈活控制文件權限的機制。支持對個別的人,或組設置單獨的策略。

        但是ACL的實現,要基于文件系統支持,可以在文件系統創建的時候,利用-o acl指明默認支持acl掛載選項,如:

            mke2fs -t ext4 -b 1024 -m 2 -L TEST -o acl /dev/sdb5

        或者在掛載的時候利用-o acl 指明支持acl掛載選項

            mount -o acl,remount /dev/sdb5

    2、查看ACL

        在設置了ACL權限的文件或目錄上,能夠通過查看文件的詳細信息ls -l FILE來查看,權限位后面如果有+加號,則表示該文件有ACL權限

        在知道該文件有ACL權限之后,可以利用getfacl FILENAME來獲取相應ACL權限的詳細信息。例如:

        get1.png

        

        # file: scripts/    標識了文件名

        # owner: root       標識了文件屬主

        # group: root       標識了文件屬組        

        user::rwx           標識了文件自身屬主擁有的權限

        user:nwc:rwx        標識了nwc用戶對文件擁有的權限

        group::r-x          標識了文件自身屬組的權限

        mask::rwx           標識了該文件的各個用戶的最高權限基準

        other::r-x          標識了文件自身other的權限

        

    3、設置ACL

        想要實現設置ACL規則,需要利用setfacl命令來實現,setfacl的用法如下:

        語法:setfacl [選項] -m|-x 權限表達式 FILE…

              setfacl [選項] -M|-X 權限表達式文件 FILE …

        選項:

            -b FILE|DIR:刪除所有擴展的acl規則,基本的acl規則(所有者,群組,其他)將被保留

            -k DIR:刪除默認的acl規則 

            -R,–recursive:遞歸的對所有文件及目錄進行操作 

            -m  表示設置ACL規則

            -x  表示取消ACL規則

            -M FILE  表示從指定的文件中讀取規則,并以此為模板,設置指定文件中的規則

                    FILE格式為:u:username:mode

                                g:groupname:mode

                                ……

            -X FILE  表示從指定的文件中讀取規則,并以此為模板,刪除指定文件上的規則

                    FILE格式為:u:username

                                g:groupname

                                ……

            -n,–no-mask:不要重新計算有效權限。setfacl默認會重新計算ACL mask,除非mask被明確的制定。 

            –mask:重新計算有效權限,即使ACL mask被明確指定

            –set 表示重新設置ACL的權限,用新的代替,需要注意的是,新的ACL規則中必須要包含文件自身的權限定義,也就是類似:

                    u::rwx     g::r-x    o:: 這三種,中間沒有指明任何用戶的規則

                   –set的用法:setfacl –set u::rwx,g::r,o::,u:nwc:rwx – FILE

            –set-file 以文件為模板,創建指定文件的ACL。如:

                    getfacl FILE1 | setfacl –set-file=-  FILE2表示復制FILE1的ACL權限給FILE2

                     

        權限表達式:

            [d:] u:username:mode 指定用戶的權限,如果username為空,表示設置文件所有者的權限。加d:表示設置的是默認規則

            [d:] g:groupname:mode 指定群組的權限,如果groupname為空,表示設置文件所有群組的權限。加d:表示設置的是默認規則

            [d:] m: :mode 指定mask權限, 加d:表示設置的是默認規則

            加上d:設置了默認規則之后,表示在此之后在該目錄下新建的文件或目錄都默認具有的ACL權限,但現有文件和目錄本身還是要另外單獨設置ACL規則

        示例:

            環境Centos6.8,管理員為root,測試普通用戶為nwc、nwc2;測試組為testgroup1(組內有普通用戶test1user1、test1user2)、testdir2(組內有普通用戶test2user1、test2user2);測試目錄為/testdir/acl_dir,測試文件為/testdir/file

        <1>在沒有設置任何acl權限之前,所有的普通用戶、組均不為目錄或文件的屬主或屬組,且對文件和目錄均沒有任何訪問權限

        acl2.png

        

        <2>對/testdir/file1設置acl權限,讓nwc用戶具有rwx權限,讓testgroup1組具有rx權限

        acl3.png

        

        <3>通過-M FILE和-X FILE批量增加或刪除acl權限

        acl11.png

        acl22.png

        <4>通過 -R對/testdir/acl_dir設置遞歸權限,讓該目錄下已經存在的文件或目錄自動按照遞歸acl設置的權限繼承

        acl33.png

        acl44.png

        <5>通過對/testdir/acl_dir設置目錄的默認權限,讓在該目錄中的新建的文件或目錄自動繼承默認權限

        acl1.png

        acl2.png

    4、ACL中mask

        在getfacl獲取詳細acl權限列表中,我們可以看到有mask這個權限的相關信息,在linux系統里面大家都知道比如對于r–rw-r–來說, 中3位那個rw-是指文件屬組的權限, 但是一旦該文件設置了ACL權限,那么當中那個rw-代表的就是mask值而不再是文件屬組的權限了
        acl3.png

        可以看到初始尚未設置acl之前,屬組的權限位就是代表屬組本身的權限,當一旦設置了acl權限之后,在查看屬組的權限位,就變成了跟mask一致的權限

        接下來,我們設置testgroup1的acl權限為rwx,然后更改mask的設置,通過比對,我們查看文件權限發生的變化

        acl4.png

        acl5.png

        可以發現,一旦設置設置了mask之后,發現之前設置的權限,如果權限超過mask權限,后方都會顯示一個#effective的條目,代表真正生效的權限,其實,mask就是起到限定設置acl的最高權限的作用,如果此時查看該文件本身的權限信息,發現屬組權限位的信息也隨著mask的修改而改變了:

        acl6.png 

          

    5、備份和恢復ACL

        在日常備份文件目錄時,通常的cp命令,通過-a或者-p選項都可以保留acl屬性進行復制,但是如果要用tar等壓縮文件就無法保留文件的acl屬性信息了,這樣就需要利用其它方式進行acl備份了

        備份:

            獲取文件或目錄的acl權限列表,然后保存到文件中:

            getfacl -R /DIR >ACL_BAK_FILE

        恢復:

            將之前備份的權限文件恢復到文件中

            setfacl -R –set-file=ACL_BAK_FILE  /DIR

        acl1.png

        acl2.png

第五部分    chattr特殊權限管理(對管理員依然有效)

        chattr +A FILE   可以禁止訪問時更改訪問時間atime

        chattr +i FILE   表示只能讀,不能刪除,修改內容,改名

        chattr +a FILE   表示只能讀,能修改內容,不能刪除,改名,移動

        取消對應的權限可以將+改為-

        查看附加的權限有哪些可以用lsattr

        chattr1.png

        chattr2.png

原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/28030

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-08-04 14:39
下一篇 2016-08-04 14:40

相關推薦

  • Linux下的進程調度與作業管理

    Linux下的進程調度與作業管理 一、概述 1.1 進程的相關概念: 通過前面的幾個章節,我們幾乎已經學習了很多的linux的基礎,這個章節我們講一下linux下的進程管理,就像windows 下的進程一樣,我們知道windows 下有一個任務管理器,專門用來管理進程,我們首先看一下windows 的任務管理器: 從這2個圖我們可以看出,windows 下的…

    Linux干貨 2016-10-17
  • Nginx:

    來自為知筆記(Wiz)

    Linux干貨 2016-10-26
  • inode 是什么及絕對路徑和相對路徑和一些目錄相關命令總結

    inode是什么          每個分區又分兩個區,元數據區和數據區。     元數據區主要存儲文件的權限,屬主屬組,時間戳,文件的存儲位置指針….就如一本書有目錄頁和內容頁一樣,目錄頁上的記錄的是內容的頁數,可以通過目錄頁的頁數直接…

    Linux干貨 2016-08-02
  • week5

    1、顯示當前系統上root、fedora或user1用戶的默認shell; useradd fedora useradd user1 egrep "^(root|fedora|user1)" /etc/passwd | cut -d: -f1,7 2、找出/e…

    Linux干貨 2016-11-24
  • 馬哥教育網絡班22期第1周課程作業

    一、基礎中的基礎————–計算機的組成部分         計算機組成分為硬件系統與軟件系統         硬件包括五個部分     1.控制器:控制器 I/O 存儲器 &nbs…

    Linux干貨 2016-08-15
  • Ansible(From Wikipedia)

           Ansible 是一個免費的用于配置和管理計算機的的軟件平臺。它集成了軟件部署,ad hoc任務執行,和管理配置的功能。它依賴Python2.4之后的版本和通過SSH或者PowerShell管理節點。模塊工作在JSON格式,輸出信息可以被任何編程語言再次編寫。系統管理員可以使用YAML…

    Linux干貨 2015-11-18

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-07 23:02

    文章整體思路清晰,每一個命令用法都有了詳盡的總結與操作。

欧美性久久久久