您好,登錄后才能下訂單哦!
Linux系統(tǒng)上的特殊權(quán)限
舉例:
[root@centos730g ~]# ll /bin/passwd //查看“/bin/passwd”文件的權(quán)限,有一 個(gè)“s”(注意:這個(gè)文件在centOS6上 沒(méi)有,在centOS7上有)
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
[root@centos730g ~]#
[root@centos6 ~]# ls -ld /tmp //查看目錄“/tmp”本身的權(quán)限,發(fā)現(xiàn)里面有一個(gè)t
drwxrwxrwt. 20 root root 4096 Oct 11 13:42 /tmp
[root@centos6 ~]#
Linux系統(tǒng)上特殊權(quán)限有三個(gè):SUID SGID STICKY
(安全上下文的概念:其實(shí)就是訪問(wèn)文件的訪問(wèn)機(jī)制
一個(gè)用戶或者一個(gè)進(jìn)程訪問(wèn)一個(gè)文件時(shí),是怎樣的訪問(wèn)機(jī)制?一個(gè)進(jìn)程是否能夠訪問(wèn)一個(gè)文件,取決于發(fā)起這個(gè)進(jìn)程的用戶對(duì)文件的訪問(wèn)權(quán)限的應(yīng)用機(jī)制,應(yīng)用機(jī)制是,首先去判斷發(fā)起這個(gè)進(jìn)程的用戶是否是被訪問(wèn)文件的屬主,如果是則應(yīng)用屬主權(quán)限,否則,則檢查發(fā)起這個(gè)進(jìn)程的用戶是否是被訪問(wèn)文件的屬組,如果是則應(yīng)用屬組權(quán)限,否則應(yīng)用其他權(quán)限。)
安全上下文:
1.進(jìn)程以某用戶的身份運(yùn)行;進(jìn)程是發(fā)起次進(jìn)程用戶的代理,因此以此用戶的身份 和權(quán)限完成所有操作;
(但是我們有沒(méi)有想象過(guò),用戶第一次運(yùn)行命令時(shí),他怎樣應(yīng)用這個(gè)命令上的權(quán)限,剛才我們一直在講,如果一個(gè)用戶執(zhí)行“ls”,就相當(dāng)于ls這個(gè)進(jìn)程等,訪問(wèn)/etc時(shí),要看發(fā)起ls這個(gè)進(jìn)程的用戶。到底是不是這個(gè)文件或目錄的屬主,但是現(xiàn)在有一個(gè)問(wèn)題,我們?cè)L問(wèn)“ls”這個(gè)文件,“ls”本身就是一個(gè)文件,那我們能不能運(yùn)行這個(gè)ls命令,這取決于什么?以前我們一直說(shuō)的是這個(gè)進(jìn)程訪問(wèn)的對(duì)象,但是進(jìn)程自己,他在被執(zhí)行之前,本身也是一個(gè)文件,因此一個(gè)用戶有沒(méi)有權(quán)限運(yùn)行這個(gè)命令,他取決于什么?取決于這個(gè)文件自己的權(quán)限,取決于用戶對(duì)這個(gè)文件有沒(méi)有執(zhí)行權(quán)限。
我們看一下“/bin/ls”這個(gè)文件的權(quán)限:
[root@centos6~]# ls -l /bin/ls 發(fā)現(xiàn)“/bin/ls”文件權(quán)限是755
-rwxr-xr-x.1 root root 109208 May 11 16:59 /bin/ls
[root@centos6~]#
我們當(dāng)前用戶是root,所以root用戶直接運(yùn)行這個(gè)程序時(shí),他是以誰(shuí)的身份來(lái)訪問(wèn)的?我們看到root是文件“/bin/root”的屬主,所以運(yùn)行屬主的權(quán)限
那我們現(xiàn)在換一個(gè)用戶,hadoop用戶。
[root@centos6 ~]# useradd hadoop
[root@centos6 ~]# su - hadoop
[hadoop@centos6 ~]$ ls -l /bin/ls //可以看出hadoop用戶查看ls命令時(shí),發(fā)現(xiàn)ls命令的 屬主仍然是root用戶。
-rwxr-xr-x. 1 root root 117048 May 11 16:59/bin/ls
[hadoop@centos6 ~]$
那么hadoop用戶,執(zhí)行ls這個(gè)命令時(shí),是以ls命令中的其他用戶的權(quán)限“r-x”來(lái)執(zhí)行。但是沒(méi)有寫(xiě)權(quán)限,所以hadoop用戶不能改這個(gè)文件。
所以一個(gè)用戶是否有權(quán)限運(yùn)行某個(gè)命令,取決于這個(gè)用戶對(duì)這個(gè)命令的文件是否有執(zhí)行權(quán)限。
問(wèn)題,誰(shuí)代理用戶將這個(gè)命令發(fā)起為進(jìn)程的呢?
是shell進(jìn)程,所以任何用戶執(zhí)行進(jìn)程,都是他的shell進(jìn)程的子進(jìn)程,我們可以運(yùn)行“pstree”命令來(lái)查看:
├─sshd─┬─sshd───bash───su───bash───pstree,那么shell是以誰(shuí)的身份運(yùn)行呢?
答案是,誰(shuí)的shell就以誰(shuí)的身份運(yùn)行:用“ps aux”命令知:
hadoop 30540 0.0 0.0 108352 1776 pts/1 S 11:36 0:00 -bash
我們一定要記得,每一個(gè)用戶登錄系統(tǒng)后,都有一個(gè)默認(rèn)的shell,這個(gè)shell就是以當(dāng)前的用戶身份運(yùn)行。
所以 每一個(gè)用戶發(fā)起的進(jìn)程,在shell命令下首先是shell的子進(jìn)程,其次他還得以當(dāng)前用戶的身份來(lái)映射這個(gè)文件的權(quán)限,有執(zhí)行權(quán)限才能運(yùn)行。
)
2.權(quán)限匹配模型:
(1)判斷進(jìn)程的屬主,是否為被訪問(wèn)文件的屬主;如果是,則應(yīng)用屬主的權(quán) 限;否則進(jìn)入第二步;
(2)判斷進(jìn)程的屬主,是否屬于被訪問(wèn)的文件屬組;如果是,則應(yīng)用屬組的 權(quán)限;否則進(jìn)入第3步;
(3)應(yīng)用other的權(quán)限;
(如果當(dāng)前系統(tǒng)中運(yùn)行的用戶為“hadoop”,那么hadoop用戶發(fā)起ls命令時(shí),那么這個(gè)ls進(jìn)程是以誰(shuí)的身份在運(yùn)行?是以hadoop的身份在運(yùn)行,也就是意味著雖然這個(gè)ls程序文件的屬主屬組是root用戶,hadoop用戶在發(fā)起這個(gè)命令時(shí),是能夠應(yīng)用ls程序文件的other類用戶的權(quán)限,但是ls這個(gè)進(jìn)程發(fā)起后,是以hadoop用戶作為屬主,
[hadoop@centos6 ~]$ whoami
hadoop
[hadoop@centos6 ~]$ ls -l /bin/ls
-rwxr-xr-x. 1 root root 117048 May 11 16:59/bin/ls
[hadoop@centos6 ~]$
一個(gè)用戶發(fā)起一個(gè)進(jìn)程,那么這個(gè)進(jìn)程就代表這個(gè)用戶在運(yùn)行,所以這就意味著,雖然這個(gè)進(jìn)程的程序文件的屬主屬組是root,但是這個(gè)程序被用戶啟動(dòng)以后,成為進(jìn)程了,這個(gè)進(jìn)程的屬主是當(dāng)前用戶,)
SUID:
默認(rèn)情況下:用戶發(fā)起的進(jìn)程,進(jìn)程的屬主是其發(fā)起者;所以,其以發(fā)起者的身份運(yùn)行。
[hadoop@centos6 ~]$ ps aux //可以看出bash的發(fā)起者是hadoop用戶
hadoop 30540 0.0 0.0 108352 1776 pts/1 S 11:36 0:00 -bash
[hadoop@centos6 ~]$ ls -l /bin/bash //bash程序文件的屬主,屬組都是root
-rwxr-xr-x. 1 root root 941880 May 11 07:21/bin/bash
[hadoop@centos6 ~]$
所以我們一定要明白,程序文件的屬主屬組,與程序運(yùn)行后進(jìn)程的屬主屬組是不一樣的
程序啟動(dòng)后就成為了進(jìn)程,進(jìn)程與程序文件就沒(méi)有關(guān)系了。
進(jìn)程的屬主是進(jìn)程的發(fā)起者,屬主只要對(duì)程序文件有執(zhí)行權(quán)限就能發(fā)起進(jìn)程。
上面說(shuō)的是正常情況下的規(guī)則,但是有了SUID之后,這種規(guī)則就被改變了。
當(dāng)發(fā)起這個(gè)進(jìn)程的時(shí)候,如果一個(gè)文件有SUID權(quán)限,就意味著這個(gè)進(jìn)程的運(yùn)行者身份不是發(fā)起者,而是文件自己的屬主。
SUID的功用:
用戶運(yùn)行某程序時(shí),如果此程序擁有SUID權(quán)限,那些程序運(yùn)行為進(jìn)程時(shí),其屬主不是 發(fā)起者,而是程序文件自己的屬主;
(這意味著什么?
比如說(shuō)如果bash擁有SUID的話,每一個(gè)用戶登錄后,打開(kāi)的bash,都以root的身份運(yùn)行,那么這樣的話,任何用戶都可以假冒root用戶的身份進(jìn)行操作)
舉例演示:
[hadoop@centos6 ~]$ ls -l /bin/cat //查看原本cat程序的屬主屬組為root,并且其他用 戶有執(zhí)行權(quán)限。
-rwxr-xr-x. 1 root root 48568 May 11 16:59/bin/cat
[hadoop@centos6 ~]$ ls -l /etc/shadow //查看文件shadow的權(quán)限,看到對(duì)于任何用戶都沒(méi) 有權(quán)限,實(shí)際上這種沒(méi)有任何權(quán)限對(duì)root管理員 是不起作用的,但是對(duì)于普通用戶就會(huì)有作用,不 允許普通用戶查看文件內(nèi)容
----------. 1 root root 1089 Nov 4 11:36 /etc/shadow
[hadoop@centos6 ~]$ cat /etc/shadow //普通用戶hadoop用戶運(yùn)行cat程序,查看shadow 文件,但是shadow文件權(quán)限對(duì)普通用戶是不允許 的,所以被禁止
cat: /etc/shadow: Permission denied
[root@centos6 ~]# cp /bin/cat /tmp/ //程序文件不一定非要保存在/bin/目錄下
[root@centos6 ~]# chmod u+s /tmp/cat //我們給cat程序加上SUID功能,使得這個(gè)cat程 序被普通用戶發(fā)起時(shí),他以自己的程序文件屬主root身份運(yùn)行。
[hadoop@centos6 ~]$ ls -l /tmp/cat //再次查看cat命令,發(fā)現(xiàn)有了SUID功能
-rwsr-xr-x. 1 hadoop hadoop 48568 Nov 4 15:26 /tmp/cat
[hadoop@centos6 ~]$ /tmp/cat /etc/shadow //再次查看shadow文件時(shí),是以root身份 運(yùn)行,所以可以查看文件內(nèi)容。
root:$6$OVD4n2P9EgnrtYnm$WDc9Jap/CVzJe8rTmHSPjgSvPz6o5JlzmcqftQv9wvPJd8lGkyZv43rG876rsYYngDXH6Ke3zBYn5SrzBZc/j.:17085:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
[hadoop@centos6 ~]$ whoami //但是我們現(xiàn)在的用戶依然是hadoop
hadoop
[hadoop@centos6 ~]$
上面的演示,就驗(yàn)證了SUID的功能,就是當(dāng)一個(gè)用戶要運(yùn)行一個(gè)程序時(shí),這個(gè)程序如果有SUID功能,那么這個(gè)程序被發(fā)起為進(jìn)程時(shí),這個(gè)進(jìn)程的屬主不再是發(fā)起者,而是這個(gè)程序文件件的屬主。
SUID的功能更是體現(xiàn)在我們普通用戶可以修改自己的密碼上。因?yàn)楫?dāng)用戶運(yùn)行passwd這個(gè)程序,發(fā)起為進(jìn)程時(shí),由于passwd有SUID功能,那么運(yùn)行后,passwd的屬主是root,那么就可以改密碼了。并將密碼保存在/etc/shadow文件中。
[root@centos7 ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
[root@centos7 ~]#
由此我們發(fā)現(xiàn)SUID有風(fēng)險(xiǎn)。
管理文件的SUID權(quán)限:
chmod u+|-s FILE.....
展示位置(即SUID符號(hào)S的出現(xiàn)位置):屬主的執(zhí)行權(quán)限位
如果屬主原本有執(zhí)行權(quán)限,顯示為小寫(xiě)s;
否則,顯示為大寫(xiě)S;
SGID:
SGID一般用在更改目錄的屬組權(quán)限
舉例演示:
[root@centos6 ~]# useradd fedora
[root@centos6 ~]# useradd mygrp
[root@centos6 ~]# useradd centos
[root@centos6 ~]# usermod -a -G mygrp fedora //給fedora用戶添加附加組
[root@centos6 ~]# usermod -a -G mygrp centos //給centos用戶添加附加組
[root@centos6 ~]# id fedora
uid=501(fedora) gid=501(fedora)groups=501(fedora),502(mygrp)
[root@centos6 ~]# id centos
uid=504(centos) gid=504(centos)groups=504(centos),502(mygrp)
[root@centos6 ~]# mkdir /var/tmp/test
[root@centos6~]# chown :mygrp /var/tmp/test //更改目錄的屬組為“mygrp”
[root@centos6~]# ls -dl /var/tmp/test/
drwxr-xr-x. 2 root mygrp 4096 Nov 4 19:36 /var/tmp/test/
[root@centos6 ~]# chmod g+w /var/tmp/test/ //給用戶的屬組加寫(xiě)權(quán)限
[root@centos6 ~]# ls -dl /var/tmp/test/
drwxrwxr-x. 2 root mygrp 4096 Nov 4 19:36 /var/tmp/test/
[root@centos6 ~]# su - fedora //切換用戶,讓fedora用戶在目錄中床架一個(gè)文件
[fedora@centos6 ~]$ cd /var/tmp/test/
[fedora@centos6 test]$ touch a.fedora
[fedora@centos6 test]$ ls -l //看到fedora用戶在目錄中創(chuàng)建的文件的屬主,屬組都為fedora
total 0
-rw-rw-r--. 1 fedora fedora 0 Nov 4 19:39 a.fedora
[fedora@centos6test]$ exit
logout
[root@centos6 ~]# su - centos //切換到centos用戶,并在目錄中也創(chuàng)建一個(gè)文件
[centos@centos6 ~]$ touch a.centos
[centos@centos6 ~]$ ls -l
total 0
-rw-rw-r--. 1 centos centos 0 Nov 4 19:39 a.centos
[centos@centos6 ~]$ cd /var/tmp/test/
[centos@centos6 test]$ touch a.centos
[centos@centos6 test]$ ls -l //centos用在目錄中創(chuàng)建的文件的屬主屬組也是centos本身
total 0
-rw-rw-r--. 1 centos centos 0 Nov 4 19:40 a.centos
-rw-rw-r--. 1 fedora fedora 0 Nov 4 19:39 a.fedora
[centos@centos6 test]$
結(jié)合上面的步驟演練SGID的效果:
[centos@centos6 test]$ exit
logout
[root@centos6 ~]# chmod g+s /var/tmp/test/ //在管理員環(huán)境下,為目錄加上SGID功能
[root@centos6 ~]# ls -ld /var/tmp/test/ //查看目錄加上SGID后,權(quán)限的變化
drwxrwsr-x. 2 root mygrp 4096 Nov 4 19:40 /var/tmp/test/
[root@centos6 ~]# su - fedora //再次切換到fedora用戶,并在目錄中再次常見(jiàn)一個(gè)文件, 此時(shí)這個(gè)文件的屬組不再是用戶本身,而是目錄的屬組
[fedora@centos6 ~]$ cd /var/tmp/test/
[fedora@centos6 test]$ touch b.fedora
[fedora@centos6 test]$ exit
logout
[root@centos6 ~]# su - centos //切換到centos用戶下,并在目錄項(xiàng)創(chuàng)建一個(gè)文件,發(fā)現(xiàn) 文件的屬組也變成了目錄的屬組
[centos@centos6 ~]$ cd /var/tmp/test/
[centos@centos6 test]$ touch b.centos
[centos@centos6 test]$ ll
total 0
-rw-rw-r--. 1 centos centos 0 Nov 4 19:40 a.centos
-rw-rw-r--. 1 fedora fedora 0 Nov 4 19:39 a.fedora
-rw-rw-r--. 1 centos mygrp 0 Nov 4 19:54 b.centos
-rw-rw-r--. 1 fedora mygrp 0 Nov 4 19:53 b.fedora
[centos@centos6 test]$
任何在此目錄下創(chuàng)建文件的用戶所新建的文件他的屬組不再是用戶的主組或者基本組,而是這個(gè)目錄的屬組,這既是SGID
SGID的作用:
如果有多個(gè)用戶同屬于一個(gè)組,而且大家彼此的屬組都有這么一個(gè)組,并且對(duì)于這個(gè)共同的屬組都有寫(xiě)權(quán)限,這樣將來(lái)每個(gè)用戶所創(chuàng)建的文件彼此都可以修改,因此他能帶來(lái)的結(jié)果就是每一個(gè)人創(chuàng)建的文件,在這個(gè)目錄中別人都可以改
(那有人就說(shuō)了,搞這么麻煩干嘛,我直接讓其他用戶有寫(xiě)權(quán)限不就行了,其實(shí)這樣是不可取的,讓其他用戶擁有寫(xiě)權(quán)限,是非常危險(xiǎn)的操作,但是作為普通用戶來(lái)講,怎樣將自己的文件共享給別人,讓別人能寫(xiě)?以為沒(méi)有權(quán)限改屬主屬組,那除了修改權(quán)限沒(méi)有別的辦法,因此作為管理員來(lái)講,為了使的這一個(gè)組內(nèi)的幾個(gè)開(kāi)發(fā)程序員,能夠彼此修改對(duì)方的程序文件,我們就用這個(gè)方式來(lái)做。)
SGID引發(fā)的問(wèn)題,
這樣的目錄,用戶在這個(gè)目錄下可以對(duì)其他用戶所創(chuàng)建的文件進(jìn)行修改,不但能進(jìn)行修改,還能刪除這個(gè)目錄下的所有文件,因?yàn)橛脩粼谠撃夸浵掠袑?xiě)權(quán)限。
為了避免用戶在該目錄先能夠任意刪除這個(gè)目錄下的文件,就引進(jìn)了Sticky
Sticky我們稱為粘滯位。
什么是粘滯位?
我們可以做一個(gè)驗(yàn)證,就是我們基于別的用戶名,來(lái)刪文件,看看能不能刪掉,
演示操作:
[centos@centos6 test]$ whoami
centos
[centos@centos6 test]$ rm a.fedora
rm: remove write-protected regular emptyfile `a.fedora'? y
[centos@centos6 test]$ ll
total 0
-rw-rw-r--. 1 centos centos 0 Nov 4 19:40 a.centos
-rw-rw-r--. 1 centos mygrp 0 Nov 4 19:54 b.centos
-rw-rw-r--. 1 fedora mygrp 0 Nov 4 19:53 b.fedora
[centos@centos6 test]$
[centos@centos6 test]$ exit
logout
[root@centos6 ~]# su - fedora
[fedora@centos6 ~]$ cd /var/tmp/test/
[fedora@centos6 test]$ rm a.centos
rm: remove write-protected regular emptyfile `a.centos'? y
[fedora@centos6 test]$ ll
total 0
-rw-rw-r--. 1 centos mygrp 0 Nov 4 19:54 b.centos
-rw-rw-r--. 1 fedora mygrp 0 Nov 4 19:53 b.fedora
[fedora@centos6 test]$ exit
logout
[root@centos6 ~]#
(這樣,由于我們可以任意的刪除其他用戶在改目錄下創(chuàng)建的文件,那么當(dāng)一個(gè)用戶創(chuàng)建一個(gè)文件以后,我們將這個(gè)文件刪除以后,我們說(shuō)這個(gè)用戶沒(méi)有創(chuàng)建文件,因?yàn)槲覀儗⑦@個(gè)文件刪除了。
那為了避免出現(xiàn)這樣的問(wèn)題,我們就是用了“Sticky”)
演示操作如下:
[root@centos6 ~]# chmod o+t /var/tmp/test/ //我們引入了Sticky是“o+t”對(duì)目錄進(jìn)處理
[root@centos6 ~]# ls -ld /var/tmp/test/
drwxrwsr-t. 2 root mygrp 4096 Nov 4 20:24 /var/tmp/test/
[root@centos6 ~]# su - fedora //我們?cè)俅吻袚Q用戶,按理說(shuō)fedora與centos兩個(gè)用戶和這 個(gè)目錄都屬于同一個(gè)組,并且這個(gè)目錄的屬組有寫(xiě)權(quán)限,那 么這兩個(gè)用戶的在這個(gè)目錄中可以執(zhí)行創(chuàng)建文件刪除文件 的操作。
[fedora@centos6 ~]$ cd /var/tmp/test/
[fedora@centos6 test]$ ll
total 0
-rw-rw-r--. 1 centos mygrp 0 Nov 4 19:54 b.centos
-rw-rw-r--. 1 fedora mygrp 0 Nov 4 19:53 b.fedora
[fedora@centos6 test]$ vim b.fedora //編輯自己的文件,并添加了“hello China”內(nèi)容
[fedora@centos6 test]$ cat b.fedora
hello China
[fedora@centos6 test]$ vim b.centos //編輯centos用戶的文件,并成功添加“hellopeople”
[fedora@centos6 test]$ cat b.centos
hello people
[fedora@centos6 test]$
[fedora@centos6 test]$ rm -f b.centos //但是正是加了Sticky功能,目錄中的用戶不能刪 除其他用戶在該目錄下創(chuàng)建的文件,但是能夠創(chuàng)建 并刪除自己的文件。
rm: cannot remove `b.centos': Operation notpermitted
[fedora@centos6 test]$
[fedora@centos6 test]$ rm -f b.fedora //用戶可以刪除自己創(chuàng)建的文件
[fedora@centos6 test]$ ll
total 0
-rw-rw-r--. 1 centos mygrp 0 Nov 4 19:54 b.centos
[fedora@centos6 test]$
[fedora@centos6 test]$ touch b.fedora //還能創(chuàng)建文件
[fedora@centos6 test]$ ll
total 0
-rw-rw-r--. 1 centos mygrp 0 Nov 4 19:54 b.centos
-rw-rw-r--. 1 fedora mygrp 0 Nov 4 20:40 b.fedora
[fedora@centos6 test]$
總結(jié)上面的演示就是:
一般而言,只要某個(gè)目錄用t權(quán)限,任何人只要有寫(xiě)權(quán)限在這個(gè)目錄中,則就能創(chuàng)建文件,修改自己的文件和其他用戶的文件,但是刪除時(shí),只能刪除自己的文件或目錄,不能刪別人的。
功用:當(dāng)目錄屬組有寫(xiě)權(quán)限,且有SGID權(quán)限時(shí),那么所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或目錄時(shí),新文件的屬組不是用戶的基本組,而是此目錄的屬組;
管理文件的SGID權(quán)限:
chmod g+|-s FILE.....
展示位置:屬組的執(zhí)行權(quán)限位
如果屬組原本有執(zhí)行權(quán)限,顯示為小寫(xiě)s;
否則,顯示為大寫(xiě)S;
演示舉例說(shuō)明:
SGID主要功能:修改目錄的屬組權(quán)限上:
Sticky:
功用:對(duì)于屬組或全局可寫(xiě)的目錄,組內(nèi)的所有用戶或系統(tǒng)上的所有用戶對(duì)存在此目錄中都能創(chuàng)建新文件或刪除所有的已有文件;如果為此類目錄設(shè)置Sticky權(quán)限,則每個(gè)用戶能創(chuàng)建新文件,且只能刪除自己的文件;
管理文件的Sticky權(quán)限:
chmod o+|-t FILE.......
展示位置:其他用戶的執(zhí)行權(quán)限位
如果其他用戶原本有執(zhí)行權(quán)限,顯示為小寫(xiě)t;
否則,顯示為大寫(xiě)T;
系統(tǒng)上的/tmp和/var/tmp目錄默認(rèn)均有Sticky權(quán)限;
[fedora@centos6 test]$ ls -ld /tmp
drwxrwxrwt. 11 root root 4096 Nov 4 20:51 /tmp
[fedora@centos6 test]$ ls -ld /var/tmp
drwxrwxrwt. 3 root root 4096 Nov 4 19:36 /var/tmp
[fedora@centos6 test]$
管理特殊權(quán)限的另一種方式:
SUID SGID STICKY又正好可以組合成一個(gè)三位權(quán)限,分別代表屬主(u),屬組(g),其他用戶(o);
SUID SGID STICKY 轉(zhuǎn)化成八進(jìn)制對(duì)應(yīng)為
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
基于八進(jìn)制方式賦權(quán)時(shí),可默認(rèn)的三位八進(jìn)制數(shù)字左側(cè)再加一位八進(jìn)制數(shù)字
chmod 1777:左側(cè)的1表示Sticky權(quán)限位
這也是umask為什么有四位,最左側(cè)的權(quán)限位是代表特殊權(quán)限位
[root@centos6~]# umask
0022 //而這個(gè)最左側(cè)的數(shù)字0,并不是用7去減的,7-0=7;這個(gè)0表示是特殊權(quán)限沒(méi)有啟動(dòng)
所以我們?cè)谑褂?/span>umask時(shí)最左側(cè)的特殊權(quán)限忽略。
facl: (并不關(guān)鍵的內(nèi)容,了解即可)
file access control lists:文件訪問(wèn)控制列表
facl是文件的額外賦權(quán)機(jī)制
額外的賦權(quán)機(jī)制可以針對(duì)指定的用戶或者指定的組來(lái)實(shí)現(xiàn)
功能:每一個(gè)用戶都沒(méi)有辦法去修改任何一個(gè)文件的屬主屬組,所以我作為一個(gè)普通用戶來(lái)講,我想將自己的文件修改后,讓別人擁有寫(xiě)權(quán)限,讓別人能不能寫(xiě),這時(shí)我們應(yīng)該怎么辦?這時(shí)我們除了修改other的權(quán)限沒(méi)有別的辦法,但是我們?nèi)绻薷?/span> 我們文件的其他用戶的權(quán)限,這會(huì)非常的危險(xiǎn),因?yàn)槲覀兏牧似渌脩艨勺x,那么其他用戶都可讀,這危險(xiǎn)還不很大,但是我們?nèi)绻牧宋募钠渌脩艨蓤?zhí)行,則其他用戶都可執(zhí)行,這時(shí)就很危險(xiǎn)了,尤其是可寫(xiě),那怎么辦呢?這就加了一個(gè)facl。
getfacl命令: //查看賦權(quán)列表
getfacl FILE.....
user:USERNAME:MODE //表示額外用戶的權(quán)限(如果我們授權(quán)了多個(gè)用戶,則這里的用戶出現(xiàn)多次,如果USERNAME為空,則表示文件的屬主的權(quán)限,)
group:GROUPNAME:MODE //表示額外組的權(quán)限(這里如果GROUPNAME為空,則表示為默認(rèn)屬組的權(quán)限)
setfacl:命令 //設(shè)置賦權(quán)列表
賦權(quán)給用戶:
setfacl -m u:USERNAME:MODE FILE..... //賦權(quán)用戶
賦權(quán)給組:
setfacl -m g:GROUPNAME:MODE FILE..... //賦權(quán)用戶組
撤銷賦權(quán):
setfacl -x u:USERNAME FILE....
setfacl -x g:GROUPNAME FILE.....
facl的作用在于:
可以讓每一個(gè)用戶修改屬主為自己文件的權(quán)限,但是這種權(quán)限不是修改默認(rèn)的u,g,o 的權(quán)限,而是額外新增了一個(gè)權(quán)限機(jī)制,所以facl是文件的額外賦權(quán)機(jī)制
facl是文件的額外賦權(quán)機(jī)制:
額外賦權(quán)機(jī)制:
可以針對(duì)指定的用戶和組來(lái)實(shí)現(xiàn),比如一個(gè)普通的用戶,我們可以明確說(shuō)明,我的文件可以讓其他那個(gè)用戶來(lái)訪問(wèn),但是這里不該屬主,只是額外的加了一個(gè)誰(shuí)擁有什么訪問(wèn)權(quán)限的。
這表示在原有的u,g,o之外,另一層讓普通用戶能控制賦權(quán)給另外的用戶或組的賦權(quán)機(jī)制。
舉例:
[root@centos6tmp]# su - centos
[centos@centos6 ~]$ cd /tmp
[centos@centos6 tmp]$ touch test.centos
[centos@centos6 tmp]$ ls -l
total 0
-rw-rw-r--. 1 centos centos 0 Nov 4 22:54 test.centos
[centos@centos6 tmp]$ exit
logout
[root@centos6 tmp]# su - fedora
[fedora@centos6 ~]$ echo hello > /tmp/test.centos //發(fā)現(xiàn)沒(méi)有權(quán)限寫(xiě)入
-bash: /tmp/test.centos: Permission denied
[fedora@centos6~]$ getfacl /tmp/test.centos //查看用戶的權(quán)限
getfacl: Removing leading '/' from absolutepath names
# file: tmp/test.centos
# owner: centos //屬主
# group: centos //屬組
user::rw- //屬主的權(quán)限,并且能看到?jīng)]有額外的其他用戶
group::rw- //屬組的權(quán)限,并且能看到?jīng)]有額外的其他用戶
other::r-- //其他用戶
[fedora@centos6 ~]$ exit
logout
[root@centos6 tmp]# su - centos
[centos@centos6 ~]$ setfacl -m u:fedora:rw /tmp/test.centos //使用訪問(wèn)控制列表的方式 對(duì)指定的用戶加權(quán)限
[centos@centos6 ~]$ getfacl /tmp/test.centos //查看這個(gè)文件增加的額外的權(quán)限
getfacl: Removing leading '/' from absolutepath names
# file: tmp/test.centos
# owner: centos //屬主
# group: centos //主組
user::rw- //屬主的權(quán)限
user:fedora:rw- //新增加的額外的屬主權(quán)限列,屬主是fedora,并且擁有的權(quán)限rw
group::rw-
mask::rw-
other::r--
[centos@centos6 ~]$ exit
logout
[root@centos6 tmp]# su - fedora
[fedora@centos6 ~]$ echo hello > /tmp/test.centos //就能寫(xiě)入了
[fedora@centos6 ~]$ getfacl /tmp/test.centos //查看額外權(quán)限時(shí),文件寫(xiě)的是絕對(duì)路徑
getfacl:Removing leading '/' from absolute path names
# file: tmp/test.centos
# owner: centos
# group: centos
user::rw-
user:fedora:rw-
group::rw-
mask::rw-
other::r--
[fedora@centos6 ~]$ cd /tmp
[fedora@centos6 tmp]$ getfacl test.centos //文件寫(xiě)的是相對(duì)路徑,就沒(méi)有相面的那一欄提示
# file: test.centos
# owner: centos
# group: centos
user::rw-
user:fedora:rw-
group::rw-
mask::rw-
other::r--
[fedora@centos6 tmp]$ cat test.centos
hello
[fedora@centos6 tmp]$ ll test.centos //被額外賦權(quán)的文件,查看詳細(xì)信息時(shí),前面的權(quán) 限最后面有一個(gè)加號(hào)“+”這表示額外權(quán)限列表已經(jīng)被添加成功
-rw-rw-r--+ 1 centos centos 6 Nov 4 23:03 test.centos
[fedora@centos6 tmp]$
[centos@centos6~]$ setfacl -m g:mygrp:rw/tmp/test.centos //為目錄設(shè)置額外的組權(quán)限
[centos@centos6 ~]$ getfacl /tmp/test.centos //查看目錄的額外權(quán)限
getfacl: Removing leading '/' from absolutepath names
# file: tmp/test.centos
# owner: centos
# group: centos
user::rw-
user:fedora:rw-
group::rw-
group:mygrp:rw- //多了一個(gè)額外組權(quán)限
mask::rw-
other::r--
[centos@centos6 ~]$
上面的就是我們的訪問(wèn)控制列表機(jī)制,但是一旦有了訪問(wèn)控制列表以后,我們的權(quán)限應(yīng)用模型就變了,以前我們說(shuō)的安全上下文,是一個(gè)進(jìn)程訪問(wèn)一個(gè)文件時(shí),首先檢查這個(gè)進(jìn)程的屬主,是不是文件的屬主,是則運(yùn)行屬主的權(quán)限,否則在檢查進(jìn)程的屬組是不是文件屬組,是則運(yùn)行屬組,否則運(yùn)行其他用戶的權(quán)限,
但是有了訪問(wèn)控制列表就不同了,當(dāng)用戶發(fā)起的進(jìn)程訪問(wèn)一個(gè)文件時(shí),首先檢查進(jìn)程屬主是不是被訪問(wèn)的文件的屬主,是則運(yùn)行屬主權(quán)限,否則就查看這個(gè)文件上有沒(méi)有額外的專門(mén)定義給這個(gè)用戶的發(fā)起的這個(gè)進(jìn)程訪問(wèn)控制列表,如果有,則應(yīng)用此特定的訪問(wèn)控制列表的權(quán)限。否則在檢查這個(gè)進(jìn)程樹(shù)屬組是否是被訪問(wèn)的文件的屬組,是則運(yùn)行屬組的權(quán)限,否則就檢查此用戶所屬的組有沒(méi)有專門(mén)的訪問(wèn)控制列表,如果有則應(yīng)用這個(gè)訪問(wèn)控制列表的權(quán)限,否則應(yīng)用其他權(quán)限。
上面的舉例演示:
驗(yàn)證有了訪問(wèn)控制列表后,安全上下文的順序:
[centos@centos6 ~]$ exit
logout
[root@centos6 ~]# useradd hadoop //添加一個(gè)新用戶,然后再用這個(gè)用戶來(lái)查看文件驗(yàn)證 沒(méi)有給hadoop設(shè)置訪問(wèn)控制列表時(shí),能否查看文件的內(nèi)容
[root@centos6 ~]# su - hadoop
[hadoop@centos6 ~]$ getfacl /tmp/test.centos //查看文件訪問(wèn)控制列表,沒(méi)有對(duì)hadoop 設(shè)置控制,hadoop根據(jù)安全上下文的順 序,對(duì)這個(gè)文件,執(zhí)行的是other權(quán)限
getfacl: Removing leading '/' from absolutepath names
# file: tmp/test.centos
# owner: centos
# group: centos
user::rw-
user:fedora:rw-
group::rw-
group:mygrp:rw-
mask::rw-
other::r--
[hadoop@centos6 ~]$ cat /tmp/test.centos //的確能查看文件內(nèi)容
hello
[hadoop@centos6 ~]$ exit
logout
[root@centos6 ~]# setfacl -m u:hadoop:--- /tmp/test.centos //對(duì)hadoop設(shè)置訪問(wèn)控制列表
[hadoop@centos6 ~]$ getfacl /tmp/test.centos //查看文件的訪問(wèn)控制列表
getfacl: Removing leading '/' from absolutepath names
# file: tmp/test.centos
# owner: centos
# group: centos
user::rw-
user:fedora:rw-
user:hadoop:--- //有了hadoop的訪問(wèn)控制列
group::rw-
group:mygrp:rw-
mask::rw-
other::r--
[root@centos6~]# su - hadoop
[hadoop@centos6 ~]$ cat /tmp/test.centos //現(xiàn)在的確沒(méi)有權(quán)限查看文件內(nèi)容了
cat: /tmp/test.centos: Permission denied
[hadoop@centos6 ~]$
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。