天天看點

檔案屬性權限及其權限設定

1. linux的系統管理者很重要的任務就是管理自己伺服器的檔案,對于權限設定等級森嚴的linux檔案系統,檔案系統的通路權限管理自然也是linux管理者必不可少的一項技能。

在linux中檔案的基本權限中:被分為三大項:檔案擁有者,檔案擁有組,其他人。

每一項中,用三位八進制的數字來代表檔案是否可讀,是否可寫,是否可執行。并根據使用者不同可以設定不同的umask值,來屏蔽檔案的權限,umask值位數等于檔案的權限位數,當umask的值為1,表示該位的權限就應該屏蔽掉。

後來在使用過程中發現,除了上面的幾種分類之外,往往會出現第四種,第五種人,比如雖然是同一個組,但是權限卻不能要求一樣,或者後一個屬于其他人的分組的一個人權限卻要求更大,還有就是比如linux的密碼檔案,對于系統中的密碼檔案對于普通使用者是不應該可見或更改的,但是在系統某些普通使用者登入時又必須通路該檔案,于是便出現了,檔案的特殊權限以及檔案的通路控制acl。

2. umask工作原理及其配置:

umask是從最大權限中屏蔽掉相應的權限位,進而得到相應的權限。

對于每個使用者都有其預設的umask值的設定,對于root,umask值較大,預設022,其他人umask較小,因為root權限較大,umask值越大,屏蔽掉的權限也越多,預設建立的檔案權限也就越小,對于系統來說,檔案系統權限越小,相對來說也就是更高的安全。umask計算時可以用下面的方法計算:

預設權限=最大權限位 – umask屏蔽位。

上面的計算是目錄時,最大權限是777,檔案時最大權限是666,然後與umask位做差運算,如果是檔案則結果就是檔案的權限,如果是目錄時則要看每一位的數值是奇數還是偶數,如果是奇數就需要該位上加一,偶數位則不變。

示例:

  有上面的檔案可知f4.txt檔案權限位中(第一個-表示是檔案類型,不屬于檔案權限位),每三個位表示一端,每一段中又分别是r,w,x三中權限,-表示沒有該權限位被屏蔽掉了。每一位若用二進制數字表示的話r(100)表示4,w(010)表示2,x(001)表示1,檔案最大umask權限預設是666是因為預設屏蔽掉x權限,表示執行的x權限對于系統來說有安全隐患,是以預設屏蔽掉了。

         umask值檢視與設定:

上面的三種檢視方法當中,第一種沒有加參數,可以直接顯示umask的值,第二種加了-p選項後在umask值前面多了umask字樣,可以用來編寫腳本時使用,比如要把umask的值改變需要改變配置檔案每一個使用者的初始化配置檔案~/.bashrc當中都有有關umask的值的設定,在/etc/bashrc下面有全局設定,在配置檔案的末尾直接寫:umask  0147 便将umask值修改為0111了

umask值計算示例:

如将umask的值改為0147了此時

         目錄:777-147=630  目錄值算出多少就是多少

         檔案:666-147=52(-1)  結果當中有奇數有偶數奇數加一偶數不變(加一是為了屏蔽掉執行權限)結果為620

測試結果如下

可知,結果與計算相符,計算正确

注意:

檔案權限是需要和檔案系統關聯的,假如将fat檔案系統格式化的分區,該分區将不支援檔案系統權限的,比如用fat32的優盤挂載至檔案系統,通過lsblk列出塊裝置,df –t 檢視檔案系統确認分區格式和挂載點,修改檔案權限,切至普通使用者就會發現檔案權限修改使沒有生效的

3. 檔案系統的特殊權限:suid,sgid,sticky

三種檔案系統權限的都是檔案系統權限的擴充,分别簡寫為s,s,t。在通過ls  -l檢視檔案時第一位就是檔案的特殊權限三個字母分别對應于原來的rwx三位,數值也是4,2,1

