歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 8.3_Linux文件系統權限和特殊權限淺析

8.3_Linux文件系統權限和特殊權限淺析

日期:2017/3/3 10:57:03   编辑:Linux技術
什麼是Linux文件系統權限?
在Linux中的每一個文件或目錄都包含有訪問權限,這些訪問權限決定了誰能訪問和如何訪問這些文件和目錄。






Linux文件系統權限的分類
Linux中的權限分為:read(讀)、write(寫)、execut(執行)三種權限
文件和目錄表示的權限也各有不同
權限對於文件的意義:
r: 可使用文件查看類工具獲取其內容
w: 可修改內容,可破壞內容,但不能刪除文件本身
x: 針對二進制可執行的程序或腳本,可以把此文件提請內核啟動為一個進程,普通文件不需要執行權限
權限對於目錄的意義:
r: 可以使用ls命令查看目錄內容的文件信息
w: 可以創建、刪除文件
x: 可以使用ls -l命令來查看目錄內容的文件信息,並且可以使用cd命令切換此目錄為工作目錄
特別符號大寫X
假如設置權限的時候,類似於 chmod -R a=rwX DIR/ 中大X的意義
於文件的意義:
大X執行權限,如果像例子那樣子遞歸增加所有目錄和文件的權限,因為本來文件之間並不需要增加小x的權限,用X的話,本來沒有x權限的文件在增加權限以後也不會有x權限,只有那些本來就已經有x權限的文件,在用大X以後依然會給文件加上x權限。
於目錄的意義:
對於目錄來說,X和x的意義是一樣的,目錄需要x權限當然用大X的時候也會把權限一並加上。
注意:
X:只是給目錄x權限,不給文件x權限,不給文件x權限,是因為對於安全角度的考慮!
權限的八進制數字意義
用戶的不擁有某位權限,則使用-占位
--- 000 0 沒有任何權限
--x 001 1 只有執行權限
-w- 010 2 只有寫權限
-wx 011 3 寫和執行權限
r-- 100 4 只讀權限
r-x 101 5 讀和執行權限
rw- 110 6 讀寫權限
rwx 111 7 讀寫執行權限(所有權限)
這些權限,是保存在文件的元數據當中
控制文件的權限



當我們創建一個文件的時候,假如我們要修改該文件的權限,那麼,此時我們將會用到chmod的命令·
chmod:修改文件權限



操作三類用戶的權限:使用8進制形式
chmod [-R] OCTAL-MODE(8進制)file ...
對鏈接文件無效,左側以0補齊
EX.修改屬主為讀寫,屬組為只讀,其他沒有權限



操作指定類別用戶的權限:使用u,g,o,a來賦權,用 = 或者 +/- 來進行
u:屬主
g:屬組
o:其他
a:所有
EX.使用 = 控制權限,修改權限為屬主讀寫,屬組讀寫,其他只讀。



EX.使用 +/- 控制權限,修改權限為屬組去掉寫權限,其他去掉讀權限。



chmod 命令還能參照其他文件的權限來進行設置權限
EX.參考文件b的權限來修改文件a的權限



umask值
在上面的實驗,我們發現,我們創建一個文件的時候是有對應的默認的權限的



要注意的是管理員的默認權限和普通用戶的默認權限是不同的



那麼默認權限是哪裡控制的?答:這個是由umask來控制的
直接輸入umask可以查看到用戶的umask值






我們可以看到,管理員和普通用戶的umask的默認值是不同,這個就是為什麼管理員創建文件和普通用戶創建文件的權限不同的原因。
umask的這些數值的作用:通過umask值和用文件(目錄)默認值的計算,可以得出用戶的文件(目錄)初始的權限制。
關於默認權限值,這裡有一個計算的小公式
umask+默認權限值
默認權限值 = 文件權限 666 / 目錄權限 777
文件:666-umask=有奇數+1,偶數保留目錄:777-umask
新建FILE權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
為什麼文件的權限是666而不是777?rwx加起來應該是7,這個是由於安全考慮,因為到某些文件默認就有執行權限的話,意味著如果有心的人隨便去執行某些文件話,會引起系統出問題。而計算的時候,遇到奇數位置就需要+1,就是因為有的情況下計算出來的結果,會使權限帶有x的執行權限,為了避免這個情況,所以+1以後得出來的結果永遠是偶數,就可以避免這個情況了。
所以上圖,root的umask是022,用666-022=644=rw-r--r--,所以默認創建的文件就是這個權限
新建DIR權限: 777-umask



以此圖為例,777-022=755=rwxrw-rw- ,所以目錄的文件的情況也是用777-umask值可以計算促回來
umask 本質:屏蔽掉最大權限相應的位,從而得出默認的權限
如果需要臨時設置umask值,可以輸出 umask=xxx
如果需要設置永久的umask值可以進入家目錄下 ~/.bashrc 或者.bash_profile 裡面添加 umask xxx
如果需要設置全局的umask值,可以進入/etc/profile或者/ete/brshrc裡面設置,但是並不建議這樣做



從這個圖我們也可以了解到,為什麼root賬號的umask值是022,而普通賬號的umask是022
設置umask值表示的方式可以有以下兩種
(1)umask數值設置只能是八進制的數字,即0-7
(2)可以使用 umask u=rw,g=r,o=r 這樣方式來設置
其他umask的使用小技巧
[root@centos ~]# umask -S #顯示對應權限,如果是文件的話,則減去x的權限即可
u=rwx,g=rx,o=rx
umask -p >> .bashrc 或者 .bash_profile #此命令輸出直接追加到環境變量文件裡面就可以偷懶進去修改了,即輸出就可以直接被調用
Linux文件系統的特殊權限
三種特殊的權限:SUID SGID STICKY
執行特殊的權限前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
(2) 啟動為進程之後,其進程的屬主為發起者;進程的屬組為發起者所屬的組
(3) 進程訪問文件時的權限,取決於進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬於文件屬組;則應用文件屬組權限
(c) 應用文件“其它”權限
這三個特殊權限也是能用八進制來表示的,並且作用在不同的位上,如下:
SUID 4 SGID 2 STICKY 1 4+2+1=7
user group other
SUID(s):當一個用戶去運行該程序的時候,該用戶繼承所有者的權限。



可以看見一個程序有的user位有一個s,替代原來的x,代表SUID的權限已經添加進去,且一般情況下我們看到的是紅底白字的文件的信息
SUID權限設定
chmod 4XXX FILE, 4表示SUID
chmodu+sFILE...
chmodu-s FILE...
注意:SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限
S:屬主沒有x權限
注意:SUID只能應用在二進制程序裡面,不能作用在目錄上面,此命令不能隨便加,太危險。
UID的作用:
當其他用戶執行SUID權限的二進制程序的時候,在ps aux裡面顯示用戶,也會是SUID的二進制程序的屬於,大部分情況下面即是root






SGID 的作用
(1)如果應用在二進制程序裡面,啟動為進程之後,其進程的屬主為原程序文件的屬組,這種情況跟SUID功能類似



當文件擁有SIG的權限的時候,在group位會有一個s,替代了原來的x,代表SGID的權限已經添加進去,且一般情況下我們看到的是黃底黑字的文件的信息
SGID權限設定chmod 2XXX FILE... 2表示GUIDchmodg + sFILE...chmodg - sFILE...
(2)如果應用在目錄裡面,所有用戶在此目錄下面創建的文件(包括子目錄)的時候的屬組跟目錄的屬組一致。此作用通常用於創建一個協作目錄。
SGID權限設定
chmodg + sDIR...
chmodg -s DIR...
注意:SGID: group,占據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限
注意:root賬號和root組的概率是不同的,root組也只是屬於一個普通的組這個意義跟windows操作系統裡面的administrators組的意義是不一樣的
STICKY 粘滯位的作用
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權,在目錄設置Sticky位,只有文件的所有者或root可以刪除該文件。(注意STICKY位作用在文件上面的話沒有用)



當目錄擁有STICKY的權限的時候,在other位會有一個t,替代了原來的x,代表STICKY的權限已經添加進去,且一般情況下我們看到的是綠底黑字的文件的信息
chmod 1XXX FILE, 1表示STICKY
chmod o+t
注意:Sticky: other,占據other的執行權限位
t: other擁有x權限
T:other沒有x權限
以上SUID,SGID,和STICKY都必須要配合有x的權限的。
刪除這3個的時候必須用 chmod u-s,g-s,o-t FILE 這樣的命令,不能用0777這樣等的命令修改。
Linux文件系統的特殊權限之ACL
什麼是ACL?
ACL:Access Control List,實現靈活的權限管理,除了文件的所有者,所屬組和其它人,ACL的特別之處就是可以對單一用戶實現對文件和目錄的權限控制。
注意:
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt
具有acl權限的文件會有一個+,我們可以用getfacl FILE的命令去查看該文件的ACL權限,如下圖所示。



下面我們給與本來沒有對a文件任何操作的wan用戶rw的ACL的權限



通過上圖我們可以發現,給與wan用戶rw的ACL權限以後,用戶wan就可以對a文件進行讀寫的操作,但是之後當我們刪除掉ACL的權限以後,wan用戶就沒有讀寫a文件的權限了,這就是ACL的作用。
通過上圖,我們還能發現ACL中有一個mask的權限
這個權限的作用是:
mask影響除所有者和other的之外的人和組的最大權限mask需要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission)用戶或組的設置必須存在於mask權限設定范圍內才會生效。
下面我們來演示一下mask的用法:
首先,給用戶wan增加rwx的權限

通過上圖,我們可以看見:mask的值是rwx,跟用戶wan的權限是一樣的,還有一點不知道大家留意到沒有,group組的權限本來是---,但是顯示文件的時候,現在的卻是rwx的權限,這是怎麼回事呢?下面再給大家繼續演示。

這裡設置mask的值為r,此時觀察a文件的組的權限變成了r--,用戶wan本來的後面也多了一個#effective:r--的字樣,用wan用戶向a文件裡面寫入數據,發現此時數據寫不進去。通過此實驗我們可以發現,mask的值可以限制本來用戶的最大權限,而且文件上面現在的屬組的權限,在增加ACL以後,顯示出來的這個值,實際上是mask的值。要注意的是mask值的修改只影響除所有者和other的之外的人和組的最大權限。
注意,有ACL的情況下面,更改(組group)的權限,實際上就是更改mask的權限,實際的(組group)的權限不受影響,但是不作用。
setfacl 的常用選項getfacl file |directory 查看ACL的信息setfacl -m mask::rx file 使用mask值限制成為rx的權限setfacl -m u:USERNAME:rw FILE 增加用戶的rw的ACL權限
setfacl -x u:USERNAME FILE | DIR 刪除用戶的ACL權限
setfacl -b FILE 徹底清空所有ACL權限
setfacl -M FILE | DIR 以指定格式導入ACL配置
setfacl -Rm g:sales:rwX directory 遞歸增加目錄下面組group的ACL權限
setfacl -m g:salesgroup:rw file| directory 增加組group的ACL權限
setfacl -m d:u:USERNAME:rx directory 設置用戶對該目錄下面創建的文件有遞歸的rx的權限
(setfacl -m d:u:wang:rx directory 這個裡面的d選項,就是影響以後在該文件夾下面創建文件的時候默認也帶有原來ACL的權限)
setfacl -k dir 清除默認acl權限
setfacl -X file.acl directory
getfacl file1 | setfacl --set-file=-file2 復制file1的acl權限給file2
(--set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以)如: setfacl --set u::rw,u:wang:rw,g::r,o::- file1
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
如何備份和恢復ACL的權限
備份:getfacl -R * 目錄/路徑/* > /root/acl.bak (備份到指定文件裡面)
恢復:setfacl -R --set-file=/root/acl.bak *
最後說明:以上說了幾種權限,這裡給大家說話一下,權限只是針對文件系統,假如文件系統換成諸如WINDOWS操作系統裡面的vfat文件系統的話,文件權限就不一定能夠支持了。
本文出自 “~微風~” 博客,請務必保留此出處http://weifeng8.blog.51cto.com/1957995/1834502
Copyright © Linux教程網 All Rights Reserved