CentOS系統(tǒng)特殊權限SUID SGID STICKY講解

1.什么是特殊權限?
我們知道權限有r,w,x。其實除了這三個,還有特殊權限。比如:
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd
可以發(fā)現權限位,有個s。特殊權限有如下3種:
SUID
SGID
STICKY
2.關于suid
我們知道linux有一個進程安全模型的概念,比如Tom執(zhí)行passwd來進行修改密碼:
第一,注意到passwd的權限為:
[hadoop@localhost ~]$ ls -l `which passwd`
-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd
第二,注意到Tom不是root用戶,也不屬于root組。
我們先不考慮什么特殊權限s。很顯然,此時Tom只能以other(r-x)來運行passwd。Tom可以發(fā)起一個進程,這個進程是passwd,想修改自己的密碼。
第三,用戶Tom執(zhí)行完passwd修改密碼,其實就是保存至/etc/shadow中,下面我們看看/etc/shadow文件的權限情況。
[hadoop@localhost ~]$ ls -l /etc/shadow
-r-------- 1 root root 2713 Jun 13 16:34 /etc/shadow
[hadoop@localhost ~]$
那個屬于Tom的修改密碼的進程應該要去修改/etc/shadow文件,但是根據上面的/etc/shadow的權限,除了root用戶外,誰都不可以修改的!也就是說,根據進程安全模型,普通用戶根本無法修改密碼!但事實上,是可以修改的。原因就在于那個特殊權限s。
也就是說,suid表示運行某程序時,相應進程的屬主是程序文件自身的屬主,而不是啟動者。也就是說普通用戶去執(zhí)行passwd修改密碼,其實是發(fā)起了一個進程,這個進程的屬主是root用戶,那么很顯然就可以修改shadow這個影子文件了。
3.關于sgid
根據suid的理解,可知sgid表示運行某程序時,相應進程的屬組是程序文件自身的屬組,而不是啟動者的基本組。可以舉例分析:
第一:root用戶創(chuàng)建了一個項目目錄
[root@localhost /]#
[root@localhost /]# ls -ld /project/cma
drwxrwxr-x 2 root develop 4096 Jun 14 22:14 /project/cma
第二:項目組成員java01,java02,...均屬于develop組(他們的附加組),也就是說他們對/project/cma具有rwx權限。
[java02@localhost cma]$ ls -l
total 8
-rw-rw-r-- 1 java01 java01 0 Jun 14 22:24 01.java
-rw-rw-r-- 1 java02 java02 0 Jun 14 22:25 02.java
上面看到他們可以在/project/cma中創(chuàng)建文件,根據以前的理論:【誰創(chuàng)建的文件,文件的屬主就是誰,屬組就是他的基本組】,上面的沒有問題。但是,我們希望這些項目組成員之間可以相互編輯其他人的文件,該如何做呢?
第三:由于項目組成員java02,并不屬于java01的私有組,顯然java02只對01.java具有r--權限,不可以編輯。此時我們可以使用sgid,來改變默認的這種行為~
[root@localhost cma]# pwd
/project/cma
[root@localhost cma]# chmod -R g+s /project/cma
[root@localhost cma]# ls -ld
drwxrwsr-x 2 root develop 4096 Jun 14 22:25 .
[root@localhost cma]#
注意了,出現了特殊權限位s,但是有時候可能會顯示S?!救绻莝說明這個權限位上以前是具有x權限的】
第四:利用sgid后,以后我們的項目組成員便可以在此目錄下編輯其他成員的文件了。
[java02@localhost cma]$ ls -l
total 16
-rw-rwSr-- 1 java01 java01 0 Jun 14 22:24 01.java
-rw-rw-r-- 1 java01 develop 0 Jun 14 22:33 01.txt
-rw-rwSr-- 1 java02 java02 0 Jun 14 22:25 02.java
-rw-rw-r-- 1 java02 develop 0 Jun 14 22:33 02.txt
[java02@localhost cma]$
也就是說利用sgid可以幫我們達到這樣的目的:
在目錄下創(chuàng)建的文件的屬組不在是用戶的基本組,而是目錄的屬組。
4.關于sticky
此時此刻,我們的項目組成員已經可以相互編輯/project/cma下面的文件了,但是有個要求:我們希望用戶只能刪除自己的文件,而不可以刪除別人的文件。這就要使用sticky了。
[root@localhost cma]# chmod -R o+t /project/cma
[java01@localhost cma]$ id
uid=5016(java01) gid=5016(java01) groups=5016(java01),5018(develop) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[java01@localhost cma]$ rm 02.txt
rm: cannot remove `02.txt': Operation not permitted
5.串聯(lián)
還記得umask嗎,umask其實就是一個XYZW,四位數,其中X表示的就是suid/sgid/striky。
chmod xyzw file,其實同理。
000 nothing
001 only striky
010 only sgid
100 only suid
......
相關文章
- 今天小編為大家?guī)淼氖荂entOS下ACL權限控制詳解;希望對大家會有幫助,有需要的朋友一起去看看吧2016-12-16
- 今天小編為大家?guī)淼氖荂entOS系統(tǒng)管理_基本權限和歸屬的詳解;希望對大家會有幫助;有需要的朋友一起去看看吧2016-12-16
- Centos(Linux)下最大的權限賬戶為root,類似在windows中環(huán)境中的administrator,都屬于全局管理員,對服務有完全操作權限;由于近期審核,負責人將root的密碼更改了,新建2016-11-01
Centos系統(tǒng)桌面版獲取臨時root權限方法圖文教程
這篇文章主要介紹了Centos系統(tǒng)桌面版獲取臨時root權限方法圖文教程,本文講解在命令終端中使用su命令臨時獲取root權限,對linux新手有一定的主導作用,需要的朋友可以參考下2015-06-12- 很多朋友還不了解CentOS如何查看與用戶相關文件命令?今天小編將為大家?guī)鞢entOS查看與用戶相關文件命令的方法詳解,希望可以幫助到大家,有需要的朋友一起去看看吧2016-12-21
CentOS下top和free命令查看系統(tǒng)中空閑內存的方法
今天小編為大家?guī)淼氖荂entOS下top和free命令查看系統(tǒng)中空閑內存的方法;希望對大家會有幫助,有需要的朋友一起去看看吧2016-12-21CentOS下cp如何直接覆蓋命令?CentOS下cp直接覆蓋命令的方法
很多朋友都不了解CentOS下cp如何直接覆蓋命令?下面小編為大家?guī)淼氖荂entOS下cp直接覆蓋命令的方法,希望對大家會有幫助,有需要的朋友一起去看看吧2016-12-21- 今天小編為大家?guī)淼氖荂entOS使用腳本管理服務的詳解,希望會對大家有幫助,有需要的朋友一起去看看吧2016-12-21
- 今天小編為大家?guī)淼氖荂entOS6.X 優(yōu)化字符集詳解,希望會對大家?guī)韼椭?,有需要的朋友一起去看看?/div> 2016-12-21CentOS等Linux系統(tǒng)啟動后可能會出現讀進度條等待進入系統(tǒng)的過程,我們可以將它恢復到顯示詳細啟動過程模式。今天小編為大家?guī)淼氖顷P閉Centos啟動進度條恢復顯示命令詳細2016-12-21
最新評論