1. 程式人生 > >特殊許可權suid,sgid,sticky和acl(訪問控制列表)引數詳解

特殊許可權suid,sgid,sticky和acl(訪問控制列表)引數詳解

特殊許可權的設定

基本檔案許可權見上文:http://blog.csdn.net/gui951753/article/details/79078682

特殊許可權:SUID:當對一個可執行的二進位制檔案作用了suid許可權之後,任何人在執行該檔案時臨時擁有其所屬人的許可權。
                 SGID:當對一個可執行的二進位制檔案作用了sgid許可權之後,任何人在執行該檔案時臨時擁有其所屬組的許可權。
                          當對於一個目錄作用了sgid許可權之後,任何人在該目錄下建立的檔案的所屬組與該目錄的所屬組相同。
                Sticky:當對於一個目錄作用了sticky許可權之後,該目錄下的檔案僅其檔案的所屬人,或目錄的所屬人及root才能刪除。
舉例,當我們使用普通使用者執行 liubei,passwd 這條命令是能夠成功執行的,我們知道passwd的實質是修改了/etc/shadow檔案,進而修改了密碼,但是當我們查詢這個檔案的許可權的時候會發現這個問題,這個檔案普通使用者是沒有任何許可權的。那麼普通使用者liubei是如何做到了修改密碼這個事情的呢,我們通過查詢/bin/passwd命令發現了祕密。

                                                      圖一

                                                       圖二

在圖二中我們能清晰看到 passwd這條二進位制檔案命令的許可權中,多出了一個東西,-s,這就是上文中所提到的suid,執行這條命令的普通使用者,可以暫時擁有其所屬組的許可權。

    如何實現設定這些許可權:

設定suid/取消suid
    chmod u+s file
    chmod u-s file
設定sgid/取消sgid        
    chmod g+s dir
    chmod g-s dir
設定sticky        
    chmod o+t dir
    chmod o-t dir

上篇部落格中提出檔案許可權有三位,那麼在知道特殊許可權之後,我們應該知道,當權限用數字表示的時候,實際上有四位:

chmod u+s 4xxx
chmod g+s 2xxx
chmod o+t 1xxx
即有suid又有sgid  6xxx
即有suid又有sticky 5xxx
即有sgid又有Sticky 3xxx

    ACL:

   一旦開始設定acl,那麼原有的許可權屬性不可更改,只有取消acl才能更改所屬人,所屬組和其他人的許可權資訊。在acl和原有的許可權屬性之間就有那麼一種優先順序: owner > acl user > group 與 acl group 誰的許可權多,誰優先  > other

設定acl,利用setfacl命令來設定facl,下面對setfacl的命令格式進行解釋

例:setfacl -m u:wang:rwx file|directory

  • -m 表示修改ACL。你可以增加新的,或修改存在的ACL
  • u: 表示使用者。你可以使用 g 來設定組許可權
  • :rwx 需要設定的許可權。
  • 最後是檔案或者說目錄
設定預設acl : setfacl -d -m u/g:username/groupname file |directory, 並且這個預設的acl指影響未來的檔案,當我們要設定當前和未來的檔案都有acl時,先要先設定預設的,再設定當前的acl
mask 閾值的設定 

setfacl -m m:r-x file |directory  設定上限閥值 ,所有超過mask顯示的閾值的許可權都會被遮蔽,mask掩碼是動態更新的,

設定acl後,ll顯示的組資訊其實是mask資訊,原有的組資訊不可改變,也不會顯示(可用getfacl顯示完整的組許可權)
每增加一條acl,mask就會更新,並且取所有的許可權的並集,保證所有acl都有效 (所以一般情況下往往為了臨時性的目的進行設定閾值)

取消acl:

setfacl -x u:wang file |directory     刪除特定的某條acl

setfacm -b file |directory   清除acl屬性,即清楚所有acl

 setfacl -k file |directory    清除預設許可權

檢視acl:

getfacl    file|directory      檢視某個檔案或者某個目錄的acl值

acl許可權的備份與還原

acl許可權的備份及還原
    getfacl file |directory > acl.txt
    setfacl --restore acl.txt