普通權限管理詳細說明
一,特殊權限:SUID,SGID,STICKY
1,SUID
-
默認情況下,用戶發起的行程的屬主是其發起者,因此,行程以發起者的身份去訪問別的資源,
SUID的作用:用戶執行某個程式檔案時,如果此程式檔案擁有SUID權限,則此行程的屬主不是其發起者,而是這個程式檔案的屬主,
SUID權限的風險很大!
-
管理檔案的SUID權限:
chmod u+|-s FILE...展示位置:屬主的執行權限位,
- 原來屬主有執行權限:顯示為小寫的s,
- 原來屬主沒有執行權限:顯示為大寫的S,
例子:非root用戶是無法使用/bin/cat命令查看/etc/shadow檔案的內容的,
拷貝/bin/cat到/home/ys/bin下,給/home/ys/bin/cat加上SUID后,就可以使用/home/ys/bin/cat命令,查看/etc/shadow檔案的內容了,
# 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檔案,
$ 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
- SetGID(SGID)對檔案的作用
同 SUID 類似,對于檔案來說,SGID 具有如下幾個特點:
SGID 只針對可執行檔案有效,換句話說,只有可執行檔案才可以被賦予 SGID 權限,普通檔案賦予 SGID 沒有意義,
用戶需要對此可執行檔案有 x 權限;
用戶在執行具有 SGID 權限的可執行檔案時,用戶的群組身份會變為檔案所屬群組;
SGID 權限賦予用戶改變組身份的效果,只在可執行檔案運行程序中有效;
其實,SGID 和 SUID 的不同之處就在于,SUID 賦予用戶的是檔案所有者的權限,而 SGID 賦予用戶的是檔案所屬組的權限,就這么簡單,
就以本節開頭的 locate 命令為例,可以看到,/usr/bin/locate 檔案被賦予了 SGID 的特殊權限,這就意味著,當普通用戶使用 locate 命令時,該用戶的所屬組會直接變為 locate 命令的所屬組,也就是 slocate,
我們知道,locate 命令是用于在系統中按照檔案名查找符合條件的檔案的,當執行搜索操作時,它會通過搜索 /var/lib/mlocate/mlocate.db 這個資料庫中的資料找到答案,我們來看看此資料庫的權限:
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 1838850 1月20 04:29 /var/lib/mlocate/mlocate.db
可以看到,mlocate.db 檔案的所屬組為 slocate,雖然對檔案只擁有 r 權限,但對于普通用戶執行 locate 命令來說,已經足夠了,一方面,普通用戶對 locate命令擁有執行權限,其次,locate 命令擁有 SGID 權限,這使得普通用戶在執行 locate 命令時,所屬組身份會變為 slocate,而 slocate 對 mlocate.db 資料庫檔案擁有 r 權限,所以即便是普通用戶,也可以成功執行 locate 命令,
再次強調,無論是 SUID,還是 SGID,它們對用戶身份的轉換,只有在命令執行的程序中有效,一旦命令執行完畢,身份轉換也隨之失效,
-
SetGID(SGID)對目錄的作用
用戶fedora和gentoo都在組mageedu里,目錄/tmp/test的屬組是mageedu,讓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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/145055.html
標籤:Linux
上一篇:VSCode 配置阿里云CentOS 7.6 遠程開發
下一篇:中斷描述符表 IDT
