2021-05-12 14:32:11
Linux許可權管理詳解
目錄
1.檔案許可權介紹
2.修改許可權:chmod
3.新建目錄檔案的預設許可權
4.特殊許可權
5.存取控制列表
1.檔案許可權介紹
檔案的許可權主要針對三類物件,分別是:owner:u:所屬使用者;group:g:所屬組;other:o:其他人
每個檔案針對每類存取者都定義了三種許可權:r=4:可讀,能否檢視內容和確定檔案型別;w=2:可寫,能否新增修改刪除內容;x=1:可執行,是否可執行
。
目錄隨說檔案的一種,但目錄是資料夾,所以這裡目錄和檔案在許可權方面還有些不同。
針對目錄來說:r:可以檢視目錄內的檔案列表;w:可建立刪除目錄內的檔案,但必須有
x許可權才可真正執行;x:可以進入目錄內;X:只給目錄x許可權,不給檔案x許可權,但若檔案本身就帶x許可權,則會給其他所有位加上x許可權
。
針對檔案來說:r:可檢視內容和後設資料;w:可修改內容;x:可以執行,對root也有效
。
注意:
檔案是目錄的內容,刪除許可權是檔案所在目錄的許可權決定,若目錄沒有x許可權,就不可刪除檔案。但修改許可權是檔案本身決定的,也就是即使刪除不了,也可以使對檔案進行修改破壞。
任何使用者無執行許可權將無法執行,而root使用者在u、g、o上沒有執行許可權時也不例外,但一旦任何一個上有x許可權那麼root就可以有x許可權。
時刻記住root為超級管理員,系統對root的約束力不大,很多規則都不能約束root。
檔案目錄的許可權是按照順序檢查的:u,g,o。
2.修改許可權:chmod
chmod - 修改檔案許可權
用法:chmod [option]... mode[,mode]... file...
chmod [option]... octal-mode file...
chmod [option]... --reference=rfile file...
[option]-f
:錯誤資訊不顯示-R
:遞回修改許可權-v
:顯示詳細修改許可權過程-c
:和-v一樣,但只有出現改變時才顯示
[mode]和[octal-mode]{u|ug|ugo|go|uo}{=|-|+}{rwxX|421}
:任意組合的u,g,o可以直接=或-或+許可權,許可權也可以使用rwx,也可以使用對於的數位
[--reference=rfile]
這是可以參考rfile檔案的許可權,來將file的許可權修改與rfile的許可權相同
這裡舉些範例方便理解:chmod -R g+rwX /testdir
chmod 600 file
chmod u+wx,g-r,o=rx file
3.新建目錄檔案的預設許可權
當我們建立一個目錄或檔案時,系統會自動給其分配一個許可權,這個許可權是怎麼來的?實際上,新建目錄或檔案的許可權是系統根據所設定的umask的值來計算出來的。
umask有個預設值放在/etc/profile檔案中。當使用者uid在0-199之內時,umask=022;當使用者uid大於199時,umask=002。
預設許可權是怎麼來的呢?新建檔案的預設許可權為666-umask的值,且如果所得的結果某位存在執行許可權也就是奇數是,則將其位上許可權+1;新建目錄的預設許可權為777-umask的值所得。當然上面計算方法,本質上是對位將最大許可權的umask的相應位許可權去除,來得到預設許可權;也就是說umask為0的位,不去除對位,umask為1的位,去除對位,對位是0還是0,對位是1就去為0。
umask還是個命令:
umask-顯示和設定umask值
umask [-p] [-S] [mode]
-p
:輸出umask值,可以作為標准輸入用-S
:輸入u=,g=,o=umask mode
:設定umask值,但只是暫時的,重新啟動機器後就會失效。
要想永久保留自己設定的umask值可以儲存在:~/.bashrc,這個使用者自己用;/etc/bashrc,這個大家一起用。
4.特殊許可權
檔案除了一般許可權外,還在執行位x上還有特殊許可權。對於所有者u來說特殊許可權稱為SUID
,對於所屬組來說特殊許可權為SGID
,對於其他人來說特殊許可權為STICKY
。
1.SUID
任何一個可執行程式檔案能不能啟動為進程,取決於發起者即所有者u對程式檔案是否擁有執行許可權;啟動為進程後,其進程的所有者為原程式檔案的所有者。
SUID作用在所有者u的可執行許可權x上,就是用於繼承程式所有者的許可權,來使所有人都可以暫借這個執行許可權來執行這個檔案。SUID只對二進位制可執行程式有效,而設定在目錄上無意義。
許可權的設定為:
chmod u{+|-}s file...
:給檔案新增或去除suid許可權
2.SGID
預設情況下,使用者建立檔案或目錄時其所屬組為此使用者的所屬組g。
SGID作用在二進位制檔案上時,會使屬於這個組g的人都繼承檔案的執行許可權。
SGID作用在目錄上時,會使目錄內新建的檔案的所屬組自動繼續目錄的所屬組。
許可權的設定為:
chmod g{+|-}s {dir|file}...
:給目錄或檔案新增或去掉sgid許可權
3.STICKY
具有寫許可權的目錄,使用者可以刪除該目錄中的任何檔案。
STICKY作用在目錄上後,只有檔案的所有者或root可以刪除該檔案。且STICKY設定在檔案上無意義。
許可權的設定為:chmod o{+|-}t dir...
:給目錄新增或去掉sticky許可權
4.特殊許可權的數位法和許可權位的對映
特殊許可權位用數值表示就是:suid=4;sgid=2;sticky=1
。
特殊許可權設定時,要放在普通許可權的前面,如chmod 4777 /tmp/a.txt
。
SUID佔據所有者u的執行許可權位時,u
有x
許可權時表示s
,u
沒有x許可權時表示S。
SGID佔據所屬組g的執行許可權位時,g
有x
許可權時表示s
,u
沒有x許可權時表示S。
STICKY佔據其他人o的執行許可權位時,o
有x
許可權時表示t
,o
沒有x許可權時表示T。
5.存取控制列表
1.存取控制列表介紹
存取控制列表(Access Control List,ACL),又稱存取控制串列,是使用以存取控制矩陣為基礎的存取控制方法,每個物件對應一個串列主體。ACL描述每個物件各自的存取控制,並記錄可對此物件進行存取的所有主體物件的許可權。
ACL的主要功能:為了更好的管理使用者許可權,可以自由的設定使用者的存取檔案的許可權,實行有效的管理。對某些組成或使用者有特殊許可權的設定。除了檔案的所有者,所屬組和其他人,可以對更多的使用者設定許可權。
CentOS7預設建立xfs和ext4檔案系統具有ACL功能,而之前的版本,預設手工建立的ext4檔案系統沒有ACL功能,需要手動增加:tune2fs -o acl /dev/sd?
上面就是ACL生效的順序,也就是許可權優先順序是從上往下的,所有者,自定義使用者,所屬主組,自定義組,其他人。且mask是個限定線,除了所有者和其他人,其餘的都不能超過這個限定線。
2.getfacl
getfacl - 取得並顯示檔案的存取控制列表
getfacl [-aceEsRLPtpndvh] {file|-} ...
-a, --access
:顯示檔案的ACL-d, --default
:僅顯示預設的ACL-c, --omit-header
:不顯示帶有#的資訊-e, --all-effective
:顯示所有有效的許可權-E, --no-effective
:顯示無效的許可權-s, --skip-base
:跳過只有基礎詞目的檔案-R, --recursive
:遞回-L, --logical
:logical walk, follow symbolic links-P, --physical
:physical walk, do not follow symbolic links-t, --tabular
:使用列表輸出格式-n, --numeric
:列印數值形式的使用者或組身份-p, --absolute-names
:不要剝去“/”在路徑上
getfacl得到的顯示如下:
The output format of getfacl is as follows:
1: # file: somedir/
2: # owner: lisa
3: # group: staff
4: # flags: -s-
5: user::rwx
6: user:joe:rwx #effective:r-x
7: group::rwx #effective:r-x
8: group:cool:r-x
9: mask::r-x
10: other::r-x
11: default:user::rwx
12: default:user:joe:rwx #effective:r-x
13: default:group::r-x
14: default:mask::r-x
15: default:other::---
3.setfacl
setfacl - 設定檔案存取控制列表
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
-m, --modify=acl
:修改當前檔案的ACL-M, --modify-file=file
:讀取acl_file的ACL來修改file的ACL-x, --remove=acl
:移除ACL許可權-X, --remove-file=file
:讀取acl_file的ACL來移除file的ACL-b, --remove-all
:移除所有ACL-k, --remove-default
:移除預設的ACL--set=acl
:設定ACL來代替當前的ACL--set-file=file
:從檔案上讀取ACL來進行設定--mask
:重新計算有效的mask值-n, --no-mask
:不重新計算有效的mask值-d, --default
:對所有新建立的檔案都設定ACL-R, --recursive
:只對已經存在的檔案進行設定ACL-L, --logical
:logical walk, follow symbolic links-P, --physical
:physical walk, do not follow symbolic links--restore=file
:恢復 ACLs (inverse ofgetfacl -R')
--test:測試許可權,ACL不被修改
acl_spec:[d:] [u|g|o|m]:[uid|gid|]:[許可權] ,d為default,m為mask。
acl_file`:是帶有ACL許可權的檔案
這裡列些例子大家可以試試:
setfacl -{m|x} u:wang:rwx {filed|directory}
setfacl -Rm g:sales:rwX directory
setfacl -{M|X} file.acl {file|directory}
setfacl -m d:u:wang:rx directory == setfacl -m -d u:wang:rx directory
4.補充
ACL檔案上的組許可權位上是mask的值,而非傳統的組許可權。
通過ACL賦予目錄預設的x許可權時,目錄內的檔案也不會繼承x許可權的。
mask只影響除所用者和other之外的人和組的最大許可權,使用者或組的設定必須存在於mask許可權設定的範圍內才可生效。一旦設定了ACL,mask許可權就是顯示在組許可權位上。mask需要與使用者的許可權進行邏輯與執行後,才能變成有效的許可權。
備份ACL:主要的檔案操作命令cp
和mv
都支援ACL,只是cp命令需要加上-p
選項,所以可以使用cp來備份。而tar
等常見備份工具是不會保留目錄和檔案的ACL資訊的。使用重定向也可以把ACL許可權備份下來用來恢復:getfacl -R /tmp/dir1 > acl.txt
恢復ACL:cp
的話是整個檔案,複製到所需的地方就可。如上所寫,/tmp/dir1的ACL許可權丟失的話,怎麼恢復?可以:setfacl -R --set-file=acl.txt /tmp/dir1 ; setfacl --restore=acl.txt ;getfacl -R /tmp/dir1
以上就是我所知道的有關許可權管理的相關資訊,這裡就沒有舉多少例子,畢竟寫再多也沒有自己動手學的快。若發現有錯誤的地方,請大家幫忙提出糾正,謝謝!
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-10/147272.htm
相關文章