天天看點

特殊權限SUID以及ACL

特殊權限:

    SUID:運作某程式時,相應程序的屬主是檔案本身,而不是啟動者

        chmod  u+s FILE

        chmod  u-s FILE

            如果FILE本身具有執行權限,則顯示為s,否則顯示為S

    SGID:運作某程式時,相應程序的屬組是檔案本身,而不是啟動者

        chmod  g+s  FILE

        chmod  g-s  FILE

            如果FILE屬組具有執行權限,則顯示為s,否則顯示為S

    Sticky:在一個公共目錄,每個都可以建立檔案,删除自己的檔案,但是不能删除别人的檔案

        chmod  o+t  FILE

        chmod  o-t  FILE

            如果FILE其他權限具有執行權限,則顯示為t,否則顯示為T

    suid粗略解釋:當使用者登入linux時,作業系統會啟用一個使用者程序,當這個使用者去啟動一個指令的時候,作業系統會對比其權限,如果通過,則啟動這個指令的程序,當沒有設定suid的時候,這個指令的程序的屬主預設為啟動着使用者,而當設定了suid以後,這個程序的屬主屬于指令本身的屬主。

    suid用途舉例:

    如passwd指令,我們知道/etc/passwd隻有root有寫權限,但是普通使用者也可以通過passwd指令修改自己的密碼,這是因為,passwd指令被設定了suid,當使用者執行passwd指令的時候,程序以passwd屬主root的身份修改/etc/passwd檔案。

    當一個檔案被設定了suid的時候,它的屬主權限如果具有執行權限,那麼它的x位會顯示為s,如果沒有則顯示為S,如:

[root@logstash ~]# ls  -al  /usr/bin/passwd 

-rwsr-xr-x. 1 root root 25980 Feb 22  2012 /usr/bin/passwd

[root@logstash ~]# ls -alh /etc/passwd

-rw-r--r-- 1 root root 1.9K Jan 14 10:16 /etc/passwd

    sgid用途舉例:

    假設/tmp/test為公共目錄,我們希望使用者tom和使用者jerry都能編輯修改裡面的内容,但是又希望其他人不能修改。這種情況我們可以把tom和jerry加入/tmp/test的屬主來解決,但是這個有個問題,tom和jerry在裡面建立的檔案,屬主和屬組都會是自己和自己的基本組,也就是說tom和jerry不能互相通路修改對方自己建立的檔案,當我們希望這麼做的時候,我們就可以用到gid,下面是具體示範過程:

[root@logstash ~]# groupadd  test 

[root@logstash ~]# mkdir /tmp/test

[root@logstash ~]# chown -R root:test /tmp/test

[root@logstash ~]# ls  -ald  /tmp/test

drwxr-xr-x 2 root test 4096 Jan 20 14:10 /tmp/test

[root@logstash ~]# chmod g+w /tmp/test

[root@logstash ~]# ls  -ald /tmp/test

drwxrwxr-x 2 root test 4096 Jan 20 14:10 /tmp/test

[root@logstash /]# usermod  -a  -G test  tom

[root@logstash /]# usermod  -a  -G test  jerry

[tom@logstash ~]$ cd  /tmp/test

[tom@logstash test]$ touch a

[tom@logstash test]$ ls -al a

-rw-rw-r-- 1 tom tom 0 Jan 20 14:22 a

[jerry@logstash ~]$ cd  /tmp/test

[jerry@logstash test]$ touch b

[jerry@logstash test]$ ls  -alh

total 8.0K

drwxrwxr-x  2 root  test  4.0K Jan 20 14:23 .

drwxrwxrwt. 4 root  root  4.0K Jan 20 14:20 ..

-rw-rw-r--  1 tom   tom      0 Jan 20 14:22 a

-rw-rw-r--  1 jerry jerry    0 Jan 20 14:23 b

[root@logstash ~]# chmod g+s /tmp/test

[root@logstash ~]# su - jerry 

[jerry@logstash ~]$ cd /tmp/test

[jerry@logstash test]$ touch c

drwxrwsr-x  2 root  test  4.0K Jan 20 14:29 .

-rw-rw-r--  1 jerry test     0 Jan 20 14:29 c

    Sticky用途示例:

    承上個例子,目前情況,在/tmp/test下,tom和jerry是可以互相删對方檔案的,這是想當不友好的,這個時候我們可以借用sticky位。

[tom@logstash test]$ ls -l

total 0

-rw-rw-r-- 1 tom   test 0 Jan 20 14:42 a

-rw-rw-r-- 1 tom   test 0 Jan 20 14:42 b

-rw-rw-r-- 1 jerry test 0 Jan 20 14:29 c

[tom@logstash test]$ rm  c

-rw-rw-r-- 1 tom test 0 Jan 20 14:42 a

-rw-rw-r-- 1 tom test 0 Jan 20 14:42 b

[root@logstash test]# chmod o+t  /tmp/test

[root@logstash test]# su - jerry

[jerry@logstash test]$ ls -l

-rw-rw-r-- 1 tom test 0 Jan 20 14:44 a

-rw-rw-r-- 1 tom test 0 Jan 20 14:42 b

[jerry@logstash test]$ rm a

rm: cannot remove `a': Operation not permitted

把suid、guid、sticky跟類似rwx組合

000:

001:設定了sticky位

010:guid

011:

100:suid

101:

110:

111:

chmod  5755 /backup/test 則test權限為  rwsr-xr-t

本文轉自biao007h51CTO部落格,原文連結:http://blog.51cto.com/linzb/1736495 ,如需轉載請自行聯系原作者

繼續閱讀