概述
Linux系統是一個多人多任務的操作系統,系統上同時可能有很多人登錄,每個人都會利用系統上的各類資源完成一定的操作。那么如何合理的規范這些用戶的行為,保證資源的合理分配,則就需要用到權限管理的相關內容了。權限管理是Linux系統上最基礎,也是最重要的一部分內容,本章就簡要說明下權限管理的相關內容。內容主要包含以下幾個部分:
1、權限管理的一些基礎概念理解
2、普通權限管理的相關命令詳解
3、特殊權限管理SUID、SGID、STICKY
4、ACL相關內容
5、chattr特殊權限簡介
本章涉及到的命令有:chmod、chown、chgrp、umask、setfacl、getfacl、chattr、lsattr
第一部分 權限管理的一些基礎概念理解
1、權限位介紹
在Linux系統上,普通權限分為三類:讀(r)、寫(w)、執行(x)
文件的從屬關系也分為三類:
屬主(u):標明這個文件是誰的
屬組(g):標明該文件屬于哪個用戶組
other(o):除開文件屬主和屬組之外的所有人
利用命令:ls -l /etc/passwd
可以看到:-rw-r–r– 1 root root 1701 8月 1 20:12 /etc/passwd
其中-rw-r–r–這部分就顯示了該文件權限相關的定義
最前面一位,代表該文件的類型,主要有-、d、l、s、p、c、b等類型具體后期在進行說明。
剩下的9位,每3位分成一個組,共3組,其中:
左3位:代表文件的屬主的權限,3位的順序固定格式,rwx,分別代表讀寫執行,如果某位上為-,代表無該權限
中3位:代表文件的屬組的權限
右3位:代表除開屬主和屬組之外的其他人對該文件的權限
針對上面提到的rw-r–r–這個權限表示文件的屬主,也就是對該文件有讀、寫權限,屬組對該文件具有讀權限,其他人對該文件具有讀權限
2、各權限位對文件和目錄的意義
在Linux系統上,讀寫執行三個權限針對文件和目錄是具有不同的效果的,具體的功能如下:
對文件而言:
r:表示可獲取文件的數據;cat、nano文件內容
w:表示可修改文件的數據;可修改內容,不能刪除文件本身,但文件內容可以刪
x:表示可將此文件發起運行為進程;針對可執行程序文件或腳本,一般的文件不需要加x權限
對目錄而言:
r:表示可使用ls命令獲取其下的所有文件列表信息,但是獲取不到ls -l的詳細信息
w:表示可修改此目錄下的文件列表,即創建或刪除文件
x:表示可cd至目錄中,且可使用ls -l來獲取所有文件的詳細屬性信息
除了以上三種常見的權限表示外,還有一個權限表示:
X:功能是遞歸賦權時,會自動檢測是目錄還是文件,目錄的話,會自動加上x權限,如果是文件,就看文件之前有沒有x權限,有的話,就+x權限,如果文件之前沒有x權限,就不加x權限
3、權限表示法
針對各個權限的表示,除了常規的r、w、x之外,還有一種方法進行表示(利用二進制數字)
001:代表執行x
010:代表寫w
100:代表讀r
換算成十進制就是:
r:4
w:2
x:1
0-7的數字可代表—、–x、-w-、-wx、r–、r-x、rw-、rwx
常見的權限:
664 rw-rw-r–
640 rw-r—–
600 rw——-
755 rwxr-xr-x
750 rwxr-x—
775 rwxrwxr-x
4、UMASK介紹
在我們創建文件或目錄時,系統會自動為我們分配一些權限,這些權限是怎么得來的,這就是依賴于umask值了
umask:文件的權限反向掩碼
能夠實現在創建文件時的默認權限為:666-umask
能夠實現在創建目錄時的默認權限為:777-umask
注意:之所以文件用666去減,表示文件默認不能擁有執行權限;如果得到的結果中,仍然有執行權限,這需要將其+1
系統上默認的umask值為:
root:默認umask是022
普通用戶:默認umask是002
查看umask值可以直接在命令行下:umask
指定umask值可以直接在命令行下:umask 數字 來指定umask值,值只能是3位數字,不大于777
umask -S 顯示以權限直觀方式顯示創建目錄時的umask,顯示結果類似這種格式:u=rwx,g=rx,o=rx
umask -p 顯示uamsk本身和其值,顯示結果類似這種格式:umask 0022
注意:在命令行里設置的umask只對當前shell有效,退出登錄后失效
想永久生效,對當前用戶生效,可放在家目錄的.bashrc里面
如果要對所有用戶都生效,全局設置在/etc/profile和/etc/bashrc里面定義了關于默認umask的定義
5、安全上下文
安全上下文:
1、進程以某用戶的身份運行,進程是發起此進程用戶的代理,因此以此用戶的身份和權限完成所有操作;
2、權限匹配模型
a) 判斷進程的屬主(誰發起的進程誰就是該進程的屬主),是否為被訪問文件的屬主;如果是,則應用屬主的權限;否則進入第2步;
b) 判斷進程的屬主,是否屬于被訪問文件的屬組;如果是,則應用屬組權限;否則進入第3步;
c) 應用other的權限;
通俗的理解就是:
當A用戶運行某個程序文件,例如cat,由于cat命令本身就是一個二進制程序文件,那么此時就對cat文件的權限進行判斷,A屬不屬于cat文件的屬主,如果屬于,查看cat文件上關于屬主的權限的定義,根據權限的定義來判斷A能對cat文件進行哪些操作;然后如果A不屬于cat的屬主,就判斷A是不是cat文件的屬組,如果屬于屬組,那就根據屬組權限定義的權限,對cat文件能執行哪些操作,如果既不屬于cat的屬主,又不屬于文件的屬組,那么就執行cat文件上關于其他用戶的權限定義,根據定義的權限,執行相應的操作。那么通過查看,我們發現A既不屬于cat文件的屬主,也不屬于文件的屬組,就執行了關于其他人的權限,其他人的權限具有x權限,就是執行,故A可以運行cat命令。
當A執行cat命令時,如果cat程序需要調用一個文件,例如我們執行cat /etc/passwd 此時,一旦cat程序運行起來,那么A就是cat進程的屬主,該進程是發起此進程的用戶的代理,也就是說,cat進程調用的一些資源,當請求/etc/passwd時,請求的身份是cat進程的身份,此時,cat進程的身份是A,那么就判斷A用戶對/etc/passwd文件的權限是什么,就對應的可以進行哪些操作
第二部分 普通權限管理的相關命令詳解
1、chmod命令
格式:
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… –reference=RFILE FILE…
三類用戶:
u:屬主
g:屬組
o:其他
a:所有
選項:
-R 表示遞歸修改目錄及其子目錄和文件的權限
用法一、chmod [OPTION]… MODE[,MODE]… FILE…
MODE表示法
賦權表示法(直接操作一類用戶的所有權限位):u=、g=、o=、a=、ug=、uo=、…..
如:chmod g=rx /test/11.xx
chmod uo=rx /test/11.xx
chmod u=rx,g=w /test/11.xx
授權表示法:直接操作一類用戶的一個權限位:u+、u-、g+…..
如:chmod u-x /test/11.xx
chmod o+r /test/11.xx
chmod ug+x /test/11.xx
chmod ug-rx /test/11.xx
chmod u-r,g+x /test/11.xx
用法二、chmod [OPTION]… OCTAL-MODE FILE…(八進制權限表示)
例如:chmod 660 /test/11.xx
用法三、chmod [OPTION]… –reference=RFILE FILE…(依照別的文件權限,給指定文件賦權)
例如:chmod –reference=/etc/issue /test/11.xx
注意:普通用戶僅能夠修改屬主為自己的文件的權限
2、chown命令
語法:chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…
選項:
-R:表示遞歸修改
例如:chown -R nwc:newbee /test/
chown newbee /test/11.xx
chown nwc.newbee /test/11.xx
第二種用法:
chown –reference=/etc/issue /test/11.xx
3、chgrp命令
具體用法與chown類似,但是chgrp只能用來更改文件或目錄的所屬組
第三部分 特殊權限管理SUID、SGID、STICKY
1、SUID
功能:設置了SUID權限后,當用戶運行某二進制程序文件時,該進程的屬主不是進程發起者,而是進程二進制程序文件本身的屬主
作用對象:二進制可執行程序文件
前提條件:執行二進制程序的用戶必須要對該二進制程序具有執行權限
展示位置:屬主的x位,如果屬主有x,則顯示為s,如果屬主沒有x,則顯示為S
設置方法:
chmod u+s FILE
chmod 4XXX FILE
取消方法:
chmod u-s FLIE
2、SGID
功能:
針對二進制程序文件而言:
對二進制程序文件設置了SGID權限,則進程的屬組不是發起進程的用戶的主組,而是會變成程序文件本身的屬組
針對目錄而言:
當目錄屬組有寫權限,且有SGID權限時,那么所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或目錄時,新文件的屬組不是用戶的基本組,而是此目錄的屬組;
可理解為:一般是一個小組協同工作時,創建一個協同目錄,讓這個目錄擁有SGID權限,然后小組內的人都在同一個屬組內,讓此屬組對該目錄有寫權限,這樣,小組內的人在這個目錄下創建文件時,文件的屬組就變成了該目錄的屬組,這樣組內的其他人就對文件具有寫權限了,實現了小組工作的協同,但此時組內的人也能刪出其他人創建的文件,為了防止這種情況發生,就有了STICKY權限
作用對象:二進制程序文件和目錄
前提條件:對二進制程序文件有x權限,對目錄而言有w和x權限
展示位置:文件或目錄的屬組的執行權限位,如果屬組有x,則顯示為s,如果屬組沒有x,則顯示為S
設置方法:
chmod g+s FILE|DIR
chmod 2XXX FILE|DIR
取消方法:
chmod g-s FILE|DIR
例如:在對二進制程序執行SGID權限時:
在對目錄執行二進制權限時:
3、STICKY
功能:對于屬組或全局可寫的目錄,組內的所有用戶或系統上的所有用戶,在此目錄中都能創建新文件或刪除所有的已有文件;如果為此目錄設置了Sticky權限,則每個用戶能創建新文件,只能刪除自己的文件,無法刪除組內其他用戶創建的文件
作用對象:目錄
前提條件:屬組或全局可寫的目錄,目錄有執行權限
展示位置:other的執行權限位,如果other原本有執行權限,顯示為小寫t,否則,顯示為大寫T
設置方法:
chmod o+t DIR
chmod 1XXX DIR
取消方法:
chmod o-t DIR
第四部分 ACL相關內容
1、ACL基礎介紹
假設一種情況,針對某文件,我們不希望個別人訪問,這個問題如何解決。如果改掉原文件本身的權限,這樣勢必造成影響范圍過大,原本只是不希望某一個人不能訪問的,改掉文件本身的權限之后,可能造成大部分人都訪問不了,這樣,勢必就不利于資源的合理規劃和利用。那么為了解決這種情況,就有了ACL訪問控制列表這種權限控制機制。
ACL提供了除了文件的屬主、屬組、其他人之外的另外一種靈活控制文件權限的機制。支持對個別的人,或組設置單獨的策略。
但是ACL的實現,要基于文件系統支持,可以在文件系統創建的時候,利用-o acl指明默認支持acl掛載選項,如:
mke2fs -t ext4 -b 1024 -m 2 -L TEST -o acl /dev/sdb5
或者在掛載的時候利用-o acl 指明支持acl掛載選項
mount -o acl,remount /dev/sdb5
2、查看ACL
在設置了ACL權限的文件或目錄上,能夠通過查看文件的詳細信息ls -l FILE來查看,權限位后面如果有+加號,則表示該文件有ACL權限
在知道該文件有ACL權限之后,可以利用getfacl FILENAME來獲取相應ACL權限的詳細信息。例如:
# file: scripts/ 標識了文件名
# owner: root 標識了文件屬主
# group: root 標識了文件屬組
user::rwx 標識了文件自身屬主擁有的權限
user:nwc:rwx 標識了nwc用戶對文件擁有的權限
group::r-x 標識了文件自身屬組的權限
mask::rwx 標識了該文件的各個用戶的最高權限基準
other::r-x 標識了文件自身other的權限
3、設置ACL
想要實現設置ACL規則,需要利用setfacl命令來實現,setfacl的用法如下:
語法:setfacl [選項] -m|-x 權限表達式 FILE…
setfacl [選項] -M|-X 權限表達式文件 FILE …
選項:
-b FILE|DIR:刪除所有擴展的acl規則,基本的acl規則(所有者,群組,其他)將被保留
-k DIR:刪除默認的acl規則
-R,–recursive:遞歸的對所有文件及目錄進行操作
-m 表示設置ACL規則
-x 表示取消ACL規則
-M FILE 表示從指定的文件中讀取規則,并以此為模板,設置指定文件中的規則
FILE格式為:u:username:mode
g:groupname:mode
……
-X FILE 表示從指定的文件中讀取規則,并以此為模板,刪除指定文件上的規則
FILE格式為:u:username
g:groupname
……
-n,–no-mask:不要重新計算有效權限。setfacl默認會重新計算ACL mask,除非mask被明確的制定。
–mask:重新計算有效權限,即使ACL mask被明確指定
–set 表示重新設置ACL的權限,用新的代替,需要注意的是,新的ACL規則中必須要包含文件自身的權限定義,也就是類似:
u::rwx g::r-x o:: 這三種,中間沒有指明任何用戶的規則
–set的用法:setfacl –set u::rwx,g::r,o::,u:nwc:rwx – FILE
–set-file 以文件為模板,創建指定文件的ACL。如:
getfacl FILE1 | setfacl –set-file=- FILE2表示復制FILE1的ACL權限給FILE2
權限表達式:
[d:] u:username:mode 指定用戶的權限,如果username為空,表示設置文件所有者的權限。加d:表示設置的是默認規則
[d:] g:groupname:mode 指定群組的權限,如果groupname為空,表示設置文件所有群組的權限。加d:表示設置的是默認規則
[d:] m: :mode 指定mask權限, 加d:表示設置的是默認規則
加上d:設置了默認規則之后,表示在此之后在該目錄下新建的文件或目錄都默認具有的ACL權限,但現有文件和目錄本身還是要另外單獨設置ACL規則
示例:
環境Centos6.8,管理員為root,測試普通用戶為nwc、nwc2;測試組為testgroup1(組內有普通用戶test1user1、test1user2)、testdir2(組內有普通用戶test2user1、test2user2);測試目錄為/testdir/acl_dir,測試文件為/testdir/file
<1>在沒有設置任何acl權限之前,所有的普通用戶、組均不為目錄或文件的屬主或屬組,且對文件和目錄均沒有任何訪問權限
<2>對/testdir/file1設置acl權限,讓nwc用戶具有rwx權限,讓testgroup1組具有rx權限
<3>通過-M FILE和-X FILE批量增加或刪除acl權限
<4>通過 -R對/testdir/acl_dir設置遞歸權限,讓該目錄下已經存在的文件或目錄自動按照遞歸acl設置的權限繼承
<5>通過對/testdir/acl_dir設置目錄的默認權限,讓在該目錄中的新建的文件或目錄自動繼承默認權限
4、ACL中mask
在getfacl獲取詳細acl權限列表中,我們可以看到有mask這個權限的相關信息,在linux系統里面大家都知道比如對于r–rw-r–來說, 中3位那個rw-是指文件屬組的權限, 但是一旦該文件設置了ACL權限,那么當中那個rw-代表的就是mask值而不再是文件屬組的權限了
可以看到初始尚未設置acl之前,屬組的權限位就是代表屬組本身的權限,當一旦設置了acl權限之后,在查看屬組的權限位,就變成了跟mask一致的權限
接下來,我們設置testgroup1的acl權限為rwx,然后更改mask的設置,通過比對,我們查看文件權限發生的變化
可以發現,一旦設置設置了mask之后,發現之前設置的權限,如果權限超過mask權限,后方都會顯示一個#effective的條目,代表真正生效的權限,其實,mask就是起到限定設置acl的最高權限的作用,如果此時查看該文件本身的權限信息,發現屬組權限位的信息也隨著mask的修改而改變了:
5、備份和恢復ACL
在日常備份文件目錄時,通常的cp命令,通過-a或者-p選項都可以保留acl屬性進行復制,但是如果要用tar等壓縮文件就無法保留文件的acl屬性信息了,這樣就需要利用其它方式進行acl備份了
備份:
獲取文件或目錄的acl權限列表,然后保存到文件中:
getfacl -R /DIR >ACL_BAK_FILE
恢復:
將之前備份的權限文件恢復到文件中
setfacl -R –set-file=ACL_BAK_FILE /DIR
第五部分 chattr特殊權限管理(對管理員依然有效)
chattr +A FILE 可以禁止訪問時更改訪問時間atime
chattr +i FILE 表示只能讀,不能刪除,修改內容,改名
chattr +a FILE 表示只能讀,能修改內容,不能刪除,改名,移動
取消對應的權限可以將+改為-
查看附加的權限有哪些可以用lsattr
原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/28030
文章整體思路清晰,每一個命令用法都有了詳盡的總結與操作。