權限
任何一個可執行程序文件能不能啟動為進程,取決發起者對程序文件是否擁有執行權限.即權限決定用戶對文件或者目錄的使用范圍.在Linux系統中,root的權限是最高的,可操作的權限最大,通常情況下root賬號只用于管理系統的重要信息,并不做日常維護工作,所以正確設定用戶的權限對系統的安全性尤為重要.
普通權限:
文件目錄只針對三類用戶:
u :屬主 g :屬組 o :其他用戶
而權限分為三種:
r :讀readable w :寫writable x :寫excutable
權限對文件與目錄的含義:
文件:
r(可讀權限):可以使用類似cat等命令查看其文件的內容
w(可寫權限):可以編輯或刪除其文件
x(可執行) :可以運行此文件
目錄:
r: 可以對此目錄查看目錄內的文件內容,如 ls
w:可以在此目錄創建文件或目錄,但必須有x權限的前提下
x:可以使用cd切換進此目錄或 ls -l 查看目錄內文件的詳細信息
用命令 # ll file 可查看file 的權限以及屬主,組
[root@localhost testdir]# ll total 0 -rw-r--r--. 1 root root 0 Aug 3 22:59 fi [root@localhost testdir]#
一組權限為rwx,用八進制來表示一下; 注意:此排序是不能亂排序的。
權限 二進制 八進制
rwx 111 7
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
如此一來,則每三位權限為一組就可以直接用數字來表示了.如上命令 fi 文件權限為 0644
修改文件權限: chmod
root可以修改如何文件或者目錄的權限,其他用戶只能修改屬主是自己的文件或者目錄
chmod [OPTION]… OCTAL-MODE FILE…
-R: 遞歸修改權限
chmod [OPTION]… MODE[,MODE]… FILE…
chmod可以直接修改權限或者賦予某一項權限:
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + –
chmod [OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE的修改為同RFILE;
更改文件的屬主,屬組 (change ower ) chown
1. chown [OPTION]… [OWNER][:[GROUP]] FILE… //修改文件的屬主或者屬組
# chown
2. chown [OPTION]… –reference=RFILE FILE…
# chown --reference=/etc/inittab /etc/passwd
更改組 (change group ) chgrp :
chgrp [OPTION]… GROUP FILE…
# chgrp bin f1 //修改文件f1屬組為 bin , 此處屬組可以用Gid代替
反掩碼 :umask
在Linux系統里,以root身份創建file的默認權限為644,而目錄為755,普通用戶創建文件是默認是664,目錄默認權限是775.次處造成兩者權限不同是因為umask-反掩碼
文件的最高權限為777,目錄的最高權限為666(目錄沒有執行x權),系統會根據發起創建文件或者目錄的用戶來判斷使用的umask值,然后以(777-umask)|(666-umask)得到的值來作為文件的權限
所以,umask值是從文件或者目錄上屏蔽掉最大權限相應的位,從而得出默認權限
dir :777-umask
file:666-umask (若得出的三位數中有奇數則加1,偶數保留)
umask值是 /etc/bashrc里定義的,用一個判斷語句來決定的,當登錄的用戶UID小于0時使用022作為umask值,否則使用002作為umask值,然后在與系統默認創建文件和目錄的值(666/777)進行減法運算,最后得出的就是文件或目錄的值。
//這就是判斷umask值的if else語句
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
umask 相關命令:
umask: 查看
umask #: 設定
umask 002
umask –S 模式方式顯示
umask –p 輸出可被調用
全局設置: /etc/bashrc 用戶設置: ~/.bashrc
特殊權限 SUID SGID Sticky :
SUID 權限:
執行 設置SUID 權限的文件,執行者可以以文件屬主的身份執行;然而suid只對二進制可執行程序有效,而設置在目錄上無意義
權限設定: chmod u+s FILE
chmod u-s FILE
特設權限位:1—
SGID 權限:
與SUID類似,可作用于目錄
特設權限位:2—
Sticky 位:
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件,其他人無法刪除文件,Sticky設置在文件上無意義
chmod o+t DIR…
chmod o-t DIR…
特設權限位:4—
權限位映射
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:
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 值(自定義用戶,自定義組,擁有組的最大權限) ,而非傳統的組權限 ====>即組的權限只能與mask值相等或者比mask低
# setfacl -m m::rw file/dir
# setfacl -q
getfacl 可看到特殊權限: flags
默認ACL權限給了x,文件也不會繼承x權限。
base ACL 不能刪除
setfacl -k dir 刪除默認ACL權限
setfacl -b file1清除所有ACL權限
getfacl file1 | setfacl –set-file=- file2 復制file1的acl權限給file2
mask只影響除所有者和other的之外的人和組的最大權限
Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限
(Effective Permission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效。
setfacl -m mask::rx file
–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
原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/28501
總結的很好,如果能有一些代碼高亮就更好的。