特殊權限:SUID, SGID, STICKY
正常情況下:
1、進程以某用戶的身份運行; 進程是發起此進程用戶的代理,因此以此用戶的身份和權限完成所有操作;
2、權限匹配模型:
(1) 判斷進程的屬主,是否為被訪問的文件屬主;如果是,則應用屬主的權限;否則進入第2步;
(2) 判斷進程的屬主,是否屬于被訪問的文件屬組;如果是,則應用屬組的權限;否則進入第3步;
(3) 應用other的權限;
SUID:
正常情況下:用戶發起的進程,進程的屬主是其發起者;因此,其以發起者的身份在運行;
SUID的功用:用戶運行某程序時,如果此程序擁有SUID權限,那么程序運行為進程時,進程的屬主不是發起者,而是程序文件自己的屬主;
chmod u(+|-)sFILE… 例:chmod u+s /tmp/cat
執行/tmp/cat命令可以這樣用 ~]$ /tmp/cat /etc/shadow
展示位置:屬主的執行權限位
如果屬主原本有執行權限,顯示為小寫s; 否則,顯示為大寫S;
注意:SUID非常有風險,慎用
如下列演示:由于others用戶breeze沒有查看的權利,直接用cat查看時cat是以breeze的身份查看的,所以無權查看。/tmp/cat有s權限,
且其屬主為root,所以breeze執行"/tmp/cat /etc/shadow"時是以root的身份查看的,所以就能查看成功。
[breeze@yph7 ~]$id
uid=1004(breeze)gid=1004(breeze) 組=1004(breeze) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[breeze@yph7 ~]$ll /etc/shadow
———-. 1root root 2482 12月 15 21:44 /etc/shadow
[breeze@yph7 ~]$cat /etc/shadow
cat: /etc/shadow:權限不夠
[root@yph7 tmp]#which cat
/usr/bin/cat
[root@yph7 tmp]#cp /usr/bin/cat /tmp
[root@yph7 tmp]#ll
總用量 56
-rwxr-xr-x. 1root root 54048 12月 16 03:57 cat
[root@yph7 tmp]#chmod u+s /tmp/cat
[root@yph7 tmp]#ll
總用量 56
-rwsr-xr-x. 1root root 54048 12月 16 03:57 cat
[breeze@yph7 ~]$/tmp/cat /etc/shadow
root:$6$aVx67dPp………G9ylO/2AWEzvMSC60G8y8qkA/:16777:0:99999:7:::
bin:*:16372:0:99999:7:::
daemon:*:16372:0:99999:7:::
others用戶對/etc/passwd 沒有w權限,那么others用戶如何把密碼寫進/etc/passwd中去的呢?因為/etc/passwd有s權限,
others用戶執行passwd命令時是以root身份執行的,所以就能以root身份更寫密碼了。同樣以root身份把密碼寫到/etc/shadow中。
[root@yph7 tmp]#which passwd
/usr/bin/passwd
[root@yph7 tmp]#ls -l /usr/bin/passwd
-rwsr-xr-x. 1root root 27832 6月 10 2014 /usr/bin/passwd
SGID:
功用:當目錄屬組有寫權限,且有SGID權限時,那么所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或目錄時,
新文件的屬組不是用戶的基本組,而是此目錄的屬組;
管理文件的SGID權限:
chmod g+|-sFILE…
展示位置:屬組的執行權限位
如果屬組原本有執行權限,顯示為小寫s; 否則,顯示為大寫S;
SGID有s權限時,組成員創建文件時,創建的文件屬于成員的這個附加組。
而不是原來的基本組。
[root@yph7 ~]#usermod -G apache gentoo
[root@yph7 ~]#usermod -G apache hadoop
[root@yph7 ~]#id gentoo
uid=4006(gentoo)gid=5003(gentoo) 組=5003(gentoo),2011(apache)
[root@yph7 ~]#id hadoop
uid=2051(hadoop)gid=2001(hadoop) 組=2001(hadoop),2011(apache)
[root@yph7 ~]#mkdir /tmp/text
[root@yph7 ~]#chown .apache /tmp/text;ls -ld /tmp/text
drwxr-xr-x. 2root apache 6 12月 16 04:47/tmp/text
[root@yph7 ~]#chmod g+w /tmp/text;ls -ld /tmp/text
drwxrwxr-x. 2root apache 6 12月 16 04:47/tmp/text
切換到gentoo用戶
[gentoo@yph7text]$ cd /tmp/text
[gentoo@yph7text]$ touch a.gentoo
[gentoo@yph7text]$ su – hadoop
密碼:
上一次登錄:一 12月 14 21:38:17 CST2015從230pxs/4 上
Hello,hadoopWelcome to login,the time is 2015-12-16-05:05:27
[hadoop@yph7 ~]$cd /tmp/text ;touch a.hadoop
[hadoop@yph7text]$ ll
總用量 0
-rw-rw-r–. 1gentoo gentoo 0 12月 16 05:05 a.gentoo
-rw-rw-r–. 1hadoop hadoop 0 12月 16 05:05 a.hadoop———>創建的文件屬主仍屬于用戶自
己的基本組,而不是附加組apache
root給組增加s權限
[root@yph7 ~]#chmod g+s /tmp/text
[root@yph7 ~]#ls -ld /tmp/text
drwxrwsr-x. 2root apache 36 12月 16 05:05 /tmp/text
用gentoo和Hadoop用戶創建文件
[hadoop@yph7text]$ touch b.hadoop
[hadoop@yph7text]$ su – gentoo
密碼:
上一次登錄:三 12月 16 04:49:54 CST2687pxs/3 上
Hello,gentooWelcome to login,the time is 2015-12-16-05:09:38
[gentoo@yph7 ~]$touch /tmp/text/b.gentoo
[gentoo@yph7 ~]$ls -l /tmp/text
總用量 0
-rw-rw-r–. 1gentoo gentoo 0 12月 16 05:05 a.gentoo
-rw-rw-r–. 1hadoop hadoop 0 12月 16 05:05 a.hadoop
-rw-rw-r–. 1gentoo apache 0 12月 16 05:09 b.gentoo————>組增加s權限后,組內用戶創 建的文件屬組就為apache了
-rw-rw-r–. 1hadoop apache 0 12月 16 05:09 b.hadoop
[gentoo@yph7 ~]$rm -rf /tmp/text/a.hadoop——————>gentoo可以刪除hadoop的文件
[flimmer@yph7~]$ su – hadoop
Password:
Last login: WedDec 16 05:05:27 CST 2015 on pts/3
Hello,hadoop Welcometo login,the time is 2015-12-16-05:28:57
[hadoop@yph7 ~]$rm -rf /tmp/text/a.gentoo——————>hadoop可以刪除gentoo的文件
[hadoop@yph7 ~]$ls -l /tmp/text
總用量 0
-rw-rw-r–. 1gentoo apache 0 12月 16 05:09 b.gentoo
-rw-rw-r–. 1hadoop apache 0 12月 16 05:09 b.hadoop
這樣,組內用戶的問文件組內成員都可以改,w權限不能隨便給的,這樣相對更安全
但是這樣組內成員由于具有w權限,可以隨意刪除他人文件,也是不太安全,如何防止
同組用戶刪除他人文件呢,這用到了sticky權限
Sticky:
功用:對于屬組或全局可寫的目錄,組內的所有用戶或系統上的所有用戶對在此目錄中都能創建新文件或刪除所有的已有文件;
如果為此類目錄設置Sticky權限,則每個用戶能創建新文件,且只能刪除自己的文件;
管理文件的Sticky權限:
chmod o+|-tFILE…
展示位置:其它用戶的執行權限位
如果其它用戶原本有執行權限,顯示為小寫t; 否則,顯示為大寫T;
系統上的/tmp和/var/tmp目錄默認均有sticky權限;
[root@yph7 ~]#chmod o+t /tmp/text
[root@yph7 ~]#ls -ld /tmp/text
drwxrwsr-t. 2root apache 36 12月 16 05:29 /tmp/text
[hadoop@yph7 ~]$rm -rf /tmp/text/b.gentoo——————–hadoop無法刪除gentoo的文件,雖然有w權限
rm: 無法刪除"/tmp/text/b.gentoo": 不允許的操作
[gentoo@yph7 ~]$rm -rf /tmp/text/b.hadoop———————-gentoo無法刪除hadoop的文件,雖然有w權限
rm: 無法刪除"/tmp/text/b.hadoop": 不允許的操作
[gentoo@yph7 ~]$ls -l /tmp/text
總用量 0
-rw-rw-r–. 1gentoo apache 0 12月 16 05:09 b.gentoo
-rw-rw-r–. 1hadoop apache 0 12月 16 05:09 b.hadoop
[gentoo@yph7 ~]$rm -rf /tmp/text/b.gentoo
[gentoo@yph7 ~]$ls -l /tmp/text
總用量 0
-rw-rw-r–. 1hadoop apache 0 12月 16 05:09 b.hadoop—————-gentoo可以刪除自己的文件
管理特殊權限的另一方式:
suid sgidsticy 八進制權限
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
基于八進制方式賦權時,可于默認的三位八進制數字左側再加一位八進制數字;
例如:chmod 1777
facl:file access control lists
文件的額外賦權機制:
在原來的u,g,o之外,另一層讓普通用戶能控制賦權給另外的用戶或組的賦權機制;
getfacl命令:查看列表
getfacl FILE…
user:USERNAME:MODE
group:GROUPNAME:MODE
setfacl命令:
賦權給用戶:
setfacl -m u:USERNAME:MODE FILE…
賦權級組:
setfacl -m g:GROUPNAME:MODE FILE…
會發現權限上多個加號
撤銷賦權:
setfacl -x u:USERNAME FILE…
setfacl -x g:GROUPNAME FILE…
例:
setfacl -mg:mygrp:rw file
撤銷facl為:
setfacl -x u:fedora file
具體演示如下:
用戶進程先看是否屬主權限,再看是否訪問列表權限,再看屬組,others
對于others用戶來說
[breeze@yph7 ~]$touch /tmp/a.breeze
[breeze@yph7 ~]$ls -l /tmp/a.breeze
-rw-rw-r–. 1breeze breeze 0 12月 16 05:53 /tmp/a.breeze
[flimmer@yph7~]$ cat etc/issue > /tmp/a.breeze
-bash:/tmp/a.breeze: Permission denied———————flimmer作為others用戶沒有w權限
[breeze@yph7 ~]$getfacl /tmp/a.breeze
getfacl:Removing leading '/' from absolute path names
# file:tmp/a.breeze
# owner: breeze
# group: breeze
user::rw-
group::rw-
other::r–
[breeze@yph7 ~]$setfacl -m u:flimmer:rw /tmp/a.breeze
[breeze@yph7 ~]$getfacl /tmp/a.breeze
getfacl:Removing leading '/' from absolute path names
# file:tmp/a.breeze
# owner: breeze
# group: breeze
user::rw-
user:flimmer:rw- ———————————–多出一行指明了flimmer的權限
group::rw-
mask::rw-
other::r–
[flimmer@yph7~]$ tail -2 /etc/passwd > /tmp/a.breeze
[flimmer@yph7~]$ cat /tmp/a.breeze ———————雖然others是只讀權限,但仍能寫進去
bat2:x:4012:4012::/home/bat2:/bin/bash
bat3:x:4013:4013::/home/bat3:/bin/bash
[breeze@yph7 ~]$setfacl -m u:flimmer:— /tmp/a.breeze ——-把flimmer拉黑
[flimmer@yph7~]$ cat /tmp/a.breeze
cat:/tmp/a.breeze: Permission denied ——flimmer連查看的權利都沒有了
對于屬組來說
[breeze@yph7 ~]$chmod 644 /tmp/a.breeze
[breeze@yph7 ~]$ls -l /tmp/a.breeze
-rw-r–r–+ 1breeze breeze 78 12月 16 05:57 /tmp/a.breeze ——-屬組沒有w權限的,
[breeze@yph7 ~]$setfacl -m g:apache:rw /tmp/a.breeze ———–給組apache加特權
[breeze@yph7 ~]$id gentoo
uid=4006(gentoo)gid=5003(gentoo) 組=5003(gentoo),2011(apache) ——–gentoo屬于apache
[gentoo@yph7 ~]$tail -2 /etc/shells > /tmp/a.breeze
[gentoo@yph7 ~]$cat /tmp/a.breeze ———-gentoo屬于apache,屬組只有r權限,
但apache有特 權仍能改寫文件內容
/bin/tcsh
/bin/csh
[flimmer@yph7~]$ getfacl /tmp/a.breeze ————–flimmer被拉黑,但他可以
查看別人的列表,不侵犯隱私?
getfacl:Removing leading '/' from absolute path names
# file:tmp/a.breeze
# owner: breeze
# group: breeze
user::rw-
user:flimmer:—
group::rw-
group:apache:rw-
mask::rw-
other::r–
原創文章,作者:flivfox,如若轉載,請注明出處:http://www.www58058.com/10179
內容詳實有料,樣式上再好了點頭條了