(一)Red Hat Linux 文件權限
Linux系統中不僅是對用戶與組根據UID,GID進行了管理,還對Linux系統中的文件,按照用戶與組進行分類,針對不同的群體進行了權限管理,用他來確定誰能通過何種方式對文件和目錄進行訪問和操作。
一、概念
身份:一個用戶對於一個文件或者目錄而言,具有的身份。
(1)文件的權限針對三類對象進行定義
owner 屬主,縮寫u
group 屬組,縮寫g
other 其他,縮寫o
root用戶是超級管理員,但root組是一個普通組。
(2)每個文件針對每類訪問者定義了三種主要權限
r:Read 可讀--能夠讀取文件或者目錄內容的權限
w:Write 可寫--能夠修改文件或者目錄的內容
x:eXecute 可執行
針對文件而言,x叫可執行;
針對目錄而言,x是否能夠成為一個用戶的工作目錄
Tips:
X:針對目錄加執行權限,文件不加執行權限(因文件具備執行權限有安全隱患)
root賬戶不受文件權限的讀寫限制,執行權限受限制
查看示例:
Tips:解讀-rw-r--r--
輸出結果的第一個字段就是描述文件和目錄權限的編碼。這個字段的第一個字符代表了對象的類型:
- 代表文件
d 代表目錄
I 代表鏈接
c 代表字符型設備
b 代表塊設備
n 代表網絡設備
后面的有3組三字符的編碼,分別是對應的owner、group、other組,rwx對應的權限類型在上面已經給出。
Tips:文件權限在對於文件和目錄時具有不同的含義
文件權限:
r(read):可讀取此文件的實際內容,如讀取文本文件的文字內容;
w(write):可以編輯、新增或是修改文件的內容(不包含刪除文件);
x(execute):該文件具有可以被系統執行的權限;
文件夾權限:
r:表示具有讀取目錄結構列表的權限,當你具有一個目錄的r權限時,表示你可以查詢到該目錄下的文件名數據
w:表示具有改變目錄結構的權限,包括新建文件與目錄、刪除文件與目錄、重命名文件及目錄、移動文件及目錄位置
x:代表用戶能否進入該目錄成為工作目錄
利用一個示例進行說明:
如前所述:文件/etc/fstab的other組權限為r--,他的屬主為root,屬組為root。即當將使用者更換為user10時(此時他就是other身份),此時user10的權限就是r--(只可讀)
此時user10可以讀取/etc/fstab,但是若對文件進行修改時,當退出保存時,會報出以下錯誤,代表user10沒有/etc/fstab。同理,若該文件是個可執行文件(如.sh),user10也不能對他執行。
對於目錄權限的分析:
可知當使用用戶user10,具備的權限是r(可讀)和x(可執行)
當一個用戶針對一個目錄具備r權限的時候,是能夠查看到該目錄下的內容的,但只限一系列文件名以及目錄名稱。若目錄r權限去掉,則無法讀取這個目錄下的文件名和目錄名。
為other組加回r權限,而刪去x權限,此時的user10連進入目錄都做不到了(修改權限的方法在下面繼續探討)
Tips:總結
只要你想一個用戶針對一個目錄可訪問:具備讀取r和執行x權限是必要的,單純的r和單純的w都是沒有任何意義的。
而針對目錄的w(寫入)很簡單,即是否能在該目錄下創建或者刪除文件。
所以,針對目錄的權限設置,存在以下3種情況:
<1> r-x
<2> rwx
<3> ---
以下這些情況基本不存在:
r-- :僅能讀取到目錄中的文件名,不能訪問目錄
-w- : 連目錄都訪問不到,寫權限沒有意義
--x : 只能cd進入訪問目錄,不能讀寫
rw- : 連目錄都訪問不到,讀寫權限沒有意義
-wx :只能訪問目錄不能讀取目錄內容,寫權限沒有意義
對於文件而言的權限設置,一般存在以下幾種:
r-- 可以僅僅讀取
rw- 可以讀寫
rwx 可讀可寫可執行
--- 什么權限都沒有
r-x 可讀可執行
(3)使用數字對權限的表示
可以將rwx分別對應一個三位數的二進制,當擁有此權限時,將該位置的數字置為1,否則為0。
因此 r=4 w=2 x=1 而每種身份各自的權限是各自三個權限數字的累加。
示例如下:
一、權限修改
1、修改權限
命令:chmod 修改權限 要修改權限的文件或目錄
A、記號法
Tips:
u:擁有者 g:所屬組 o:其他人
=:直接賦予權限
+:在原基礎上加權限
-:在原基礎上減權限
B、數字法
Tips:
數字表示權限的方式如前所述。
擁有者(u)的權限:rwx=4+2+1=7
所屬組的權限(g):r-x=4+1=5
其他人的權限(o):-wx=2+1=3
2、身份修改
A、修改所屬者:chown
命令:chown 要修改的所屬者 要修改的文件或目錄
B、修改所屬組:chgrp
命令:chgrp 要修改的所屬組 要修改的文件或目錄
Tips:使用命令修改所屬者或所屬組為user10后,管理員(root)還是可以對該目錄進行操作。所以root用戶擁有最高的權限,也可以看做無論怎么更改,root擁有系統上所有文件的所有權限。
二、默認權限
創建目錄的默認權限為755,創建文件的默認權限為644
決定默認權限的是一個叫umask(反掩碼)的默認屬性,root用戶的umask的值默認為0022
一個目錄的創建權限等於:滿權限(777)-umask值=777-022=755
一個文件的創建權限等於:滿權限(666)-umask值=666-022=644
Tips:root用戶和普通用戶的umask值不一樣的。(可以查看/etc/profile文件)
Tips:修改umask值
臨時修改:直接使用命令--umask 修改后的值
永久修改:編輯配置文件/etc/profile --vim /etc/profile,修改的位置如下圖,修改后需要source /etc/profile之后永久生效。
三、特殊權限
(1)SUID
作為一個普通用戶,是否可以自己更改自己的密碼呢?答案是可以的。
Linux系統的所有用戶名和密碼均存放在文件/etc/shadow中。修改一個用戶的密碼,其實就是更改配置文件 /etc/shadow
由上圖可知,該文件任何人均沒有修改的權限,即便是root用戶。
但是為什么普通用戶user40卻能執行passwd命令對自己的密碼進行更改呢?
在linux系統中,當執行一個命令時,其實就是執行在/usr目錄中的一個二進制可執行文件,可以使用命令which來定位到某個命令對應的二進制可執行文件(如下圖所示)
可以看到,命令passwd的二進制可執行文件的所屬者權限中,執行權限的位置上從x變成了s,也就是我們所說的GUID。
普通文件:rwx 帶SUID的文件:rws
SUID:當一個s權限出現在所屬者的x位上
作用: 當一個普通用戶user40去執行一個帶有SUID的二進制文件 (passwd),那么這個用戶(test1)在執行過程中,會暫時獲得獲取到這個二進制文件(passwd)的擁有者(root)的權限。后續操作比如修改文件(passwd) 這個文件的時候,會拿着(root)這個擁有者的身份去執行,這個操作僅僅對二進制文件生效。
原理:普通用戶執行passwd→/etc/shadow→root身份去執行
Tips:
如果是rwS,則本身文件是沒執行權限的,僅僅獲得了SUID功能而已,SGID同樣適用。
操作命令:chmod u+s filename/directoryname
(2)SGID
與SUID同理,當一個s權限出現在屬組的x位上時,為SGID
A、針對二進制文件:文件執行過程中獲取文件屬組的權限。
B、針對目錄:默認情況下,我們新建一個文件或目錄的時候,它的屬組是這個用戶的初始組。
加上SGID之后,其下新建的目錄及文件會繼承該目錄的屬組(不繼承屬主)。
操作命令:chmod g+s filename/directoryname
(3)sticky(粘滯位)
sticky bit:僅對目錄生效,若該目錄其他人(other)的執行權限出現了t,那么該目錄下的文件或目錄,僅文件所有者及root用戶能刪除。
操作命令:chmod o+t filename/directoryname
通過目錄可以看出里面的文件f3和f5的所屬者分別對應root和user10。此時如果使用user20對這兩個文件進行刪除操作,會提示因沒有權限而被拒絕。
Tips:
超級權限數值法:suid 4XXX / sgid 2XXX / sticky bit 1XXX
(4)寫保護特殊權限:i和a
操作方法:
修改:chattr +i/+a filename
列出:lsattr filename
+i:硬寫保護,只能讀不能寫,不能刪除
加了硬寫保護后,不能刪除,不能通過重定向修改文件。
也不能用vim直接修改
+a:軟寫保護,只能讀不能寫,不能刪除原有內容,但是能通過重定向追加更新內容
可以通過重定向的方式(echo)修改文件
(5)給特定用戶設置對應的權限--ACL
當需要給不同用戶設置對應不同的文件(目錄)權限時,可以通過設置文件訪問控制列表,即ACL(Access Control List)規則來實現。
查看acl:getfacl
設置acl:setfacl
A、通過getfacl獲取文件(目錄)的ACL列表
B、setfacl設置ACL規則
為文件設置:
setfacl -m u:user10:rw- /tmp/testprivillege/f1
為目錄(若是遞歸)設置:
setfacl -Rm u:user20:rwx /tmp/testprivillege/
由於是遞歸的添加,可以看到該目錄下的文件也會添加上對應的規則
C、刪除ACL規則
刪除一條記錄:
setfacl -x u:user20 /tmp/testprivillege/f1
刪除所有記錄:
setfacl -b /tmp/testprivillege/f1
D、默認ACL:定義用戶對於文件的ACL的最大權限
設置默認ACL:
[root@servera test_privillege]# setfacl -d 權限 /tmp/testprivillege
移除默認ACL:
[root@servera test_privillege]# setfacl -k /tmp/testprivillege
Tips: