Linux 特殊權限

普通權限管理詳細說明html

一,特殊權限:SUID,SGID,STICKY

1,SUID

  • 默認狀況下,用戶發起的進程的屬主是其發起者,所以,進程以發起者的身份去訪問別的資源。linux

    SUID的做用:用戶執行某個程序文件時,若是此程序文件擁有SUID權限,則此進程的屬主不是其發起者,而是這個程序文件的屬主。c++

    SUID權限的風險很大!shell

  • 管理文件的SUID權限:chmod u+|-s FILE...bash

    展現位置:屬主的執行權限位。微信

    • 原來屬主有執行權限:顯示爲小寫的s。
    • 原來屬主沒有執行權限:顯示爲大寫的S。

    例子:非root用戶是沒法使用/bin/cat命令查看/etc/shadow文件的內容的。學習

    拷貝/bin/cat到/home/ys/bin下,給/home/ys/bin/cat加上SUID後,就可使用/home/ys/bin/cat命令,查看/etc/shadow文件的內容了。ui

    # ll /etc/shadow
    ----------. 1 root root 1674 Dec 24 17:19 /etc/shadow
    # su - ys
    $ cat /etc/shadow
    cat: /etc/shadow: Permission denied
    # ll /bin/cat
    -rwxr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat
    # cp /bin/cat /home/ys/bin/
    # ll /home/ys/bin/
    -rwxr-xr-x. 1 root root 54160 Dec 24 18:17 cat
    # su - ys
    $ /home/ys/bin/cat /etc/shadow
    /home/ys/bin/cat: /etc/shadow: Permission denied
    $ sudo chmod u+s /home/ys/bin/cat
    $ ll /home/ys/bin/cat
    -rwsr-xr-x. 1 root root 54160 Dec 24 18:17 /home/ys/bin/cat
    $ /home/ys/bin/cat /etc/shadow > /dev/null
    $ echo $?
    0
  • 因爲沒有個用戶均可以修改本身的密碼,因此程序/bin/passwd就必須有SUID權限。由於修改密碼要修改/etc/passwd文件,這個文件只有root用戶纔有寫權限。因此普通用戶運行/bin/passwd,就必須用root的身份運行,纔可以修改/etc/passwd文件。code

    $ ll /bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
    $ ll /etc/passwd
    -rw-r--r--. 1 root root 2643 Dec 23 21:38 /etc/passwd

2, SGID

  • 用戶fedora和gentoo都在組mageedu裏。目錄/tmp/test的屬組是mageedu。htm

    讓fedora用戶在目錄/tmp/test下建立文件a.fedora,a.fedora文件的屬組是用戶fedora的基本組,也就是fedora。

    讓gentoo用戶在目錄/tmp/test下建立文件a.gentoo,a.gentoo文件的屬組是用戶gentoo的基本組,也就是gentoo。

    有個需求,但願同一組的用戶,在某個目錄下建立的文件,組裏的成員都有權限修改。上面的2個用戶雖然都在組mageedu裏,可是建立文件時,默認的屬組是用戶的基本組,有沒有一個辦法,讓建立文件的屬組自動是此目錄的屬組呢?SGID就登場了!

  • SGID用途:設置在目錄的屬組上。效果是,在此目錄下建立的文件的屬組,是此目錄的屬組,而不是用戶的基本組了

    # ll -d /tmp/test
    drwxrwxr-x. 2 ys mageedu 6 Dec 24 19:16 /tmp/test
    # id fedora
    uid=1005(fedora) gid=1005(fedora) groups=1005(fedora),5000(mageedu)
    # id gentoo
    uid=1004(gentoo) gid=1004(gentoo) groups=1004(gentoo),1001(za1),5000(mageedu)
    # su - fedora
    Last login: Thu Dec 19 21:35:48 CST 2019 on pts/2
    $ cd /tmp/test
    $ touch a.fedora
    $ ll
    -rw-rw-r--. 1 fedora fedora 0 Dec 24 19:24 a.fedora
    # su - gentoo
    Last login: Tue Dec 24 17:19:49 CST 2019 on pts/2
    $ cd /tmp/test
    $ touch a.gentoo
    $ ll
    -rw-rw-r--. 1 fedora fedora 0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo 0 Dec 24 19:33 a.gentoo
    # chmod g+s /tmp/test
    # ll -d /tmp/test
    drwxrwsr-x. 2 ys mageedu 38 Dec 24 19:33 /tmp/test
    # su - fedora
    Last login: Tue Dec 24 19:23:49 CST 2019 on pts/1
    $ cd /tmp/test
    $ touch b.fedora
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo  0 Dec 24 19:33 a.gentoo
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:35 b.fedora
    # su - gentoo
    Last login: Tue Dec 24 19:33:15 CST 2019 on pts/1
    $ cd /tmp/test
    $ touch b.gentoo
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo  0 Dec 24 19:33 a.gentoo
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:35 b.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:35 b.gentoo
    # su - ys
    Last login: Tue Dec 24 19:14:42 CST 2019 from 10.247.236.90 on pts/1
    $ cd /tmp/test
    $ touch a.ys
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo  0 Dec 24 19:33 a.gentoo
    -rw-rw-r--. 1 ys     mageedu 0 Dec 24 19:38 a.ys
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:35 b.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:35 b.gentoo
    [ys@localhost test]$ id ys
    uid=1000(ys) gid=1000(ys) groups=1000(ys),10(wheel)
  • 管理文件的GUID權限:chmod g+|-s FILE...

    展現位置:屬組的執行權限位。

    • 原來屬主有執行權限:顯示爲小寫的s。
    • 原來屬主沒有執行權限:顯示爲大寫的S。

