特殊權限及facl

Linux系統上的特殊權限

 

        

 

舉例:

[root@centos730g ~]# ll /bin/passwd    //查看“/bin/passwd”文件的權限,有一                                             個“s”(注意:這個文件在centOS6上                                             沒有,在centOS7上有)
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
[root@centos730g ~]# 

 

[root@centos6 ~]# ls -ld /tmp   //查看目錄“/tmp”本身的權限,發現裏面有一個t

drwxrwxrwt. 20 root root 4096 Oct 11 13:42 /tmp

[root@centos6 ~]#

        

 

Linux系統上特殊權限有三個:SUID  SGID STICKY

 

安全上下文的概念:其實就是訪問文件的訪問機制

                   一個用戶或者一個進程訪問一個文件時,是怎樣的訪問機制?一個進程是否能夠訪問一個文件,取決於發起這個進程的用戶對文件的訪問權限的應用機制,應用機制是,首先去判斷髮起這個進程的用戶是否是被訪問文件的屬主,如果是則應用屬主權限,否則,則檢查發起這個進程的用戶是否是被訪問文件的屬組,如果是則應用屬組權限,否則應用其他權限。)

 

         安全上下文:

                   1.進程以某用戶的身份運行;進程是發起次進程用戶的代理,因此以此用戶的身份            和權限完成所有操作;

 

 

(但是我們有沒有想象過,用戶第一次運行命令時,他怎樣應用這個命令上的權限,剛纔我們一直在講,如果一個用戶執行“ls”,就相當於ls這個進程等,訪問/etc時,要看發起ls這個進程的用戶。到底是不是這個文件或目錄的屬主,但是現在有一個問題,我們訪問“ls”這個文件,“ls”本身就是一個文件,那我們能不能運行這個ls命令,這取決於什麼?以前我們一直說的是這個進程訪問的對象,但是進程自己,他在被執行之前,本身也是一個文件,因此一個用戶有沒有權限運行這個命令,他取決於什麼?取決於這個文件自己的權限,取決於用戶對這個文件有沒有執行權限。

         我們看一下“/bin/ls”這個文件的權限:

         [root@centos6~]# ls -l /bin/ls   發現“/bin/ls”文件權限是755

         -rwxr-xr-x.1 root root 109208 May 11 16:59 /bin/ls

         [root@centos6~]#

         我們當前用戶是root,所以root用戶直接運行這個程序時,他是以誰的身份來訪問的?我們看到root是文件“/bin/root”的屬主,所以運行屬主的權限

         那我們現在換一個用戶,hadoop用戶。

[root@centos6 ~]# useradd hadoop

[root@centos6 ~]# su - hadoop

[hadoop@centos6 ~]$ ls -l /bin/ls    //可以看出hadoop用戶查看ls命令時,發現ls命令的                                                                                  屬主仍然是root用戶。

-rwxr-xr-x. 1 root root 117048 May 11 16:59/bin/ls

[hadoop@centos6 ~]$

那麼hadoop用戶,執行ls這個命令時,是以ls命令中的其他用戶的權限“r-x”來執行。但是沒有寫權限,所以hadoop用戶不能改這個文件。

         所以一個用戶是否有權限運行某個命令,取決於這個用戶對這個命令的文件是否有執行權限。

         問題,誰代理用戶將這個命令發起爲進程的呢?

                   shell進程,所以任何用戶執行進程,都是他的shell進程的子進程,我們可以運行“pstree”命令來查看:

         ├─sshd─┬─sshd───bash───su───bash───pstree,那麼shell是以誰的身份運行呢?

         答案是,誰的shell就以誰的身份運行:用“ps aux”命令知:

hadoop   30540  0.0  0.0 108352 1776 pts/1    S    11:36  0:00 -bash

         我們一定要記得,每一個用戶登錄系統後,都有一個默認的shell,這個shell就是以當前的用戶身份運行。

         所以  每一個用戶發起的進程,在shell命令下首先是shell的子進程,其次他還得以當前用戶的身份來映射這個文件的權限,有執行權限才能運行。

                   2.權限匹配模型:

                            1)判斷進程的屬主,是否爲被訪問文件的屬主;如果是,則應用屬主的權                                        限;否則進入第二步;

                            2)判斷進程的屬主,是否屬於被訪問的文件屬組;如果是,則應用屬組的                                          權限;否則進入第3步;

                            3)應用other的權限;

 

 

