實驗環境:
Linux系統版本為CentOS6.8_x86_64版本,以root用戶和sjsir用戶遠程用xshell連接系統,進行試驗。
文本目錄:
1.文件的屬性
2.文件權限相關的命令
3.umask 新建文件和目錄的默認權限
4.Linux文件系統上的特殊權限:SUID SGID SBIT
5.文件隱藏屬性 chattr lsattr
6.訪問控制列表ACL
博文問題:
1.為什么要學習文件權限?
答:linux的最基本的哲學思想指出,linux一切皆文件,我們學好文件權限管理之后,可以明白linux管理員的權限之大,可以利用chatt命令去鎖定一個文件,防止管理員去誤操作或者誤刪除等失誤操作造成系統的損壞或者重要的配置文件被刪除;學習文件權限,我們可以更加靈活的賦予除root和其他人的權限,更加方便的對單用戶或者用戶組的設置,更加便捷的讓用戶或用戶組去操作和編輯文件;對文件設置SUID、SGID、SBIT特殊權限,更加方便對用戶放權,讓用戶方便編輯和操作系統上可以讓用戶操作的配置文件。
2.隱藏屬性的重要性?
答:隱藏屬性對于系統有很大的幫助,尤其是對于系統安全上面,chattr可能只對ext X的文件系統有效。主要作用是避免文件被用戶(包括超級用戶root),誤刪除或者進行誤操作,通常用于保護一些重要的文件。
3.什么是ACL?
ACL是Access Control List的縮寫,主要的目的是提供傳統的owner、group、others的read、write、execute權限之外的
具體權限設置。ACL可以針對單一用戶、單一文件或目錄來進行r、w、x的權限設置,對于需要特殊權限的使用狀況非常有幫助。
文件權限分析:
-
文件的屬性:
-rw-r–r– 2 root root 26195 Dec 17 11:21 install.log
權限 硬鏈接數 所有者 所屬組 文件大小 文件創建時間 文件名
權限第一項的介紹:
-:這是一個普通文件
d:這是一個目錄
l:這是一個軟連接或硬鏈接
b:設備文件,塊設備
c:設備文件,字符設備
s:套接字文件
p:管道文件
文件或目錄的權限:
文件:
r:可讀,可以使用類似cat等命令查看文件內容
w:可寫,可以編輯或者刪除此文件
x:可執行,exacutable,可以在命令提示符下面當做命令提交給內核運行
目錄:
r:可以對此目錄執行ls列出目錄內部的所有文件
w:可以對此目錄創建文件
擴展:w對于目錄的含義是是否有更改該目錄結構列表的權限
目錄中有w權限,就可以做以下的操作:
新建新的文件與目錄;
刪除已經存在的文件與目錄(無論該文件的權限為何);
將已經存在的目錄或文件進行重命名;
轉移該目錄內的文件、目錄的位置;
x:可以使用cd切換進此目錄,可以使用ls -l查看內部文件的詳細信息
rwx對應二進制的轉換
0 000 — :無任何權限
1 001 –x :有執行權限但無讀和寫權限
2 010 -w- :有寫權限但無讀和執行權限
3 011 -wx : 有寫和執行權限但無讀權限
4 100 r– :有讀權限但無寫和執行權限
5 101 r-x :有讀和執行權限但無寫權限
6 110 rw- :有讀和寫權限但無執行權限
7 111 rwx :擁有讀寫執行權限
2.文件權限相關的命令:
a.修改文件的權限:
chmod命令:
-R 遞歸修改權限
①直接修改文件的權限
chmod MODE file
MODE使用的是八進制的數字
chmod 777 test
②修改一類用戶的所有權限
u= g= o= ug= a= u=,g=
=后面跟的權限直接是rwx
chmod u=rx test
chmod g=r,o=w test
③修改一類用戶某位或某些位的權限
u+ u- g+ g- o+ o- a+ a- + –
加減號右面跟著的是r,w,x
chmod a+x test
④參考FILE1文件的權限將FILE2的權限設定為相同的權限。
–reference=/path/to/somefile file
chmod –reference=test hello
b.修改文件的屬主
chown (該命令只有root管理員才能使用此命令)
-R 遞歸修改 修改目錄及其內部文件的屬主
①直接修改文件的屬主,不會修改文件的屬組
chown USERNAME file1
chown sjsir hello
改變目錄的屬主時,不會改變目錄下的文件的屬主
②同時修改文件的屬主和數組
chown USERNAME:GRPNAME file
chown hadoop:sjsir hello
chown USERNAME.GRPNAME file
chown sjsir.hadoop hello
③參考FILE1文件的屬主修改FILE2文件的屬主
(這種方法也可修改文件的屬主和屬組)
–reference=/path/to/somefile file
chown –reference=test hello
c.修改文件的屬組
chgrp:改變文件屬組(只有管理員root才有改權限)
-R 遞歸修改 修改目錄及其內部文件的屬組
①直接修改文件的屬組
chgrp GRPNAME file1將文件的屬組改為前面的用戶
chgrp sjsir hello
②參考FILE1文件的屬組修改FILE2文件的屬組
–reference=/path/to/somefile file
chgrp –reference=test hello
3.umask 新建文件和目錄的默認權限:
umask值:可以用來保留在創建文件權限,就是制定“目前用戶在新建文件或目錄的時候的權限默認值”
新建FILE 權限: 666-umask,如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建DIR 權限: 777-umask
umask:查看當前用戶的umask值
非特權用戶umask是002
root 的umask是022
umask #: 設定當前用戶的umask值(默認設置僅對當前進程有效,若想徹底改變,需將文件寫到配置文件中) 例:umask 002
umask –S 模式方式顯示
root用戶顯示的是:
u=rwx,g=rx,o=rx
umask –p 輸出可被調用
全局設置:/etc/bashrc 用戶設置:~/.bashrc
4.Linux文件系統上的特殊權限:SUID SGID SBIT
a.前提:進程有屬主和屬組;文件有屬主和屬組
①任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
②啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
③進程訪問文件時的權限,取決于進程的發起者
進程的發起者,同文件的屬主:則應用文件屬主權限
進程的發起者,屬于文件屬組;則應用文件屬組權限
應用文件“其它”權限
b.SUID
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID 只對二進制可執行程序有效
SUID 設置在目錄上無意義
權限設定:
chmod u+s FILE…
chmod u+s hello
chmod u-s FILE…
chmod u-s hello
c.SGID
①對于文件的設置
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬組
權限設定:
chmod g+s FILE…
chmod g+s hello
chmod g-s FILE…
chmod g-s hello
②目錄上的SGID 權限
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
一旦某目錄被設定了SGID ,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
權限設定:
chmod g+s DIR…
chmod g+s testdir
chmod g-s DIR…
chmod g-s testdir
d.Sticky位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
權限設定:
chmod o+t DIR…
chmod o-t DIR…
e.權限位映射
SUID: user, 占據屬主的執行權限位
s: 屬主擁有x 權限
S:屬主沒有x 權限
SGID: group, 占據屬組的執行權限位
s: group 擁有x 權限
S:group 沒有x 權限
Sticky: other, 占據other 的執行權限位
t: other 擁有x 權限
T:other 沒有x
5.文件隱藏屬性 chattr lsattr:
隱藏屬性對于系統有很大的幫助,尤其是對于系統安全上面,chattr可能只對ext X的文件系統有效。
主要作用是避免文件被用戶(包括超級用戶root),誤刪除或者進行誤操作,通常用于保護一些重要的文件。
a.鎖定與解鎖文件的讀時間(atime)
chattr +A test.txt 鎖定
chatter +A nihao
chattr -A test.txt 解鎖
chattr -A nihao
b.令文件不能被刪除、改名、修改內容,包括超級用戶(root用戶)。使用i選項對于系統安全性有很大的幫助,只有root用戶可以擁有此權限。
chattr +i test.txt 添加
chattr +i nihao
chattr -i test.txt 解除
chattr -i nihao
c.文件只能增加數據,可以查看,但不能刪除文件也不能修改數據。
chattr +a test.txt 增加屬性
chattr +a nihao
chattr -a test.txt 刪除屬性
chattr -a nihao
d.查看文件的attr的標記:
lsattr test.txt
6.訪問控制列表ACL:
a.什么是ACL?
ACL是Access Control List的縮寫,主要的目的是提供傳統的owner、group、others的read、write、execute權限之外的具體權限設置。ACL可以針對單一用戶、單一文件或目錄來進行r、w、x的權限設置,對于需要特殊權限的使用狀況非常有幫助。
b.具體的ACL分類:
用戶(user):針對用戶來設置權限
用戶組(group):針對用戶組來設置權限
默認屬性(mask):在該目錄下新建文件或目錄的時候設置新數據的默認權限
c.關于acl的一個小說明:
①acl是除了文件的所有者所屬組和其他人,對于額外的用戶設定的權限;
②CentOS7.0默認創建的xfs和ext4文件系統有ACL功能;
③CentOS7.X之前版本,認手工創建的ext4文件系統無ACL功能。
需手動增加:
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt
④ACL生效順序:所有者,自定義用戶,自定義組,其他
⑤acl支持的分區的類型是ext4和xfs分區類型(對于windows支持的分區類型fat,ntfs,acl暫不支持)
fat分區中文件的權限是由磁盤元數據的分區決定的,fat分區對于linux系統來說是沒有權限的,所謂的linux系統現在fat分區的文件有權限的分類是linux系統為文件虛擬出來的權限,不符合linux系統的文件權限,真實權限不存在。
d.設置某個目錄或文件的ACL:
①單文件單次設置和刪除acl權限:
添加權限:
setfacl -m u:username:(rwx/7) file (設置名為username對于file的權限)
取消權限:
setfacl -x u:username file (刪除username對于file的權限)
setfacl -b file (擦除所有的ACL權限)
②批量設置和刪除多用戶對于文件的ACL權限
vi/nano setfacl.txt 將需要添加的信息以下面的格式寫入到文件中
u:username1:(rwx/7)
u:username2:(rwx/7)
……
g:groupname1:(r–/4)
g:groupname2:(rw-/6)
……
setfacl -M setfacl.txt file | Dir 將setfacl.txt中的內容寫入到file|Dir中
vi delfacl.txt 將想要取消的信息寫入到下面的文件中
u:username1
u:username2
….
g:groupname1
….
setfacl -X delfacl.txt file | Dir 將delfacl.txt中的內容取消對于file|dir的設置
③重新設置文件的ACl權限:
setfacl –set u::rw,u:sjsir:r,g::rw,o::- file
④對于文件夾設定權限:
setfacl -m u:username:(rwx/7) dir
然后,root用戶創建file1,對于file1的文件屬性來說,無acl權限
setfacl -d u:username2:(rw-/6) dir
然后,用戶創建file2 文件,對file2有剛剛設定用戶的權限,但用戶的權限依然小于mask的權限
解釋:默認文件權限,當使用-d命令設置后,僅對設置后,再創建新文件擁有設定的acl權限,對之前用戶創建舊文件無效
⑤對-d設置的文件權限無效
setfacl -k dir
e.查看文件或目錄的acl權限
getfacl file | Dir
f.acl中 mask的說明:
mask值相當于除了超級用戶(root)和其他人(others)之外的所有人的設定權限的最高權限的鎖定位,這些用戶包括組對于文件或目錄來說只能比ACl權限中的mask值得權限小,但無法超過mask的值給定的權限,若用戶原來的權限為rwx,mask值給定的為r-x,則在用戶真實對于文件或者目錄的權限為r-x,而非原本的rwx;用戶原來的權限為r–,mask給定的權限仍然為r-x,則用戶真實的權限為r–,以原本的權限為主。
得出:
用戶(組)權限>mask給定的值,則用戶的最終權限以mask權限為真實權限執行;
用戶(組)權限<mask給定的值,則用戶的最終權限以原來用戶的權限為真實權限執行
原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/29342
文章整體思路清晰,對命令的語法和常見選項有了詳細的總結與實際操作。可以嘗試著有一些適當的縮進。