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

什麼是Linux文件系統權限?

在Linux中的每一個文件或目錄都包含有訪問權限,這些訪問權限決定了誰能訪問和如何訪問這些文件和目錄。

wKioL1ei3azCaF2ZAADE04Yn9RM128.png

wKiom1ei5S6wmdqyAABoBt3l_ZM867.png


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    讀寫執行權限(所有權限)

這些權限,是保存在文件的元數據當中


控制文件的權限


wKiom1ei6CSiipPGAAAO8yU8IHY366.png


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


chmod:修改文件權限

wKiom1ei6K7RAD6vAAAb-5NlvJo106.png


操作三類用戶的權限:使用8進制形式

      chmod [-R] OCTAL-MODE(8進制)file ...

      對鏈接文件無效,左側以0補齊

EX.修改屬主爲讀寫,屬組爲只讀,其他沒有權限

wKiom1ei6evgMHjxAAAV4OOmaQc355.png


操作指定類別用戶的權限:使用u,g,o,a來賦權,用 = 或者 +/- 來進行

     u:屬主

     g:屬組

     o:其他

     a:所有


EX.使用 = 控制權限,修改權限爲屬主讀寫,屬組讀寫,其他只讀。

wKiom1ei61uAP1JtAAANnhsx95k685.png


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

wKioL1ei61yCZp99AAARecYzuzo231.png


chmod 命令還能參照其他文件的權限來進行設置權限

EX.參考文件b的權限來修改文件a的權限

wKioL1ei7HTSIjlWAAAabPaRBPM177.png


umask值


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

wKiom1ei6CSiipPGAAAO8yU8IHY366.png

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

wKiom1ei7u_yzCIVAAAMYwIJvCs382.png


那麼默認權限是哪裏控制的?

答:這個是由umask來控制的


直接輸入umask可以查看到用戶的umask值

wKiom1ei8Oix7rtFAAAG3YJ8fgE828.png

wKioL1ei8OigqzVgAAAGgiGvrG8640.png

我們可以看到,管理員和普通用戶的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

wKioL1ejGDqDoFfwAAALhR30FYE210.png

以此圖爲例,777-022=755=rwxrw-rw- ,所以目錄的文件的情況也是用777-umask值可以計算促回來


umask 本質:屏蔽掉最大權限相應的位,從而得出默認的權限


如果需要臨時設置umask值,可以輸出 umask=xxx


如果需要設置永久的umask值可以進入家目錄下 ~/.bashrc 或者.bash_profile 裏面添加 umask xxx


如果需要設置全局的umask值,可以進入/etc/profile或者/ete/brshrc裏面設置,但是並不建議這樣做

wKioL1ejGjminK5vAAA3NRms65c408.png

從這個圖我們也可以瞭解到,爲什麼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):當一個用戶去運行該程序的時候,該用戶繼承所有者的權限。

wKiom1ejIO6D2zhMAAAKc6u_jkg980.png

可以看見一個程序有的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

wKioL1ejJUnAQr3iAAArNW2B7dg412.png

wKiom1ejJYqx4nQcAAATx0hIb2o780.png



SGID 的作用  

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

wKiom1ejKX_jDwUvAAANCZmY6c0069.png

當文件擁有SIG的權限的時候,在group位會有一個s,替代了原來的x,代表SGID的權限已經添加進去,且一般情況下我們看到的是黃底黑字的文件的信息


SGID權限設定

chmod  2XXX FILE...   2表示GUID

chmodg + 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位作用在文件上面的話沒有用)

wKiom1ejMYXjd8yuAAAUOM84Icg288.png

當目錄擁有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權限,如下圖所示。

wKiom1ejOUXSzRIaAAA3b6Z8i-U357.png

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

wKiom1ejOI7Ra9WMAABXD90m1zo366.png

通過上圖我們可以發現,給與wan用戶rw的ACL權限以後,用戶wan就可以對a文件進行讀寫的操作,但是之後當我們刪除掉ACL的權限以後,wan用戶就沒有讀寫a文件的權限了,這就是ACL的作用。


通過上圖,我們還能發現ACL中有一個mask的權限

這個權限的作用是:

mask影響除所有者和other的之外的人和組的最大權限

mask需要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission)

用戶或組的設置必須存在於mask權限設定範圍內纔會生效。


下面我們來演示一下mask的用法:


首先,給用戶wan增加rwx的權限

wKiom1ejPI2C_DCsAAA2LGc0nHc348.png

通過上圖,我們可以看見:mask的值是rwx,跟用戶wan的權限是一樣的,

還有一點不知道大家留意到沒有,group組的權限本來是---,但是顯示文件的時候,現在的卻是rwx的權限,這是怎麼回事呢?下面再給大家繼續演示。

wKioL1ejPZriUu-HAAA6KIABt40662.png

這裏設置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文件系統的話,文件權限就不一定能夠支持了。


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