普通權限管理詳細說明html
默認狀況下,用戶發起的進程的屬主是其發起者,所以,進程以發起者的身份去訪問別的資源。linux
SUID的做用:用戶執行某個程序文件時,若是此程序文件擁有SUID權限,則此進程的屬主不是其發起者,而是這個程序文件的屬主。c++
SUID權限的風險很大!shell
管理文件的SUID權限:chmod u+|-s FILE...
bash
展現位置:屬主的執行權限位。微信
例子:非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
用戶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...
展現位置:屬組的執行權限位。
若是某個用戶擁有對某個目錄的寫權限,則他能夠刪除這個目錄裏的任何文件,也就是能夠刪除此目錄裏別的用戶建立的文件。
有個需求,不但願本身建立的文件被別的用戶刪除掉。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的執行權限位。
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...
...
文件除了有user,group,other的權限控制外,還有一個更靈活的權限控制機制。
能夠針對某個文件,讓特定的某些用戶,或組訪問。
這個功能就叫facl
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--
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
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--
首先判斷啓動進程的用戶是否和file的user相同?
若是某個文件的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