您好,登錄后才能下訂單哦!
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這個程序,發起為進程時,由于passwd有SUID功能,那么運行后,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 //我們再次切換用戶,按理說fedora與centos兩個用戶和這 個目錄都屬于同一個組,并且這個目錄的屬組有寫權限,那 么這兩個用戶的在這個目錄中可以執行創建文件刪除文件 的操作。
[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的作用在于:
可以讓每一個用戶修改屬主為自己文件的權限,但是這種權限不是修改默認的u,g,o 的權限,而是額外新增了一個權限機制,所以facl是文件的額外賦權機制
facl是文件的額外賦權機制:
額外賦權機制:
可以針對指定的用戶和組來實現,比如一個普通的用戶,我們可以明確說明,我的文件可以讓其他那個用戶來訪問,但是這里不該屬主,只是額外的加了一個誰擁有什么訪問權限的。
這表示在原有的u,g,o之外,另一層讓普通用戶能控制賦權給另外的用戶或組的賦權機制。
舉例:
[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 ~]$
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。