(如果當前系統中運行的用戶爲“hadoop”,那麼hadoop用戶發起ls命令時,那麼這個ls進程是以誰的身份在運行?是以hadoop的身份在運行,也就是意味着雖然這個ls程序文件的屬主屬組是root用戶,hadoop用戶在發起這個命令時,是能夠應用ls程序文件的other類用戶的權限,但是ls這個進程發起後,是以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 ~]$

         一個用戶發起一個進程,那麼這個進程就代表這個用戶在運行,所以這就意味着,雖然這個進程的程序文件的屬主屬組是root,但是這個程序被用戶啓動以後,成爲進程了,這個進程的屬主是當前用戶,

 

 

 

SUID

         默認情況下:用戶發起的進程,進程的屬主是其發起者;所以,其以發起者的身份運行。

 

[hadoop@centos6 ~]$ ps aux     //可以看出bash的發起者是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 ~]$

         所以我們一定要明白,程序文件的屬主屬組,與程序運行後進程的屬主屬組是不一樣的

程序啓動後就成爲了進程,進程與程序文件就沒有關係了。

         進程的屬主是進程的發起者,屬主只要對程序文件有執行權限就能發起進程。

 

上面說的是正常情況下的規則,但是有了SUID之後,這種規則就被改變了。

 

當發起這個進程的時候,如果一個文件有SUID權限,就意味着這個進程的運行者身份不是發起者,而是文件自己的屬主。

 

SUID的功用:

         用戶運行某程序時,如果此程序擁有SUID權限,那些程序運行爲進程時,其屬主不是   發起者,而是程序文件自己的屬主;

 

(這意味着什麼?

         比如說如果bash擁有SUID的話,每一個用戶登錄後,打開的bash,都以root的身份運行,那麼這樣的話,任何用戶都可以假冒root用戶的身份進行操作)

 

舉例演示:

 

[hadoop@centos6 ~]$ ls -l /bin/cat     //查看原本cat程序的屬主屬組爲root,並且其他用                                                                                  戶有執行權限。

-rwxr-xr-x. 1 root root 48568 May 11 16:59/bin/cat

[hadoop@centos6 ~]$ ls -l /etc/shadow   //查看文件shadow的權限,看到對於任何用戶都沒                                                                             有權限,實際上這種沒有任何權限對root管理員                                                                                        是不起作用的,但是對於普通用戶就會有作用,不                                                                               允許普通用戶查看文件內容

----------. 1 root root 1089 Nov  4 11:36 /etc/shadow

[hadoop@centos6 ~]$ cat /etc/shadow   //普通用戶hadoop用戶運行cat程序,查看shadow                                                                             文件,但是shadow文件權限對普通用戶是不允許                                                                             的,所以被禁止

cat: /etc/shadow: Permission denied

[root@centos6 ~]# cp /bin/cat /tmp/            //程序文件不一定非要保存在/bin/目錄下

[root@centos6 ~]# chmod u+s /tmp/cat    //我們給cat程序加上SUID功能,使得這個cat                                           序被普通用戶發起時,他以自己的程序文件屬主root身份運行。

[hadoop@centos6 ~]$ ls -l /tmp/cat                     //再次查看cat命令,發現有了SUID功能

-rwsr-xr-x. 1 hadoop hadoop 48568 Nov  4 15:26 /tmp/cat

[hadoop@centos6 ~]$ /tmp/cat /etc/shadow    //再次查看shadow文件時,是以root身份                                                                                                運行,所以可以查看文件內容。

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   //但是我們現在的用戶依然是hadoop

hadoop

[hadoop@centos6 ~]$

 

上面的演示,就驗證了SUID的功能,就是當一個用戶要運行一個程序時,這個程序如果有SUID功能,那麼這個程序被髮起爲進程時,這個進程的屬主不再是發起者,而是這個程序文件件的屬主。

 

 

SUID的功能更是體現在我們普通用戶可以修改自己的密碼上。因爲當用戶運行passwd這個程序,發起爲進程時,由於passwdSUID功能,那麼運行後,passwd的屬主是root,那麼就可以改密碼了。並將密碼保存在/etc/shadow文件中。

[root@centos7 ~]# ls -l /bin/passwd

-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd

[root@centos7 ~]#

 

 

由此我們發現SUID有風險。

 

 

管理文件的SUID權限:

                   chmod  u+|-s FILE.....

        

                   展示位置(即SUID符號S的出現位置):屬主的執行權限位

                            如果屬主原本有執行權限,顯示爲小寫s

                            否則,顯示爲大寫S

 

 

 

 

 

 

SGID

                   SGID一般用在更改目錄的屬組權限