三種權限的含義:

suid:對使用者有效,并且需要是二進制的可執行檔案,對于普通檔案和腳本檔案無效,當使用者執行具有suid的可執行檔案時,該使用者将繼承擁有該程式擁有者的權限執行該程式(可執行檔案的運作身份是以發起該程序的使用者身份的)

如:

通過給/usr/bin/vim添加suid權限,普通使用者可以編輯對于任何使用者都不能檢視或編輯的shadow檔案,最後給vim減去suid權限。

sgid:類似于suid,目标也是針對可執行的二進制檔案有效,對擁有sgid權限的程式,可以擁有可執行檔案的組内的權限,使用較少,用法與suid類似,此處不在贅述

sgid作用在目錄上的特殊功能:當對目錄擁有sgid位時,該目錄内建立的檔案或目錄的所屬組自動內建該目錄的所屬組

示例:在添加了sgid的dir目錄中,其他使用者建立的目錄和檔案都會變成jack所屬組

sticky:又叫粘滞位,該位在

普通檔案的sticky位會被linux核心忽略,目錄的sticky位表示這個目錄裡的檔案隻能被owner和root删除 。粘滞位出現執行許可的位置上,用t表示。但是該目錄下的目錄不繼承該權限,要再設定才可使用。   

示例:tmp目錄

那麼原來的執行标志x到哪裡去了呢? 系統是這樣規定的, 假如本來在該位上有x, 則這些特别标志 (suid, sgid, sticky) 顯示為小寫字母 (s, s, t).

 否則, 顯示為大寫字母 (s, s, t) 。    

chattr:在檔案系統的層面為檔案添加屬性,保護特殊檔案,防止誤操作,在系統中root可以把本已對任何人都沒有權限的檔案,執行操作

在作業系統層面上,檔案的屬性有:

a:讓檔案或目錄僅供附加用途;

b:不更新檔案或目錄的最後存取時間;

i:不得任意更動檔案或目錄;

u:預防意外删除。

檔案通路控制清單acl(access controllist,acl)對檔案權限進行精确比對,包括組和使用者,都可以進行比對:

選項:

-b,--remove-all:删除所有擴充的acl規則,基本的acl規則(所有者,群組,其他)将被保留。

-m給檔案添加acl規則

-m 根據規定好的acl格式的檔案(存放acl規則的檔案),為需要添加acl的檔案添加acl

-x 給檔案移除規則

-x 類似于-m也是根據檔案移除acl權限

-m和-x後邊跟以acl規則。多條acl規則以逗号(,)隔開。選項-m和-x用來從檔案或标準輸入讀取acl規則。選項--set和--set-file用來設定檔案或目錄的acl規則,先前的設定将被覆寫。 選項-m(--modify)和-m(--modify-file)選項修改檔案或目錄的acl規則。 選項-x(--remove)和-x(--remove-file)選項删除acl規則。

當使用-m,-x選項從檔案中讀取規則時,setfacl接受getfacl指令輸出的格式。每行至少一條規則,以#開始的行将被視為注釋。 當在不支援acls的檔案系統上使用setfacl指令時,setfacl将修改檔案權限位。如果acl規則并不完全比對檔案權限位,setfacl将會修改檔案權限位使其盡可能的反應acl規則,并會向standard error發送錯誤消息,以大于0的狀态傳回

一般示例:

前面三個以#開頭的定義了檔案名,file owner和group。

user::rw- 定義了acl_user_obj, 說明file owner擁有read and write permission

user:jack:rwx 定義了acl_user,這樣使用者jack就擁有了對檔案的讀寫執行權限,實作了我們一開始要達到的目的

group::rw- 定義了acl_group_obj,說明檔案的group擁有read and write permission group:dev:r-- 定義了acl_group,使得dev組擁有了對檔案的read permission mask::rw- 定義了acl_mask的權限為read and write other::r-- 定義了acl_other的權限為read