權限管理包括普通權限、特殊權限、默認權限、ACL權限。
這些權限都是針對u(owner)、g(group)、o(other)三類定義的。
設置權限時文件和目錄不同(此處把文件和目錄分開,一般說文件就包含目錄(linux思想:一切皆文件))如下圖所示,
分別用兩個用戶分別創建了一個目錄一個文件,可以看到同是目錄的liutest和test的權限不同,它倆同為目錄為啥子權限不一樣呢,然后又看了一下兩個文件,發現權限也不同,那這是為啥呢?!
別急,小編君這就為你解答:
一:默認權限
這是因為有一個叫umask值的東西存在,因此超級管理員root和普通用戶在創建文件和目錄時有了默認權限,那啥又是默認權限呢,
默認權限就是在最大權限減去umask值后得到的,那啥又是最大權限呢,最大權限是多少呢?! 目錄的默認最大權限為777,文件默認最大權限是666,即
目錄 文件
最大權限 777 666
umask(普通用戶) 002 002
默認權限 775 664
umask(root) 022 022
默認權限 755 644
如圖所示,普通用戶umask默認為0002,root默認0022(這里只看后三位,說的時候就是root的umask值為022,普通用戶的umask值為002,第一位是特殊權限位,一會兒會詳細單獨說的),而目錄的最大權限是777,文件的最大權限666,所以在創件文件和目錄時,先用最大權限減去umask之后,就是其默認權限。
例:
777 rwxrwxrwx 666 rw-rw-rw-
021 —-w—x 021—-w—x
756 rwxr-xrw- 646rw-r–rw-
總結一個規律:當umask值全部是偶數時,可以直接減,當umask值包含奇數時,對于目錄直接減,對于文件,減完后再加一。如下圖所示dir1的權限是756(777-021),而文件file的權限值為656(666-021+1)
設置umask值:umask #(例:umask 004)
這種設定只在當時生效,要想長期生效,需要在/etc/bashrc(所有用戶可以看到)、~/.bashrc (僅用戶自己可以看)這兩個配置文件里,手動修改。
這里注意區分一下拷貝文件和新建文件時文件的權限區別:
cp拷貝文件時,基于源文件的權限減去umask值;
創建文件時,基于最大權限減去umask值。
二:普通權限:
前面一直說權限,那接下來就來看一下,每一位具體的意思吧:
r: 文件:可查看(讀取)文件內容
目錄:可以用ls查看此目錄下的文件列表(不能查看詳細信息)
w: 文件:可以修改文件內容
目錄:單獨使用沒意義,與x結合使用時,可在此目錄下創建、刪除文件
x:文件:可以執行
目錄:可以進去此目錄,與r結合使用,可以查看此目錄下文件的詳細信息(ls -l)
X:當文件本身沒有x權限時,則跳過,一般用于批量修改多個文件、目錄的權限時,自動跳過沒有執行權限的文件。(一般只給目錄,不給文件。)
權限分兩種方式:
1.字符:
chmod u/g/o+r/w/x file
chmod a=rwx file(a=ugo)
2.數字:
0:—
1:–x
2:-w-
3:-wx
4:r–
5:r-x
6:rw-
7:rwx
組合:rwxr-xr– 754
chmod用于修改權限,此功能只有root和所屬人有權限
例:chmod754 file
chmod –reference file1 file2復制file1的權限給file2
(chown –reference file1 file2復制file1的所屬人和所屬組給file2)
(chgrp –reference file1 file2復制file1的所屬組給file2)
有的人會有疑問,權限位是四位,怎么一直說三位啊,第一位是啥?
三:特殊權限位
第一位呢,是特殊權限位,由suid、sgid、sticky組成,下面有個總結,就是有點長,但是比較完整,其實重點是最后一句。
suid
當對一個可執行的二進制文件作用了SUID權限之后,任何擁有執行該文件權限的人,在執行的過程時都臨時擁有該文件所屬人的權限。
sgid
當對一個可執行的二進制文件作用了SGID權限之后,任何擁有執行該文件權限的人,在執行的過程時都臨時擁有該文件所屬組的權限。
當對一個目錄作用了SGID權限之后,任何對該目錄有wx權限的用戶在該目錄下創建的文件及目錄的所屬組均為該目錄的所有組。
sticky
當對一個目錄作用了sticky之后(只限制組用戶,目錄的owner不受影響),該目錄下的文件僅其所屬人才能刪除。
一些常用命令:
用字符:
chmod u+s file 權限值為4***,即只有suid
chmod g+s file 權限值為2***,即只有sgid
chmod o+t file 權限值為1***,即只有sticky
也可以用數字:
chmod 3*** file 既有sticky又有sgid
chmod 5*** file 既有sticky又有suid
chmod 6*** file 既有suid又有sgid
chmod 7*** file 都有,all
若文件本身帶有x權限時,為s、t,反之,則是S、T
如下圖所示:
四:ACL權限
ACL(Access Control List)訪問控制列表
CentOS7當中,無論是操作系統安裝時還是之后手工創建的文件系統(xfs、ext4)均會開啟ACL功能。
CentOS6及之前的版本,僅操作系統安裝時創建的文件系統才會默認開啟ACL,手工創建的文件系統,需要手工開啟ACL功能。
1.mount -o acl /dev/sda7 取消的方式,重新掛載時不指定即可
2.mount -o remount,acl /dev/sda7
以上兩種方式開啟的ACL可以通過 mount |grep sdaX 查看
3.tune2fs -o acl /dev/sda7 取消的方式 tune2fs-o ^acl /dev/sda7
使用以上方式開啟的ACL可以通過
tune2fs-l /dev/sda7 |grep option查看
以上很少用到,這里就不做演示了。
ACL權限判斷的順序
先判斷是否是文件的OWNER,如果是,則執行OWNER的權限后結束,如果不是OWNER,則判斷是否是ACL的USER,如果是則執行USER權限后結束,如果不是ACL的USER, 則判斷是否屬于GROUP或ACL GROUP,如果是,則取最大權限。如果不屬于任何GROUP,則執行OTHER。
即:所有人->所有組->其他人
ACL的設置:(設置權限后,ll查看到權限位的末尾有+號,代表已經設置了ACL權限,這時再想查看權限就用getfacl file查看,當然ll也還能用,只是看不到ACL的權限而已)
setfacl-m u/g:user/group:r/w/x file
首先創建目錄
然后設置ACL權限,并觀察其權限處的變化
然后:通過getfaclfile查看ACL:
設置默認的ACL:
setfacl-m d:u/g:user/group:r/w/x file
(僅影響新創建的文件及子目錄,對當前目錄沒影響)
刪除一條ACL權限:
setfacl-x u/g:user/group file
僅刪除一條默認的ACL權限:
setfacl-x d:user/group file
刪除所有ACL權限
setfacl-b file
刪除默認的ACl權限:
setfacl-k file
以上操作常與-R連用,遞歸設置對目錄及其子目錄的操作
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。
getfacl-R /PATH/TO > acl.txt連同其子目錄文件的ACL權限一同導入acl.txt
setfacl-R -b /tmp/dir1連同子目錄的ACL全刪除
setfacl-R –set-file=acl.txt /tmp/dir1(兩種還原)
setfacl–restore acl.txt(第二種)
注意:
設置過ACL權限后,操作chmod g+/- r/x/w file這條命令,用ll命令查看權限時也能看到所屬組位權限的變化,但是,用getfacl file查看所屬組位沒變化,實際上改變的只是mask值。但chmod u+/- r/x/w所屬人權限無論使用ll查看還是,getfacl file查看,都會變成設置的值、
這里的mask是所有除所有者OWNER和root外的user和group的權限的并集。
也可以使用setfacl -mmask::r/w/x file設置其權限值
另外涉及到一些特殊權限:
chattr+i file 不能file進行刪除、修改,改名等
chattr-i file 取消這種權限限制
chattr+a file 只能追加內容
chattr -a file 取消這種權限限制
OK,內容目前到此,小編君剛學Linux不久,學識有限,若有出入,請多多指教,若總結的不到位,望海涵。
原創文章,作者:M.Sun,如若轉載,請注明出處:http://www.www58058.com/83422