舉例演示:

[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/   //給用戶的屬組加寫權限

 

[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用戶在目錄中牀架一個文件

 

[fedora@centos6 ~]$ cd /var/tmp/test/

 

[fedora@centos6 test]$ touch a.fedora

[fedora@centos6 test]$ ls -l  //看到fedora用戶在目錄中創建的文件的屬主,屬組都爲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用戶,並在目錄中也創建一個文件

 

[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用在目錄中創建的文件的屬主屬組也是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]$

 

結合上面的步驟演練SGID的效果:

 

 [centos@centos6 test]$ exit

logout

 

[root@centos6 ~]# chmod g+s /var/tmp/test/   //在管理員環境下,爲目錄加上SGID功能

 

[root@centos6 ~]# ls -ld /var/tmp/test/   //查看目錄加上SGID後,權限的變化

drwxrwsr-x. 2 root mygrp 4096 Nov  4 19:40 /var/tmp/test/

 

 [root@centos6 ~]# su - fedora  //再次切換到fedora用戶,並在目錄中再次常見一個文件,                                                                  此時這個文件的屬組不再是用戶本身,而是目錄的屬組

 

[fedora@centos6 ~]$ cd /var/tmp/test/

 

[fedora@centos6 test]$ touch b.fedora

 

[fedora@centos6 test]$ exit

logout

 

[root@centos6 ~]# su - centos   //切換到centos用戶下,並在目錄項創建一個文件,發現                                                                      文件的屬組也變成了目錄的屬組

 

[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]$

 

         任何在此目錄下創建文件的用戶所新建的文件他的屬組不再是用戶的主組或者基本組,而是這個目錄的屬組,這既是SGID

 

         SGID的作用:

         如果有多個用戶同屬於一個組,而且大家彼此的屬組都有這麼一個組,並且對於這個共同的屬組都有寫權限,這樣將來每個用戶所創建的文件彼此都可以修改,因此他能帶來的結果就是每一個人創建的文件,在這個目錄中別人都可以改

         (那有人就說了,搞這麼麻煩幹嘛,我直接讓其他用戶有寫權限不就行了,其實這樣是不可取的,讓其他用戶擁有寫權限,是非常危險的操作,但是作爲普通用戶來講,怎樣將自己的文件共享給別人,讓別人能寫?以爲沒有權限改屬主屬組,那除了修改權限沒有別的辦法,因此作爲管理員來講,爲了使的這一個組內的幾個開發程序員,能夠彼此修改對方的程序文件,我們就用這個方式來做。)

 

         SGID引發的問題,

         這樣的目錄,用戶在這個目錄下可以對其他用戶所創建的文件進行修改,不但能進行修改,還能刪除這個目錄下的所有文件,因爲用戶在該目錄下有寫權限。

         爲了避免用戶在該目錄先能夠任意刪除這個目錄下的文件,就引進了Sticky

Sticky我們稱爲粘滯位。

         什麼是粘滯位?

                   我們可以做一個驗證,就是我們基於別的用戶名,來刪文件,看看能不能刪掉,

 

演示操作:

[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 ~]#

 

(這樣,由於我們可以任意的刪除其他用戶在改目錄下創建的文件,那麼當一個用戶創建一個文件以後,我們將這個文件刪除以後,我們說這個用戶沒有創建文件,因爲我們將這個文件刪除了。

         那爲了避免出現這樣的問題,我們就是用了“Sticky”)

 

演示操作如下:

[root@centos6 ~]# chmod o+t /var/tmp/test/    //我們引入了Sticky是“o+t”對目錄進處理

 

[root@centos6 ~]# ls -ld /var/tmp/test/

drwxrwsr-t. 2 root mygrp 4096 Nov  4 20:24 /var/tmp/test/

 

[root@centos6 ~]# su - fedora  //我們再次切換用戶,按理說fedoracentos兩個用戶和這                                                          個目錄都屬於同一個組,並且這個目錄的屬組有寫權限,那                                                             麼這兩個用戶的在這個目錄中可以執行創建文件刪除文件                                                                 的操作。

 

[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”內容

 

[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功能,目錄中的用戶不能刪                                                                                         除其他用戶在該目錄下創建的文件,但是能夠創建                                                                                    並刪除自己的文件。

rm: cannot remove `b.centos': Operation notpermitted

[fedora@centos6 test]$

 

[fedora@centos6 test]$ rm -f b.fedora    //用戶可以刪除自己創建的文件

[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   //還能創建文件

[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]$

 

總結上面的演示就是:

一般而言,只要某個目錄用t權限,任何人只要有寫權限在這個目錄中,則就能創建文件,修改自己的文件和其他用戶的文件,但是刪除時,只能刪除自己的文件或目錄,不能刪別人的。

 

 

 

 

         功用:當目錄屬組有寫權限,且有SGID權限時,那麼所有屬於此目錄的屬組,且以屬組身份在此目錄中新建文件或目錄時,新文件的屬組不是用戶的基本組,而是此目錄的屬組;

 

         管理文件的SGID權限:

                   chmod  g+|-s FILE.....

 

                   展示位置:屬組的執行權限位

                            如果屬組原本有執行權限,顯示爲小寫s

                            否則,顯示爲大寫S

 

 

 

 

演示舉例說明:

         SGID主要功能:修改目錄的屬組權限上:

 

 

Sticky

         功用:對於屬組或全局可寫的目錄,組內的所有用戶或系統上的所有用戶對存在此目錄中都能創建新文件或刪除所有的已有文件;如果爲此類目錄設置Sticky權限,則每個用戶能創建新文件,且只能刪除自己的文件;

 

         管理文件的Sticky權限:

                   chmod  o+|-t FILE.......

 

         展示位置:其他用戶的執行權限位

                   如果其他用戶原本有執行權限,顯示爲小寫t

                   否則,顯示爲大寫T

 

         系統上的/tmp/var/tmp目錄默認均有Sticky權限;

[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]$

                  

 

管理特殊權限的另一種方式:

        

SUID SGID  STICKY又正好可以組合成一個三位權限,分別代表屬主(u),屬組(g),其他用戶(o);

 

         SUID                   SGID                   STICKY     轉化成八進制對應爲

         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:左側的1表示Sticky權限位

         這也是umask爲什麼有四位,最左側的權限位是代表特殊權限位

         [root@centos6~]# umask

         0022   //而這個最左側的數字0,並不是用7去減的,7-0=7;這個0表示是特殊權限沒有啓動

                            所以我們在使用umask時最左側的特殊權限忽略。

 

 

 

 

facl  (並不關鍵的內容,瞭解即可)

         file  access control  lists文件訪問控制列表

 

         facl是文件的額外賦權機制

         額外的賦權機制可以針對指定的用戶或者指定的組來實現

 

         功能:每一個用戶都沒有辦法去修改任何一個文件的屬主屬組,所以我作爲一個普通用戶來講,我想將自己的文件修改後,讓別人擁有寫權限,讓別人能不能寫,這時我們應該怎麼辦?這時我們除了修改other的權限沒有別的辦法,但是我們如果修改 我們文件的其他用戶的權限,這會非常的危險,因爲我們改了其他用戶可讀,那麼其他用戶都可讀,這危險還不很大,但是我們如果改了文件的其他用戶可執行,則其他用戶都可執行,這時就很危險了,尤其是可寫,那怎麼辦呢?這就加了一個facl

 

getfacl命令:  //查看賦權列表

         getfacl  FILE.....

                   user:USERNAME:MODE    //表示額外用戶的權限(如果我們授權了多個用戶,則這裏的用戶出現多次,如果USERNAME爲空,則表示文件的屬主的權限,)

                   group:GROUPNAME:MODE   //表示額外組的權限(這裏如果GROUPNAME爲空,則表示爲默認屬組的權限)

 

 

setfacl:命令    //設置賦權列表

 

         賦權給用戶:

         setfacl  -m u:USERNAME:MODE  FILE.....    //賦權用戶

         賦權給組:

         setfacl  -m g:GROUPNAME:MODE  FILE.....   //賦權用戶組

 

         撤銷賦權:

         setfacl  -x u:USERNAME  FILE....

         setfacl  -x g:GROUPNAME  FILE.....

 

 

 

 

 

facl的作用在於:

         可以讓每一個用戶修改屬主爲自己文件的權限,但是這種權限不是修改默認的ugo 的權限,而是額外新增了一個權限機制,所以facl是文件的額外賦權機制

 

facl是文件的額外賦權機制:

                  

         額外賦權機制:

         可以針對指定的用戶和組來實現,比如一個普通的用戶,我們可以明確說明,我的文件可以讓其他那個用戶來訪問,但是這裏不該屬主,只是額外的加了一個誰擁有什麼訪問權限的。

                   這表示在原有的ugo之外,另一層讓普通用戶能控制賦權給另外的用戶或組的賦權機制。

 

 

 

 

舉例:

         [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    //發現沒有權限寫入

-bash: /tmp/test.centos: Permission denied

 

 [fedora@centos6~]$ getfacl /tmp/test.centos     //查看用戶的權限

getfacl: Removing leading '/' from absolutepath names

# file: tmp/test.centos

# owner: centos      //屬主

# group: centos                 //屬組

user::rw-                             //屬主的權限,並且能看到沒有額外的其他用戶

group::rw-                           //屬組的權限,並且能看到沒有額外的其他用戶

other::r--                    //其他用戶

 

[fedora@centos6 ~]$ exit

logout

 

[root@centos6 tmp]# su - centos

 

[centos@centos6 ~]$ setfacl -m u:fedora:rw /tmp/test.centos    //使用訪問控制列表的方式                                                                                                                               對指定的用戶加權限

[centos@centos6 ~]$ getfacl /tmp/test.centos      //查看這個文件增加的額外的權限

getfacl: Removing leading '/' from absolutepath names

# file: tmp/test.centos

# owner: centos             //屬主

# group: centos                 //主組

user::rw-                   //屬主的權限

user:fedora:rw-                  //新增加的額外的屬主權限列,屬主是fedora,並且擁有的權限rw

group::rw-     

mask::rw-

other::r--

 

[centos@centos6 ~]$ exit

logout

 

[root@centos6 tmp]# su - fedora

 

[fedora@centos6 ~]$ echo hello > /tmp/test.centos    //就能寫入了

 

[fedora@centos6 ~]$ getfacl /tmp/test.centos     //查看額外權限時,文件寫的是絕對路徑

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 //文件寫的是相對路徑,就沒有相面的那一欄提示

# 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     //被額外賦權的文件,查看詳細信息時,前面的權                                                          限最後面有一個加號“+”這表示額外權限列表已經被添加成功

-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    //爲目錄設置額外的組權限

 

[centos@centos6 ~]$ getfacl /tmp/test.centos    //查看目錄的額外權限

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--

 

[centos@centos6 ~]$

 

 

上面的就是我們的訪問控制列表機制,但是一旦有了訪問控制列表以後,我們的權限應用模型就變了,以前我們說的安全上下文,是一個進程訪問一個文件時,首先檢查這個進程的屬主,是不是文件的屬主,是則運行屬主的權限,否則在檢查進程的屬組是不是文件屬組,是則運行屬組,否則運行其他用戶的權限,

         但是有了訪問控制列表就不同了,當用戶發起的進程訪問一個文件時,首先檢查進程屬主是不是被訪問的文件的屬主,是則運行屬主權限,否則就查看這個文件上有沒有額外的專門定義給這個用戶的發起的這個進程訪問控制列表,如果有,則應用此特定的訪問控制列表的權限。否則在檢查這個進程樹屬組是否是被訪問的文件的屬組,是則運行屬組的權限,否則就檢查此用戶所屬的組有沒有專門的訪問控制列表,如果有則應用這個訪問控制列表的權限,否則應用其他權限。

 

 

上面的舉例演示:

 

         驗證有了訪問控制列表後,安全上下文的順序:

 

[centos@centos6 ~]$ exit

logout

 

[root@centos6 ~]# useradd hadoop //添加一個新用戶,然後再用這個用戶來查看文件驗證                                                                     沒有給hadoop設置訪問控制列表時,能否查看文件的內容

 

[root@centos6 ~]# su - hadoop

 

 [hadoop@centos6 ~]$ getfacl /tmp/test.centos   //查看文件訪問控制列表,沒有對hadoop                                                                                                           設置控制,hadoop根據安全上下文的順                                                                                                          序,對這個文件,執行的是other權限

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      //的確能查看文件內容

hello

 

[hadoop@centos6 ~]$ exit

logout

[root@centos6 ~]# setfacl -m u:hadoop:--- /tmp/test.centos    //hadoop設置訪問控制列表

 

[hadoop@centos6 ~]$ getfacl /tmp/test.centos    //查看文件的訪問控制列表

getfacl: Removing leading '/' from absolutepath names

# file: tmp/test.centos

# owner: centos

# group: centos

user::rw-

user:fedora:rw-

user:hadoop:---         //有了hadoop的訪問控制列

group::rw-

group:mygrp:rw-

mask::rw-

other::r--

 

 [root@centos6~]# su - hadoop

 

[hadoop@centos6 ~]$ cat /tmp/test.centos   //現在的確沒有權限查看文件內容了

cat: /tmp/test.centos: Permission denied

[hadoop@centos6 ~]$


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章