Linux文件系統上的權限
首先我們來看一下如何修改文件的屬主和屬組
修改文件的屬主:chown
chown [OPTION]… [OWNER][:[GROUP]]FILE…
用法
OWNER修改屬主
OWNER:GROUP修改屬主:屬組
:GROUP修改屬組
命令中的冒號可以用.替換
-R:遞歸
chowen [OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE文件的權限修改為與RFILE文件權限相同
修改文件的屬組:chgrp
chgrp[OPTION]… GROUP FILE…
chgrp[OPTION]… –reference=RFILE FILE…
-R:遞歸
下面我們來說一下在Linux系統中,文件的權限
文件系統中文件的權限是指文件系統上文件和目錄的權限,文件系統上的權限主要針對三類對象進行定義:
owner:屬主,u
group:屬組,g
other:其他,o
每個文件都針對每類訪問者定義了三種權限:
r:readable
w:writable
x:excutable
權限針對文件和目錄還有不同的含義:
文件:
r:可使用文件查看類工具獲取其內容
w:可修改其內容
x:可以把此文件提請內核啟動為一個進程
目錄:
r:可以使用ls查看此目錄中文件列表
w:可以在此目錄中創建文件,也可以刪除此目錄中的文件
x:可以使用ls-l查看此目錄中文件列表,可以cd進入此目錄
這里,我們補充一個X
X:只給目錄權限,不給文件x權限
這里,非常有必要說一下Linux文件系統中,權限應用模型:
以ls -l /etc/issue為例
-rw-r–r–. 1 root root 112 Jul 25 09:24 /etc/issue
然后執行 cat /etc/issue
1.首先看命令的發起者是否是文件的屬主既左三位的權限,如果是則應用左三位的權限,否則
2.查看命令的發起者是否是文件的屬組既中三位的權限,如果是則應用中三位的權限,否則
3.是使用右三位的權限
上面講到我們可以用rwx來表示權限,這里我們講一下另外一種表示方法
權限、二進制、八進制表示對應的表示方法
—000 0
–x 001 1
-w-010 2
-wx 011 3
r–100 4
r-x 101 5
rw-110 6
rwx 111 7
例如:
640: rw-r—–
rwxr-xr-x: 755
知道什么是文件權限,我們來說一下如何修改文件權限
chmod
chmod[OPTION]… OCTAL-MODE FILE…
-R: 遞歸修改權限
? chmod[OPTION]… MODE[,MODE]… FILE…
MODE:
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u-g+ g-o+ o-a+ a-+ –
? chmod[OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE的修改為同RFILE;
注意:僅管理員可修改文件的屬主和屬組;
文件或目錄創建時的遮罩碼:umask
umask:文件的權限反向掩碼,遮罩碼;
文件:
666-umask
目錄:
777-umask
注意:之所以文件用666去減,表示文件默認不能擁有執行權限:如果減得的結果中有執行權限,則需要將其加1;
umask:023
666-023=644
777-023=754
umask命令:
umask:查看當前umask
umask MASK:設置umask
新建DIR權限: 777-umask
?
非特權用戶umask是002
root的umask是022
umask–S 模式方式顯示
umask–p 輸出可被調用
全局設置:/etc/bashrc用戶設置:~/.bashrc
注意:此類設定僅對當前shell進程有效;
Linux文件系統上的特殊權限
在Linux文件系統上有三個特殊權限:SUID,GUID,Sticky
首先我們再次強調一下Linux權限模型是由mode和owner組成
mode:rwx
owner:ugo
這里我們有必要說一下安全上下文:
前提:進程有屬主和屬組;文件有屬主和屬組
1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
3) 進程訪問文件時的權限,取決于進程的發起者
a) 進程的發起者,同文件的屬主:則應用文件屬主權限
b) 進程的發起者,屬于文件屬組;則應用文件屬組權限
c) 應用文件“其它”權限
SUID:Set UID
前提:此類文件為有可執行權限的命令
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主(此進程的有效身份不是發起者,而是命令文件自身的屬主)
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義
權限設定:
chmodu+s FILE…
chmodu-s FILE…
使用ls-l查看時,此s可能顯示為大寫或小寫兩種形式之一;
屬主原有執行權限時,顯示為小寫;
屬主原無執行權限時,顯示為大寫;
SGID:Set GID
可執行文件上SGID權限:(當SGID作用于文件時)
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬組
權限設定:
chmodg+s FILE…
chmodg-s FILE…
目錄上的SGID權限:(當SGID作用于目錄時)
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
權限設定:
chmodg+sDIR…
chmodg-s DIR…
Sticky:沾滯位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
權限設定:
chmodo+t DIR…
chmodo-t DIR…
例如:
?ls-ld/tmpdrwxrwxrwt12rootroot4096Nov215:44/tmp
剛才在前面我們講了權限數字法,同樣,
三個特殊位也組成一組權限,既suidsgidsticky,可表示為;
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
?
例:chmod4777 /tmp/a.txt
權限位映射
SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限
S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限
Sticky: other,占據other的執行權限位
t: other擁有x權限
T:other沒有x權限
設定文件特定屬性:
chattr +i 不能刪除,改名,更改
chattr +a 只能增加
lsattr 顯示特定屬性
訪問控制列表
ACL:Access Control List,實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt
ACL生效順序:所有者,自定義用戶,自定義組,其他人
為多用戶或者組的文件和目錄賦予訪問權限rwx
mount -o acl /directory
getfacl file |directory
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file |directory
setfacl -X file.acl directory
ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
getfacl可看到特殊權限:flags
默認ACL權限給了x,文件也不會繼承x權限。
base ACL 不能刪除
setfacl-k dir 刪除默認ACL權限
setfacl-b file1清除所有ACL權限
getfaclfile1 | setfacl–set-file=-file2 復制file1的acl權限給file2
mask只影響除所有者和other的之外的人和組的最大權限
Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效。setfacl-m mask::rxfile
–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以.如:
setfacl –set u::rw,u:wang:rw,g::r,o::-file1
備份和恢復ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R –set-file=acl.txt /tmp/dir1
#getfacl -R /tmp/dir1
原創文章,作者:song_linux,如若轉載,請注明出處:http://www.www58058.com/27500