使用者的權限有普通權限、特殊權限檔案的特殊屬性和FACL(檔案通路控制清單),對于普通權限來說首先要了解程序的安全上下文,
程序的安全上下文:
1.判斷程序的所有者是否為想要操作檔案的屬主,如果是,就按照屬主的權限進行授權,如果不是,則轉到第2條
2.判斷程序的所有者是否為想要操作的檔案的屬組中的成員,如果是,就按照屬組的權限進行授權,如果不是,就轉到第3條
3.按照其他使用者的權限進行授權
接下來了解一下權限的構成,
權限的構成:
MODE:(Permission):使用權
r:Readale 可讀
w:Writable 可寫
x: eXecutable 可執行
rw-r--r-- 三個權限為:屬主左三,屬組中三,其他使用者右三
屬主:rw-
屬組:r--
其他使用者:r--
權限辨別三元組
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
rwx在目錄和檔案中的意義雖有不同但大緻一樣 了解一下
目錄:
r:可以使用ls指令獲得其中所有檔案名的清單,不能使用ls -l指令來擷取目錄中檔案的詳細屬性資訊,也不能使用cd指令進入其中,也不能在路徑中引用該目錄
w: 可以修改此目錄下中檔案名或檔案名清單,可以在此目錄中建立、修改或删除檔案名
x:可以使用ls -l指令來擷取其中的檔案的詳細屬性,也可以在路徑中引用該目錄,也可以使用cd指令來進入其中
注意:x是目錄的最基本權限,任何目錄都不必須對使用者開放x權限,否則使用者無法進行任何操作。
檔案:
r:可以檢視或擷取該檔案中的資料
w: 可以修改檔案中的資料
x: 可以将此檔案發起運作為程序
注意:隻有摸個檔案的屬主才能修改檔案的使用權(root除外)
了解完權限的構成,還需要知道如何修改權限,以便我們的操作等
修改檔案的使用權限:
chmod-->change mode:修改檔案的權限位
MODE: 符号權限辨別符
u,g,o,a表示所有權
+,-,=表示授權方式
+:在原有的權限基礎上添加新的權限
-:在原有的權限基礎上去除某些權限
=:不考慮原有的權限,直接将所有權限設定為目标權限
r,w,x表示具體權限的内容
舉個例子: chmod u+rw,g-wx,o=x file 這是為file的屬主添加讀和寫權限,去除屬組的寫和可執行權限,給其他使用者設定可執行權限
chmod ug-x file 這是去除file屬主和屬組的可執行權限
chmod +x file 預設為a添加執行權限(還有r 不管+-=都是所有的都添加)
chmod =w file 預設隻為屬主添加寫權限(不管+-都是隻為屬主添加)
注意:檔案的執行權限對linux的檔案系統來說,非常重要的安全辨別,因為一旦檔案具備執行權限,意味着該檔案可以被發起執行為過程,是以預設情況下檔案都不具備執行權限
如果使用八進制數字辨別法,則每次必須給足所有的權限位,如果給的權限位不完整,檔案系統會自動補足,是将給定的權限放置在右側,左側使用0來補足
chmod 640 file (這裡的640就是上述權限辨別三元組的部分)
chmod --reference=/PATH/TO/SOMEFILE --reference=b a 将a的權限設定和b一樣
選項: -R:将目标目錄中的檔案及子目錄中的檔案統一設定為指定的權限辨別
在上述描述中提到了所有權,這裡講述一下所有權
OWNERSHIP:所有權
屬主:資源掌控的某些特定使用者owner(user) u
屬組:資源掌控的某些特定使用者group g
其他使用者:未曾掌控資源的那些使用者other o
全部使用者:all a
chown:可以修改屬主和屬組
chown OWNER FILE
chown :GROUP FILE
chown OWNER:FILE将目标檔案的屬主改為owner,同時将屬組修改為OWNER的基本組
chown OWNER:GROUP FILE 将目标檔案的屬主和主組修改為OWNER和GROUP
-R:将目标目錄中的檔案及子目錄中的檔案統一設定為指定的所有權
注意:修改ownership操作隻有超級使用者(root)可以完成
chgrp:隻能修改檔案的屬組
install:安裝 複制檔案 為檔案賦予執行權限
-d:建立目錄 相當于mkdir -p
-m:指定目标檔案的權限 預設權限755
-o: 複制檔案的時候直接指定目标檔案的屬主,隻能超級使用者可用(root)
-g:修改組的所有權,設定目标檔案的屬組
注意:install指令不能複制目錄,即其源不能為目錄,如果其源為目錄,則install會進入目錄,一次複制其中的所有非目錄檔案到目标位置
mktemp:
臨時檔案都會建立在/tmp或/ar/tmp目錄中,無需手動删除 系統會第七清除兩個目錄中的檔案
-d 建立臨時目錄
接下來了解一下特殊權限:
SUID SGID STICKY
預設情況下,使用者發起者執行的一個程序,該程序的屬主是其發起者
SUID:
功能作用:當使用者發起執行一個程序時,該程序檔案如果擁有SUID權限的話,那麼此程式發起的程序是其屬主為該程式檔案的屬主,而不是發起者
SUID權限顯示位置:檔案的屬主權限中的執行權限位,如果屬主本來就有執行權限,顯示為s否則顯示S
管理檔案的SUID權限
chmod u+|-s file
SGID:
功能作用:如果某個目錄對于一些目錄有寫權限并且設定了SGID,則所有對此目錄有寫權限的使用者在建立新的檔案或目錄以後,新檔案的屬組不再是建立使用者的基本組,而是繼承了該目錄的屬組
SGID權限顯示的位置:檔案的屬組權限中的執行權限位;如果屬組本來就執行權限,顯示為s,否則顯示為S
管理檔案的SGID權限
chmod g+|-s file
STICKT:粘滞位
如果某個目錄中,有超過一個使用者可以有寫權限,則着多個使用者都可以在該目錄中随意建立、删除和修改檔案名
功能作用:如果為上述類似的目錄設定了STICKY權限,每個使用者仍舊能夠建立和修改檔案名,但每個使用者隻能删除那些屬主為其自身的檔案名
STICKY權限的顯示位置:在檔案權限的其他使用者的執行權限位,如果原來有執行權限,則顯示為t,否則顯示為T
管理檔案的STICKY權限:
chmod o+|-t file
--- 000 0
--t 001 1
-s- 010 2
-st 011 3
s-- 100 4
s-t 101 5
ss- 110 6
sst 111 7
特殊權限的另一種修改方式:将特殊權限對應的八進制數字放置與普通權限八進制數字的前面即可
chmod 1755 DIRECTORY
umask:
權限遮罩碼:在建立檔案或目錄時預設的權限生成标準
root:0022
不考慮特殊權限位
對于新建立的檔案或目錄,不遮擋屬主的任何權限;遮住了屬組的寫權限和其他使用者的寫權限
了解遮罩碼:将遮罩碼的值變為二進制,凡是有1的位置,其權限在建立檔案時,就不設定
預設情況下,檔案的遮罩碼已經有了一個0111,在此基礎之上再次應用umask來遮罩權限
接下來說一下檔案的特殊屬性:
檢視檔案的特殊屬性:
lsattr
修改檔案的特殊屬性:chattr
mode:會使用+-=的方式來設定
整個chattr指令最關鍵的設定就是mode部分,[aAcCdDijsStTu]都是所需要的屬性
+:在原有屬性設定的基礎上添加新的屬性
-:從原有屬性設定中移除指定的屬性
=:不考慮原有的屬性設定,直接将檔案的屬性更新為指定的屬性内容
a: 設定這個屬性的檔案,其内容不能被更改和删除,隻能以追加的方式想檔案寫資料,多數的伺服器日志類檔案會設定此屬性
A: 檔案的通路時間戳;IO瓶頸,設定A屬性可以使得檔案在被通路時不更改檔案的通路時間戳,進而可以有效地防止IO瓶頸
c:設定檔案是否自動壓縮後在進行存儲
C:設定檔案是否開啟“寫實複制”屬性
d:設定檔案在使用dump進行備份的時候,不會稱為備份目标
D:設定檔案在檔案系統中的異步寫操作
i: 設定檔案不能被删除、修改、設定連結關系
s: 設定檔案的保密性删除一旦設定s屬性的檔案被删除,其對應儲存設備中的使用空間會被一并删除
u:跟s屬性相反,如果這樣的屬性被删除,則存儲于儲存設備的資料會被留存
-R:遞歸的指定目錄中的所有檔案和子目錄的屬性
接下來說一下FACL
檔案的額外賦權機制:在原有的u,g,o權限位之外,讓普通使用者能夠控制權限賦予另外的使用者群組的一種賦權機制一般在centos或rhe17版本以後的發行版本中,才逐漸成熟
與FACL有關的指令:
getfacl:檢視檔案的facl設定
user:USERNNAME:MODE
group:GROUPNAME:MODE
other::mode
setfacl:set file access control lists
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
acl_spec:指定的通路控制清單
u:USERNAME:MODE
g:GROUPNAME:MODE
MODE:一般使用符号權限辨別法
為使用者賦予額外權限
setfacl -m u:USERNAME:MODE FILE...
為組賦予額外權限
setfacl -m g:GROUPNAME:MODE file
撤銷為使用者賦予的額外權限
setfacl -x u:USERNAME
撤銷為組富裕的額外權限
setfacl -x g:GROUPNAME
注意:如果設定了facl之後在修改目标檔案使用權限,那麼facl中設定的條目就可能會受到影響而導緻與要求不符,是以,如果真需要設定facl 就要在已經設定目标檔案的使用權限以後再設定