溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

特殊權(quán)限及facl

發(fā)布時(shí)間:2020-06-07 18:04:54 來(lái)源:網(wǎng)絡(luò) 閱讀:351 作者:風(fēng)行隱者 欄目:大數(shù)據(jù)

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í),由于passwdSUID功能,那么運(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ō)fedoracentos兩個(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,go 的權(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,go之外,另一層讓普通用戶能控制賦權(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 ~]$


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI