文件權限的種類:
1、UGO權限(即普通權限)
2、FACL文件訪問控制列表
3、文件的特殊權限(三種S權限)
4、文件的隱藏屬性attribute (文件系統權限)
1、文件的UGO權限基礎(即普通權限)
Linux系統中一切都是文件,文件和目錄的所屬與權限——來分別規定所有者、所有組、其餘人的讀,寫,執行權限。
讀(read),寫(write),執行e(execute)簡寫即爲(r,w,x),亦可用數字(4,2,1)表示
例如下圖中的文件所有者(屬主)爲root,所有組(屬組)爲root,文件名爲instsall.log,權限位的第一個減號”–“代表的是文件類型:-:普通文件,d:目錄文件,l:鏈接文件,b:塊設備文件,c:字符設備文件,p:管道文件
文件的權限爲r w -r - -r- -也就是分別表示所有者(屬主)有讀寫權限,所有組(屬組)有讀權限,其餘人也僅有讀權限。
權限的相關知識:
三種權限:
權限 | 英文代號 | 數字代號 | 文件權限說明 | 目錄權限說明 |
讀read | r | 4 | 能用cat、head、vi查看文件內容 | 能用ls命令查看 |
寫write | w | 2 | 能用echo、vi、vim添加內容到文件中 即允許修改文件內容 | 能用mkdir、touch執行創建操作 |
執行exec | x | 1 | 命令、程序、腳本必須得有x執行權限,才能運行 | 能用cd命令打開此目錄 |
7=4+2+1=rwx 5=4+1=r-x 6=4+2=rw- 4=r 777=rwx rwx rwx 755=rwx r-x r-x 644=rw- r—r-- 600=rw- --- --- |
權限中的三類用戶:
用戶類別 | 英文代號 | 權限的範圍 |
用戶自己user | u | 權限中的前3位 |
本組用戶group | g | 權限中的中間3位 |
其他用戶other | o | 權限中的最後3位 |
所有用戶all | a | 會影響到權限中的9位 |
chmod命令
說明:chmod是change mode的縮寫。用whatis chmod和whereis chmod可分別查詢chmod命令的相關信息。
功能:修改權限的命令:chmod [選項] 權限 文件名或目錄名
常用選項:--help
-v 顯示執行過程
-R 遞歸修改目錄及其子目錄的所有文件權限。
權限修改中的代號:
u | g | o | a | + | - | = |
用戶 | 組 | 其他用戶 | 所有用戶 | 添加權限 | 減掉權限 | 設置新的權限 |
實例:用head命令將/etc/passwd文件中的前3行導入到/b.txt文件中,然後執行以下權限修改操作。
head -3 /etc/passwd > /b.txt (>大於號是重定向覆蓋輸出,即將原本顯示在屏幕上的信息覆蓋寫入到>指定的文件中)
cat /b.txt
ls -l /b.txt
chmod -v 0 /b.txt 清除文件的所有權限
chmod -v u+rw /b.txt 給文件的屬主(user)權限設置成rw可讀可寫
chmod -v g+r /b.txt 給文件的屬組(group)權限設置成r可讀
chmod -v o+r /b.txt 給文件的其他(other)用戶權限設置成r可讀
chmod -v a+x /b.txt 給文件的所有(all)用戶設置x可執行權限
chmod -v u=rw,g=r,o=r /b.txt 或chmod -v 644 /b.txt 給文件的屬主、屬組、其他人重新授權
chmod -v a-r /b.txt 給文件的所有用戶減掉r可讀的權限
rm -f /b.txt 刪除/b.txt文件
chown命令
說明:chown是change owner的縮寫。用whatis chown和whereis chown可分別查詢chown命令的相關信息。
功能:修改文件的擁有者(屬主)和擁有組(屬組):chown [選項] 用戶名:組名 文件名
常用選項:--help
-v 顯示操作過程
-R 遞歸修改目錄及其子目錄的所有屬主、屬組。
實驗1:在根目錄下創建一個文件/a.mp3,然後查看文件的詳細信息,修改文件的屬主爲bin,再修改文件的屬組爲adm,最後同時修改文件的屬主和屬組爲root,刪除此/a.mp3文件。
cd / 進入根目錄
touch a.mp3 在當前目錄創建a.mp3文件
ls -l /a.mp3 查/a.mp3文件的權限
chown -v bin /a.mp3 修改/a.mp3文件的屬主爲bin
ll a.mp3
chown -v :adm /a.mp3 修改/a.mp3文件的屬組爲adm
chown -v root.root /a.mp3
rm -f /a.mp3
umask命令
文件權限的掩碼:umask [權限]
umask默認值:root用戶的是022,普通用戶的是002。
umask的功能:會影響到用戶創建的新文件、目錄的最終權限。
實驗測試:用mkdir在根目錄下創建/dir目錄,用touch創建文件/file,然後分別查看/dir、/file的詳細信息,最後刪除文件和目錄。
umask 查看當前的umask值,它表示要去掉的權限
mkdir /dir
touch /file
ls -ld /dir 查看/dir目錄的詳細信息,也可以ll -d /dir
ls -l /file 查看/file文件的詳細信息,也可以ll /file
rm -rf /dir /file
文件、目錄最終權限的算法:滿權限-umask權限=最終權限
目錄的默認滿權限:777 例如:777-022=755 777-031=746 rwx rwx rwx
文件的默認滿權限:666 例如:666-022=644 666-031=646 rw- rw- rw-
777 | 666 | 666 | |
umask | 022 | 022 | 031 |
計算過程
| 777-022 rwx rwx rwx --- -w- -w- | 666-022 rw- rw- rw- --- -w- -w- | 666-031 rw- rw- rw- 滿權限 --- -wx --x 要去掉的權umask限 |
權限結果 | rwx r-x r-x 即755 | rw- r-- r-- 即644 | rw- r-- rw- 即646 |
---------------------
UGO權限管理中必須會的內容:
1、熟悉r讀、w寫、x執行權限
2、熟悉ls -l和ls -ld查看文件、目錄屬性中的權限
3、用chmod修改u、g、o權限
4、用chown修改文件的屬主和屬組
5、明白umask的作用,熟悉權限值是如何計算的
2、FACL文件訪問控制列表
FACL:文件訪問控制列表file access control list,控制文件和目錄訪問權限的一種方式,FACL的級別高於普通的UGO權限(即用chmod設置的權限)。
facl應用場合:A用戶創建的某個文件,精確到只想讓B、C用戶讀寫,就可以用FACL權限實現。
getfacl命令
查看文件、目錄的FACL權限:getfacl 文件名
例如:getfacl /etc/passwd
說明:文件和目錄的默認ACL權限跟UGO權限的值相同。
setfacl命令
設置文件的ACL權限:setfacl [選項] 權限 文件名
常用選項:
選項 | 功能 | 選項 | 功能 |
--help | 顯示命令幫助 | -k | 刪除默認的ACL權限 |
-m | 即modify,設置或修改ACL權限 | -R | 遞歸設置ACL權限(對目錄及其子文件) |
-x | 刪除指定用戶的文件的ACL權限 | -d | 即default,設置默認的ACL權限(僅用於目錄,目錄中新創建的文件會繼承ACL權限) |
-b | 刪除所有的ACL權限 |
setfacl案例
需求:進入當前用戶的家目錄,在當前目錄中創建a.txt文件,對a.txt文件設置ACL權限,讓adm用戶對此文件有rw-權限,讓lp組對此文件有r--權限。查看a.txt文件的ACL權限。最後刪除a.txt文件。
功能 | 命令操作 |
進入當前用戶的家目錄 | cd 或 cd ~ |
在當前目錄下創建a.txt文件 | touch a.txt |
查a.txt文件的ACL權限 | getfacl a.txt |
在a.txt文件上添加adm用戶的ACL權限 | setfacl -m u:adm:rw- a.txt |
在a.txt文件上添加bin組的ACL權限 | setfacl -m g:bin:rw- a.txt |
查a.txt文件的ACL權限 | getfacl a.txt |
強制刪除a.txt文件 | rm -f a.txt |
注意:如果ACL權限不起作用,說明分區掛載時沒有用acl選項來啓動文件系統的ACL權限功能。
3、文件的特殊權限(三種S權限)
SUID權限:
功能:讓命令的執行者臨時擁有命令的屬主(root)權限(僅對有可執行權限的二進制程序[即命令]有效)
設置suid權限的方法:chmod u+s 文件名
例1:依次查看/bin/cat、/etc/shadow文件的屬性,切換到u1用戶,用cat 查看/etc/shadow文件,exit退出u1的登錄。
SGID權限:
功能:在該目錄中創建的文件自動繼承此目錄的組屬性(只可以對目錄設置),通常用於做文件共享時對某個目錄設置g+s權限
設置SGID權限:chmod g+s 目錄名
比如我們將某個部門的工作目錄給予了SGID權限,這樣所有人創建的文件都歸相同的工作組,這樣方便以後的管理。
chmod命令用於修改文件或目錄的權限,格式爲:”chmod [參數] 權限 文件或目錄名稱”。
chown命令用於修改文件或目錄的所屬主與所屬組,格式爲:“chown [參數] 所屬主:所屬組 文件或目錄名稱”。
chmod與chown的命令參數很簡單記——對於文件不加參數,遇到目錄加大寫-R(遞歸,修改目錄內所有文件的屬性)。
創建工作目錄並給予SGID權限:
mkdir /d1
chmod -v 777 /d1
chmod -v g+s /d1
切換至普通用戶u1,在該目錄創建文件:
su - u1
touch /d1/a
ll -d /d1/a 驗證此文件的屬組是哪個組,會發現a文件的屬組跟/d1目錄相同,都是屬於root組。
exit 退出u1用戶的登錄
rm -rfv /d1 刪除/d1目錄
SBIT(Sticky Bit)權限:
功能:只允許root和文件的屬主刪除目錄中的文件(僅對目錄有效,通常用於做文件共享的目錄)
添加t權限的方法:chmod o+t 目錄
一般老師希望學生可以將作業上傳到某個特定目錄——但爲了避免某些小破壞份子,想禁止刪除其他人文件的話,那就要設置SBIT位了,當然也可以叫做特殊權限位之粘滯位(粘着位)。
案例:查看/tmp目錄的權限,創建用戶u1、u2,臨時切換到u1用戶,創建文件/tmp/u1f,設置u1f文件權限爲777,退出u1用戶的登錄,然後切換到u2用戶,用u2用戶刪除/tmp/u1f文件,看是否能刪除。
查看/tmp目錄的屬性:ls -ld /tmp 發現/tmp目錄有t權限
創建用戶u1:useradd u1
創建用戶u2:useradd u2
切換到u1用戶: su - u1
創建文件/tmp/u1f: touch /tmp/u1f
修改/tmp/u1f權限爲777: chmod -v 777 /tmp/u1f
退出u1用戶的登錄:exit
切換到u2用戶:su - u2
查看/tmp/u1f文件的屬性:ll /tmp/u1f
刪除/tmp/u1f文件:rm -f /tmp/u1f 會提示“無法刪除”(因爲/tmp目錄有t權限)。
退出u2用戶的登錄:exit
強調:刪除該文件時會提示錯誤,即便權限很充足,但因爲特殊權限SBIT的緣故,同樣會有無法刪除其他人的文件的情況。
4、文件的隱藏屬性attribute (文件系統權限)
文件的隱藏屬性attribute (文件系統權限)
問題:如何讓root也無法刪除某個文件?
答:給這個文件用chattr設置i或a屬性即可。這樣可以防止root用戶誤刪除重要文件。
問題:文件權限除了讀寫執行與SUID、SGID、SBIT外還有一種隱藏屬性,例如明明有權限刪除某個文件卻報錯了,或者僅能爲某個文件追加內容而不能減少內容,遇到這種很“奇怪”的文件,就要懷疑是文件被設置隱藏屬性了。
chattr命令
chattr命令用於設置文件的隱藏屬性(特殊屬性),格式爲:“chattr [選項] 文件”。
選項 | 作用 |
+/-i | 將無法對文件內容進行修改,若對目錄設置後則僅能修改子文件而不能新建或刪除。 |
+/-a | 僅允許補充(追加)內容.無法覆蓋/刪除(Append Only)。通常用於日誌文件。 |
S | 文件內容變更後立即同步到硬盤(sync)。 |
s | 徹底從硬盤中刪除,不可恢復(用0填充原文件所在硬盤區域)。 |
A | 不再修改這個文件的最後訪問時間(atime)。 |
b | 不再修改文件或目錄的存取時間。 |
D | 檢查壓縮文件中的錯誤。 |
d | 當使用dump命令備份時忽略本文件/目錄。 |
c | 默認將文件或目錄進行壓縮。 |
u | 當刪除此文件後依然保留其在硬盤中的數據,方便日後恢復。 |
t | 讓文件系統支持尾部合併(tail-merging)。 |
X | 可以直接訪問壓縮文件的內容。 |
lsattr命令
lsattr命令用於顯示文件的隱藏權限,格式爲:“lsattr [選項] 文件”。
選項 | 作用 |
a | 顯示所有文件和目錄。 |
l | 顯示隱藏屬性的全稱(默認簡寫成一個字母)。 |
R | 遞歸處理,將指定目錄下的所有文件及子目錄一併處理。 |
d | 若目標文件爲目錄,請加此參數。 |
任務:用root用戶體驗文件的隱藏權限i、a。
功能 | 命令操作 |
將echo命令後的字符覆蓋寫入到/a.txt文件中 | echo hello > /a.txt |
查看/a.txt文件內容 | cat /a.txt |
查看/a.txt文件的 | lsattr /a.txt |
給文件添加隱藏權限a | chattr +a /a.txt |
將echo後的字符追加寫入到/a.txt文件中 | echo hi >> /a.txt |
查看文件內容 | cat /a.txt |
刪除/a.txt文件,此時無法刪除,因爲有a權限 | rm -f /a.txt |
給/a.txt文件去掉a權限 | chattr -a /a.txt |
刪除/a.txt文件,此時正常刪除 | rm -f /a.txt |