3,Sticky

  • 若是某個用戶擁有對某個目錄的寫權限,則他能夠刪除這個目錄裏的任何文件,也就是能夠刪除此目錄裏別的用戶建立的文件。

    有個需求,不但願本身建立的文件被別的用戶刪除掉。Sticky登場了!

  • Sticky用途:設置在目錄的other上。效果是,在此目錄下文件,只有是本身建立的才能夠刪除。

    $ ls -ld /tmp/test
    drwxrwsr-x. 2 ys mageedu 70 Dec 24 19:59 /tmp/test
    $ pwd
    /tmp/test
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 ys     mageedu 4 Dec 24 19:50 a.ys
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 gentoo mageedu 4 Dec 24 19:50 b.gentoo
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:51 c.gentoo
    [fedora@localhost test]$ whoami
    fedora
    [fedora@localhost test]$ rm a.ys
    [fedora@localhost test]$ rm b.gentoo
    [fedora@localhost test]$ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:51 c.gentoo
    用戶fedora能夠刪除別的用戶建立的文件。
    修改此目錄的Sticky
    # chmod o+t /tmp/test
    # ll -d /tmp/test
    drwxrwsr-t. 2 ys mageedu 70 Dec 24 19:59 /tmp/test
    # su - gentoo
    Last login: Tue Dec 24 19:50:46 CST 2019 on pts/1
    $ cd /tmp/test
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:51 c.gentoo
    $ rm a.fedora
    rm: remove write-protected regular empty file ‘a.fedora’? y
    rm: cannot remove ‘a.fedora’: Operation not permitted
    $ rm c.gentoo
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    修改sticky後,就不能刪除別的用戶建立的文件了,只能夠刪除本身建立的文件。
  • 系統上/tmp和/var/tmp目錄,默認都有sticky權限。

  • 管理文件的GUID權限:chmod o+|-t FILE...

    展現位置:other的執行權限位。

    • 原來屬主有執行權限:顯示爲小寫的t。
    • 原來屬主沒有執行權限:顯示爲大寫的T。

四,管理特殊權限的另外一種方法:

suid sgid sticy 八進制權限
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7

又組成了一組,相似rwx的權限位。

因此,可在默認的3位八進制數字的左側再加一位八進制數字,來表示各類組合。

chmod 1777 FILE...

chmod 4777 FILE...

...

二,文件訪問權限列表(file access control list)

文件除了有user,group,other的權限控制外,還有一個更靈活的權限控制機制。

能夠針對某個文件,讓特定的某些用戶,或組訪問。

這個功能就叫facl

1,查看文件的額外訪問權限:getfacl files

下面的/tmp/test/a.fedora沒有額外的權限控制,因此別的用戶沒法修改此文件。

$ ll a.fedora
-rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
$ getfacl /tmp/test/a.fedora
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/a.fedora
# owner: fedora
# group: fedora
user::rw-
group::rw-
other::r--

2,給文件添加額外的權限控制:setfacl -m user/group:user/group:xxx files

給/tmp/test/a.fedora添加額外的權限控制。賦予用戶ys能夠修改此文件的權限。

賦予權限後再other的可執行權限位的後面多了個加號。

$ whoami
fedora
$ setfacl -m user:ys:rw a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
user:ys:rw-
group::rw-
mask::rw-
other::r--

$ ll
-rw-rw-r--+ 1 fedora fedora  0 Dec 24 19:24 a.fedora
$ whoami
ys
$ echo 111 >> a.fedora
$ cat a.fedora
111

給/tmp/test/a.fedora添加額外的權限控制。賦予組mageedu能夠修改此文件的權限。

$ whoami
fedora
$ setfacl -m group:mageedu:rw a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
user:ys:rw-
group::rw-
group:mageedu:rw-
mask::rw-
other::r--
$ id gentoo
uid=1004(gentoo) gid=1004(gentoo) groups=1004(gentoo),1001(za1),5000(mageedu)
$ whoami
gentoo
$ cd /tmp/test
$ ll
-rw-rw-r--+ 1 fedora fedora  4 Dec 24 22:10 a.fedora
$ echo 44444 >> a.fedora
$ cat a.fedora
111
44444

3,刪除文件的額外權限控制:setfacl -x user/group files

$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
user:ys:rw-
group::rw-
group:mageedu:rw-
mask::rw-
other::r--
$ setfacl -x user:ys a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
group::rw-
group:mageedu:rw-
mask::rw-
other::r--
$ setfacl -x group:mageedu a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
group::rw-
mask::rw-
other::r--

4,Linux的權限判斷邏輯:

  • 首先判斷啓動進程的用戶是否和file的user相同?

    • 相同:使用第一組rwx
    • 不相同:判斷啓動進程的用戶是否在file的額外可訪問用戶的列表裏面?
      • 在額外可訪問用戶的列表裏面:使用額外可訪問用戶的rwx
      • 不在額外可訪問用戶的列表裏面:判斷啓動進程的用戶是否在file的group裏面?
        • 在group裏面:使用第二組rwx
        • 不在group裏面:判斷啓動進程的用戶是否在file的額外可訪問組的列表裏面?
          • 在額外可訪問組裏面:使用額外可訪問組的rwx
          • 不在額外可訪問組裏面:使用第三組rwx
  • 若是某個文件的other權限是可寫的,可是額外權限是不可寫的,則也是不可寫的。由於上面的寫道的權限判斷順序。

  • 驗證:

    $ ll
    -rw-rw-rw-. 1 fedora mageedu  4 Dec 24 19:51 b.fedora
    $ su - ys
    Last login: Tue Dec 24 22:10:28 CST 2019 on pts/2
    $ cd /tmp/test
    $ echo "im ys" > b.fedora
    $ cat b.fedora
    im ys
    $ setfacl -m user:ys:--- b.fedora
    $ getfacl b.fedora
    # file: b.fedora
    # owner: fedora
    # group: mageedu
    user::rw-
    user:ys:---
    group::rw-
    mask::rw-
    other::rw-
    $ ll
    -rw-rw-rw-+ 1 fedora mageedu  6 Dec 24 22:37 b.fedora
    $ su - ys
    Last login: Tue Dec 24 22:36:43 CST 2019 on pts/2
    $ cd /tmp/test
    $ echo 3232 >> b.fedora
    -bash: b.fedora: Permission denied

c/c++ 學習互助QQ羣:877684253

本人微信:xiaoshitou5854

相關文章
相關標籤/搜索