天天看點

linux檔案特殊權限與檔案acl設定

linux中對檔案除了有讀(r)、寫(w)、執行(x)權限以外,還有3個特殊的權限,分别是setuid、setgid和stick bit

設定了suid的程式檔案,在使用者執行該程式時,使用者的權限是該程式檔案屬主的權限。例如程式檔案的屬主是root,那麼執行該程式的使用者就将暫時獲得root賬戶的權限。sgid與suid類似,隻是執行程式時獲得的是檔案屬組的權限。

例如我們使用root身份建立一個suid.sh檔案

ls -l setuid.sh檔案,可以看到檔案的屬主和屬組都是root,檔案的權限是-rw-------

linux檔案特殊權限與檔案acl設定

再将/bin下的cat複制到tmp下,将權限使用chmod u+s cat添加suid。這樣/tmp下的cat在執行時便讓執行該指令的使用者以該指令擁有者(root)的權限去執行”。

linux檔案特殊權限與檔案acl設定

此時我們以一個普通使用者openstack的身份登入去修改這個檔案,由檔案權限-rw-------可知openstack無法檢視suid.sh這個檔案。

linux檔案特殊權限與檔案acl設定

是以,我們可以使用/tmp/cat這個程式去檢視,這樣就可以檢視suid.sh這個檔案了。

linux檔案特殊權限與檔案acl設定

而sgid的意思和suid是一樣的,即讓執行檔案的使用者以該檔案所屬組的權限去執行。

這裡特别強調 suid僅可用于二進制程式上,不能用于在shellscript上面,這是因為shell script隻是将很多的二進制執行檔案調用進來執行而已。是以suid的權限部分,還是得看shell script調用過來的程式的設定,而不是shell script本身,另外suid對目錄也是無效的。

sticky (粘貼位)僅對目錄有效。

如果你檢視/tmp目錄的權限時,你會發現/tmp目錄的權限是rwxrwxrwt權限,這就是sticky。

sticky (粘貼位)就是:除非目錄的屬主和root使用者有權限删除它,除此之外其它使用者不能删除和修改這個目錄。

也就是說,在/tmp目錄中,隻有檔案的擁有者和root才能對其進行修改和删除,其他使用者則不行,避免了上面所說的問題産生。用途一般是把一個檔案夾的的權限都打開,然後來共享檔案,象/tmp目錄一樣。

如何設定這些特殊權限呢

   suid:chmod u+s 檔案名

   sgid: chmod g+s 檔案名

   sticky: chmod o+t 檔案名

或者使用八進制方式表示

suid     guid    sticky

 1        1         1

suid的二進制串為:100,換算八進制為:  4

guid的二進制串為:010,換算八進制為:    2

sticky 二進制串:001,換算八進制為:1

于是也可以這樣設:

suid:chmod 4644 檔案名

sgid:chmod 2644 檔案名

sticky:chmod 1644 檔案名

而有時候我們會發現,檔案使用suid或者sgid後檔案後面有時候是S或者s,這裡的差別是:

s:屬主原有執行權限

S:屬主無執行權限

同理T和t的差別同上。

此外檔案特殊權限設定還有檔案的acl:

我們使用root建立getfacl.txt,其中other的權限是r--,再以普通使用者opentack身份登入并嘗試修改此檔案,會發現由于沒有w權限,檔案無法修改,那麼如何才能修改呢?

linux檔案特殊權限與檔案acl設定

此時就可以用到我們的acl了。

檢視檔案的acl,使用getfacl +檔案名來檢視,

linux檔案特殊權限與檔案acl設定

設定facl使用格式

facl -m u:使用者名:[rwx] 檔案名

linux檔案特殊權限與檔案acl設定

為openstack添加rw權限後使用getfacl檢視會發現此時多了一個條acl

linux檔案特殊權限與檔案acl設定

再次切換到openstack使用者後,向facl.txt寫入hello world後,發現可以成功寫入。

linux檔案特殊權限與檔案acl設定

繼續閱讀