Linux文件權限管理
學習大綱
一 關于文件和目錄的權限基本概述(rwx);
二 針對文件或目錄權限管理的命令:
a) 相關命令:chown , chgrp ,chmod
chown修改文件屬主 和 屬組
語法:chown [OPTION]… [OWNER][:[GROUP]] FILE…
命令中的冒號可用.替換;
OWNER
OWNER:GROUP
:GROUP
參數:
-R: 遞歸,針對目錄批量修改目錄和目錄以下的文件屬主 屬組;
chown [OPTION]… –reference=RFILE FILE…
讓file文件的屬主和屬組與 rfie的文件的一樣
例如:chowm user1:root test.txt =>修改文件屬主為user1,屬組為root;
chown -R :root test-dir =>修改目錄下的所有文件屬組為 root;
chgrp修改文件的屬組(語法和chown差不多)
語法:chgrp[OPTION]… GROUP FILE…
chgrp[OPTION]… –reference=RFILE FILE…
參數: -R 遞歸
chmod修改文件或目錄權限
語法:chmod [OPTION] … MODE(權限表示法) FILE…
權限表示法通常分為兩類:
MODE一:用戶表示法
修改一類用戶的所有權限:
u= g= o= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + –
MODE二:數字表示法
Chmod 775 test.txt ==chmod u=rwx,g=rwx,o=r-x test.txt
參數:
-R: 遞歸修改權限
chmod[OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE的修改為同RFILE;
三 特殊文件權限 :SUID,SGID,Sticky
SUID : 只能作用于二進制程序文件有效,作用于目錄無效;
功用 : 當用戶執行SUID權限的二進制文件時,獲取文件屬主權利;
如:passwd 命令
操作: chmodu +s FILE…
chmodu -s FILE…
SGID : 可作用于二進制程序文件或目錄;
作用文件時:當用戶執行SGID權限文件時,獲得文件屬組權利;
作用于目錄時:任何用戶在有SGID權限的目錄下創建文件時,文件的屬組都為目錄的的屬組
操作: chmod g+s DIR | file…
chmod g-s DIR | file…
Sticky :只能作用于目錄有執行與修改的目錄上,對文件無效;
功用:當用戶對目錄有執行和修改權限時,不再能刪除不屬于自己的文件;
例如:/tmp的目錄具有Sticky 權限。
操作: chmod o+t DIR…
chmod o-t DIR…
四 特定文件特性屬性: chattr , lasttr
管理員root對所有文件有自高無上的權利,為了避免誤刪除我們需要對文件做一些的特殊的文件權限處理,比如:不能刪除,改名,更改等等,我們就會用到 chattr 命令對文件進行特殊權限處理。
語法:chattr [ -RVf ] [ -v version ] [ mode ] files…
[mode]部分是由+-=和[ASacDdIijsTtu]這些字符組合的,這部分是用來控制文件的屬性。
參數:
+ :在原有參數設定基礎上,追加參數。
– :在原有參數設定基礎上,移除參數。
= :更新為指定參數設定。
A:文件或目錄的 atime (access time)不可被修改(modified)
S:硬盤I/O同步選項,功能類似sync。
a:即append,設定該參數后,只能向文件中添加數據,而不能刪除,只有root才能設定這個屬性。
c:即compresse,設定文件是否經壓縮后再存儲。讀取時需要經過自動解壓操作。
d:即no dump,設定文件不能成為dump程序的備份目標。
i:設定文件不能被刪除、改名、設定鏈接關系,同時不能寫入或新增內容。
j:即journal,設定此參數使得當通過mount參數
s:保密性地刪除文件或目錄,即硬盤空間被全部收回。
u:與s相反,當設定為u時,數據內容其實還存在磁盤中,可以用于undeletion。
五 文件訪問控制列表: getfacl , setfacl
在實際工作中個,可能會有讓某個特定的用戶不能訪問某個文件,讓某個組不能訪問某個目錄,如果只是使用前面的權限控制做不到精確的文件權限管理,我們就可以使用 文件的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生效順序:所有者,自定義用戶,自定義組,其他人
getfacl語法:
?mount -o acl /directory #掛載是啟用ACL功能
?getfacl file |directory #查看文件或目錄的ACL控制列表
?getfaclfile1 | setfacl–set-file=-file2 復制file1的acl權限給file2
setfacl 語法:
?setfacl -m u:chen:rwx file|directory #設置用戶對文件或目錄的有rwx權限
?setfacl -Rm g:lovemegroup:rwX directory #遞歸設置組對目錄有rwX權限
?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文件列表中
?setfacl-k dir #刪除默認ACL權限
?setfacl-b file1 #清除所有ACL權限
mask的作用:
mask只影響除所有者和other的之外的人和組的最大權限
mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效。
setfacl-m mask::rxfile
v–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象 -m一樣只是添加ACL就可以.如:
vsetfacl –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
六 測試案例
測試一:關于文件或目錄的屬主,屬組,其它用戶權限的測試
測試二:目錄的權限位對其意義的測試說明
測試三:關于 SUID SGID STICKY權限測試說明
測試四:關于特定文件特性屬性: chattr , lasttr測試
測試五:文件訪問控制列表: getfacl , setfacl測試
一.關于文件和目錄的權限基本概述:
我們ls -l 查看文件的時候,會看到以上圖片上的信息,不同的字段表示不同的意義,我們單獨的來說明一下:
權限:– rw- r– r– ,開頭一個 – 表示文件為普通文件類型,后面沒三位一組,表示屬主權限,屬組權限,其它人權限;
引用計數:表示該文件的 硬鏈接計數,1便是沒有硬鏈接計數;
所有者:屬主,表示該文件是由誰創建的,是該文件的所有者;
所屬組:屬組,表示該文件的所屬組是那個組;
文件大?。?/span>26195表示文件為26195字節大概為 26K左右;
創建時間:什么時間創建的;
文件名:文件的名稱
注意:查看文件和目錄的看到的信息大都是以上差不多的信息,上面說明也通用
文件權限的 : R W X
– rw- r– r–
通常我們每三個一組表示一類權限分別為:屬主,屬組,其它人
文件的權限主要針對三類對象進行定義:
owner: 屬主, u (rw-)
group: 屬組, g (r–)
other: 其他, o (r–)
每個文件針對每類訪問者都定義了三種權限:
r: Readable , w: Writable , x: eXcutable
通常我們以下圖表示:
-rw-r–r–:表示這個權限為:644
X的權限我們現在不管它,我們后面會介紹到
關于不同的權限,文件或目錄有一下的意義,我們稍后來測試:
文件:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容
x: 可以把此文件提請內核啟動為一個進程
目錄:(所以建議最好的目錄權限為:rwx或 r-x)
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件(不是自己的文件也可以刪除)
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
X:只給目錄x權限,不給文件x權限
測試一:關于文件或目錄的屬主,屬組,其它用戶權限的測試。
現在有三個用戶user1 , user2 , user3 , 一個附加組loveme ; user1 , user2屬于附加組loveme , user3沒有附加組,看看三個用戶對于文件訪問權限如何?
確認三個用戶的屬組
[root@love681 ~]# groups user1 user1 : user1 loveme #user1附加組在loveme中 [root@love681 ~]# groups user2 user2 : user2 loveme #user2附加組在loveme中 [root@love681 ~]# groups user3 user3 : user3
查看文件的屬性信息:屬主user1有讀寫權限,屬組loveme有讀權限,其它用戶沒有權限
(即權限用八進制表示 640)
[root@love681 test-dir]# ll total 0 -rw-r----- 1 user1 loveme 0 Jul 25 22:12 test.txt #文件屬主為user1,屬組為loveme
測試屬主 user1的權限,理論應該為 可以修改,可以查看文件內容:
bash-4.1$ vim test.txt #修改了文件 bash-4.1$ cat test.txt #查看了文件 user1--------user1 user1 is ower ! bash-4.1$ id uid=503(user1) gid=503(user1) groups=503(user1),504(loveme)
測試結果:屬主有讀寫權限,也與權限位為匹配
測試屬組loveme用戶 user2,理論應該是可以讀取該文件的內容:
[user2@love681 test-dir]$ cat test.txt #可以查看文件內容 user1--------user1 user1 is ower ! [user2@love681 test-dir]$ echo user2...........user2 >> test.txt bash: test.txt: Permission denied #無法修改文件內容 [user2@love681 test-dir]$ id uid=501(user2) gid=501(user2) groups=501(user2),504(loveme) [user2@love681 test-dir]$
測試結果:屬組有讀權限,也與權限位為匹配
測試其它用戶 user3,理論應該是不能讀取文件內容的,更不要說修改:
[user3@love681 test-dir]$ id uid=502(user3) gid=502(user3) groups=502(user3) [user3@love681 test-dir]$ cat test.txt cat: test.txt: Permission denied #無法查看文件 [user3@love681 test-dir]$ echo user3........user3 >> test.txt bash: test.txt: Permission denied #無法修改文件 [user3@love681 test-dir]$
測試結果:其它人無任何權限,也與權限位為匹配
測試二:目錄的權限位對其意義的測試說明:
目錄:
r: 可以使用ls查看此目錄中文件列表
w: 可在此目錄中創建文件,也可刪除此目錄中的文件
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
X:只給目錄x權限,不給文件x權限
案例:1.我們創建一個目錄 test_dir , 其權限為 rwxrw–x 屬主為 user1,屬組為loveme(user2為組成員) ,測試user1 , user2 ,user3可以對目錄的操作;
2.修改user3用戶對目錄有 寫和執行權限,測試user3可以由哪些操作?
新建目錄權限為:761
[root@love681 test-dir]# ll total 8 drwxrw---x 2 user1 loveme 4096 Jul 25 22:47 test_dir #目錄權限設置為 761
User1測試:在目錄下新建文件,修改root文件,刪除root文件
[user1@love681 test-dir]$ cd test_dir/ #user1可以正常進入目錄 [user1@love681 test_dir]$ ll total 8 -rw-r--r-- 1 root root 11 Jul 25 22:47 root1 -rw-r--r-- 1 root root 8 Jul 25 22:47 root222 [user1@love681 test_dir]$ touch user111 #可以正常的新建文件 [user1@love681 test_dir]$ echo 123456789 > root1 #不可修改root的文件 bash: root1: Permission denied [user1@love681 test_dir]$ rm root1 #可以刪除root的文件 rm: remove write-protected regular file `root1'? Y [user1@love681 test_dir]$ ll #確認已經刪除了root的文件了 total 4 -rw-r--r-- 1 root root 8 Jul 25 22:47 root222 -rw-rw-r-- 1 user1 user1 0 Jul 25 22:51 user111
測試結果:用戶對目錄有rwx權限,可以正常進入目錄,正常的顯示目錄下的文件,可以正常的新建 刪除自己的文件,還可以刪除不是自己的文件。
User2用戶測試,user2用戶對目錄權限為rw ,測試:新建文件,刪除文件,進入目錄。
[user2@love681 test-dir]$ cd test_dir/ bash: cd: test_dir/: Permission denied #無法進入目錄 [user2@love681 test-dir]$ ll test_dir/ #可以顯示目錄的下的文件名,其它的無法顯示 ls: cannot access test_dir/user111: Permission denied ls: cannot access test_dir/root222: Permission denied total 0 -????????? ? ? ? ? ? root222 -????????? ? ? ? ? ? user111 [user2@love681 test-dir]$ touch test_dir/user22 #無法新建目錄下的文件 touch: cannot touch `test_dir/user22': Permission denied [user2@love681 test-dir]$ rm test_dir/user111 #無法刪除目錄下的文件 rm: cannot remove `test_dir/user111': Permission denied
測試結果:用戶對某個目錄有讀寫權限,無執行權限,只能查看下目錄下的文件名,其它的什么都做不了,證明目錄的執行權限對用戶非常的重要。
User3用戶權限為執行權限,測試用戶:新建文件,刪除文件,進入目錄。
[user3@love681 test-dir]$ cd test_dir/ #可以正常的進入目錄 [user3@love681 test_dir]$ ll #無法查看目錄下的文件 ls: cannot open directory .: Permission denied [user3@love681 test_dir]$ touch user3 #無法新建文件 touch: cannot touch `user3': Permission denied [user3@love681 test_dir]$ rm user111 rm: remove write-protected regular empty file `user111'? Y #無法刪除文件 rm: cannot remove `user111': Permission denied
測試結果:用戶對目錄有執行權限,只能進入該目錄,其它的任何權限,所以單純的給用戶執行權限沒有任何的意義,需要配合讀 或寫 的權限配合使用。
2.修改用戶user3對目錄有寫和執行的權限,測試user3在目錄下創建文件,刪除文件,修改文件。
[user3@love681 test-dir]$ cd /tmp/test-dir/test_dir/ #可以正常的進入該目錄下面 [user3@love681 test_dir]$ ll #無法顯示目錄下文件列表 ls: cannot open directory .: Permission denied [user3@love681 test_dir]$ touch user3 #不可新建文件 [user3@love681 test_dir]$ ll ls: cannot open directory .: Permission denied [user3@love681 test_dir]$ rm user111 #知道文件名可以刪除root的文件 rm: remove write-protected regular empty file `user111'? y [user3@love681 test_dir]$ rm root1 rm: cannot remove `root1': No such file or directory [user3@love681 test_dir]$ rm root111 rm: cannot remove `root111': No such file or directory [user3@love681 test_dir]$ rm root rm: cannot remove `root': No such file or directory [user3@love681 test_dir]$ rm root222 #知道文件名可以刪除root的文件 rm: remove write-protected regular file `root222'? y [user3@love681 test_dir]$ touch user333333
測試結果:用戶對目錄有寫權限和執行權限時,可以刪除目錄底下的文件,但是卻不能看到目錄下的文件列表。
目錄權限總結測試結果:
用戶對目錄單單只有寫權限 或 執行權限 或讀權限 沒有實際意義:
寫權限:無法進入目錄,無法在目錄下創建文件,無法刪除文件,無法去讀目錄下的文件列表;
執行權限:只可以進入目錄,沒有其他的功用;
讀權限:可以看看文件名,沒有別的功用;
讀寫權限:除了可以看看目錄下的文件名,沒有別的功用;
寫 執行權限:可以刪除別人的文件,不可查看目錄下的文件列表,比較危險;
所以建議最好的目錄權限為:rwx或 r-x
測試三:關于 SUID SGID STICKY權限測試說明
關于SUID權限設置說明:(用戶運行SUID權限的應用程序獲得屬主權利,通常為root權限)
例如:我們都知道/etc/shadow文件權限為 000,任何人是不允許查看的,除了管理員;
我們再看看看cat命令的文件權限:
/etc/shadow文件權限
[root@love681 ~]# ll /etc/shadow ---------- 1 root root 1176 Jul 25 22:09 /etc/shadow
/bin/cat 命令的文件權限
[user1@love681 etc]$ ll /bin/cat -rwxr-xr-x 1 root root 48568 May 11 16:59 /bin/cat
root可以使用cat查看/etc/shadow文件內容:
[root@love681 ~]# cat /etc/shadow root:$6$gL6ZlP4s$x89Cs/QKzuwt5V/YfJIxwgLGjooivwFzEY0WaM5ljWwdfoCNhbsc2VSjDdiVp5CZyXVTlnT7KZfQFSKhdOiBE.:17004:0:99999:7::: pulse:!!:17004:::::: sshd:!!:17004:::::: tcpdump:!!:17004:::::: user2:$6$ZI96HEiK$/Fmi37lIugYKPJV7tZkQn2yu8f0aA42pOhl2M9iz3ovR.esjG6xVxH1UaJQIER3SnVeTXA507v.5Fi6cBC7Ha0:17004:0:99999:7:::
user1普通用戶用cat無法查看/etc/shadow文件內容:
[root@love681 ~]# su user1 [user1@love681 root]$ cat /etc/shadow cat: /etc/shadow: Permission denied
設置/bin/cat 為suid權限后,user1再來查看/etc/shadow文件內容:
[root@love681 ~]# chmod u+s /bin/cat [root@love681 ~]# ll /bin/cat -rwsr-xr-x 1 root root 48568 May 11 16:59 /bin/cat
user1可以使用cat命令查看 /etc/shadow文件的內容:
[root@love681 ~]# su user1 [user1@love681 root]$ whoami user1 [user1@love681 root]$ cat /etc/shadow root:$6$gL6ZlP4s$x89Cs/QKzuwt5V/YfJIxwgLGjooivwFzEY0WaM5ljWwdfoCNhbsc2VSjDdiVp5CZyXVTlnT7KZfQFSKhdOiBE.:17004:0:99999:7::: pulse:!!:17004:::::: sshd:!!:17004:::::: tcpdump:!!:17004:::::: user2:$6$ZI96HEiK$/Fmi37lIugYKPJV7tZkQn2yu8f0aA42pOhl2M9iz3ovR.esjG6xVxH1UaJQIER3SnVeTXA507v.5Fi6cBC7Ha0:17004:0:99999:7:::
SUID小結:SUID的權限不能亂給,只在特定的條件下才更給SUID的權限,比如:用戶修改密碼需要通過passwd命令把密碼保存到shadow文件中,此時passwd命令需要SUID權限。
關于SGID權限設置說明:
SGID作用于文件時:
創建一個文件屬主和屬組都為root
[root@love681 root_test_dir]# ll total 4 ----rw-r-- 1 root root 129 Jul 26 01:54 root_test.txt
普通用戶user1 可以查看內容
[user1@love681 root_test_dir]$ cat root_test.txt roots_roots_roots_ sfjsfjlksfjlklsdjfklsajf 123456789 123456789 Wewwew
nano 保存數據保存,權限拒絕
[user1@love681 root_test_dir]$ nano root_test.txt [ Error writing root_test.txt: Permission denied ]
設置二進制程序 nano的SGID權限,使用戶使用nano取得root組的權限:
[root@love681 root_test_dir]# chmod g+s /bin/nano [root@love681 root_test_dir]# ll /bin/nano -rwxr-sr-x 1 root root 178896 Nov 12 2010 /bin/nano
user1用戶再次修改文件,文件可以正常的保存,查看頁顯示修改的內容:
[user1@love681 root_test_dir]$ nano root_test.txt [user1@love681 root_test_dir]$ cat root_test.txt roots_roots_roots_ sfjsfjlksfjlklsdjfklsajf 123456789 123456789 wewwew 1111111111111 222222222223 4444444444444 5555555555555555
小結:SGID作用于二進制文件時,用戶使用該程序時獲得是的root組的權限,root組對于root_test.txt文件時可寫的,所以該用戶可以修改root_test.txt的文件內容。
SGID作用于目錄時:
·root新建了sgid-dir,目錄屬組為 root
[root@love681 root_test_dir]# ll -d sgid-dir/ drwxrwxrwx 2 root root 4096 Jul 26 03:54 sgid-dir/
·root新建的文件屬主 與 屬組都為root
[root@love681 sgid-dir]# whoami root [root@love681 sgid-dir]# touch root1111 [root@love681 sgid-dir]# ll total 0 -rw-r--r-- 1 root root 0 Jul 26 03:53 root1111
·user1用戶新建文件的屬主和屬組都為 user1
[user1@love681 sgid-dir]$ whoami user1 [user1@love681 sgid-dir]$ touch user11111 [user1@love681 sgid-dir]$ ll total 0 -rw-r--r-- 1 root root 0 Jul 26 03:53 root1111 -rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111
·user2用戶新建文件的屬主和屬組都為 user2
[user2@love681 sgid-dir]$ touch user2222 [user2@love681 sgid-dir]$ ll total 0 -rw-r--r-- 1 root root 0 Jul 26 03:53 root1111 -rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111 -rw-rw-r-- 1 user2 user2 0 Jul 26 03:54 user2222 [user2@love681 sgid-dir]$ whoami user2
文件目錄添加SGID權限后,再在目錄下新建文件后查看文件的屬主和屬組。
·添加目錄sgid-dir的SGID權限
[root@love681 root_test_dir]# chmod g+s sgid-dir/ [root@love681 root_test_dir]# ll total 4 drwxrwsrwx 2 root root 4096 Jul 26 03:54 sgid-dir
·再使用user1在目錄下新建文件 111user111,屬主為user1,屬組變為了root
[user1@love681 sgid-dir]$ touch 111user111 [user1@love681 sgid-dir]$ ll total 0 -rw-rw-r-- 1 user1 root 0 Jul 26 04:34 111user111 -rw-r--r-- 1 root root 0 Jul 26 03:53 root1111 -rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111 -rw-rw-r-- 1 user2 user2 0 Jul 26 03:54 user2222
·再使用user2在目錄下新建文件 222user222,屬主為user2,屬組變為了root
[user2@love681 sgid-dir]$ touch 222user222 [user2@love681 sgid-dir]$ ll total 0 -rw-rw-r-- 1 user1 root 0 Jul 26 04:34 111user111 -rw-rw-r-- 1 user2 root 0 Jul 26 04:35 222user222 -rw-r--r-- 1 root root 0 Jul 26 03:53 root1111 -rw-rw-r-- 1 user1 user1 0 Jul 26 03:53 user11111 -rw-rw-r-- 1 user2 user2 0 Jul 26 03:54 user2222
小結:SGID權限添加在目錄上,會使不管是哪個用戶在下面新建文件,文件的屬組一定為該目錄的屬組,相當與這是是這個組的成員都可以修改目錄下的文件。
關于STICKY權限設置說明:
Sticky權限定義為:具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件。
Linux中最明顯的目錄為 /tmp目錄:
·查看/tmp目錄權限
[root@love681 /]# ll -d /tmp drwxrwxrwt. 10 root root 4096 Jul 26 03:32 /tmp #STICKY權限體現在other的X位上,有表示為t;
·使用user1刪除下面的文件試一試
[user1@love681 tmp]$ rm yum.log #刪除yun.log文件 rm: remove write-protected regular empty file `yum.log'? y rm: cannot remove `yum.log': Operation not permitted #權限不夠無法刪除 [user1@love681 tmp]$ ll total 532 -rw-rw-r-- 1 user2 user2 0 Jul 22 19:07 22222 -rwx------. 1 root root 931 Jul 22 16:03 ks-script-w1jlxI -rwxr-xr-x. 1 root root 67 Jul 22 16:03 ks-script-w1jlxI.log -rw-r--r-- 1 root root 292 Jul 22 16:47 nouser drwx------ 2 root root 4096 Jul 22 16:12 pulse-jVbgN7JshlCa drwx------ 2 gdm gdm 4096 Jul 22 16:13 pulse-V1nHqnPjJCfc -r--r--r-- 1 root root 506368 Jul 22 16:27 screen-4.0.3-19.el6.x86_64.rpm drwxrwsr-x 2 root root 4096 Jul 22 18:57 sgid drwxrwsrwx 2 root root 4096 Jul 22 19:08 ssgid drwxrwxrwx 2 root root 4096 Jul 25 23:28 test-dir drwx------ 2 root root 4096 Jul 22 16:13 virtual-root.RvN4tH -rw-------. 1 root root 0 Jul 22 15:51 yum.log
·使用root取消tmp的STICKY權限,再次使用user1刪除文件試一試
[root@love681 tmp]# chmod o-t /tmp #取消/tmp的sticky的權限 [root@love681 tmp]# ll -d drwxrwxrwx. 10 root root 4096 Jul 26 03:32 . #STICKY權限 t在other的X位上消失了 [root@love681 tmp]# su user1 #切換user1用戶 [user1@love681 tmp]$ rm yum.log #刪除root的文件 rm: remove write-protected regular empty file `yum.log'? Y #可以正常的刪除文件 [user1@love681 tmp]$ ll total 532 -rw-rw-r-- 1 user2 user2 0 Jul 22 19:07 22222 -rwx------. 1 root root 931 Jul 22 16:03 ks-script-w1jlxI -rwxr-xr-x. 1 root root 67 Jul 22 16:03 ks-script-w1jlxI.log -rw-r--r-- 1 root root 292 Jul 22 16:47 nouser drwx------ 2 root root 4096 Jul 22 16:12 pulse-jVbgN7JshlCa drwx------ 2 gdm gdm 4096 Jul 22 16:13 pulse-V1nHqnPjJCfc -r--r--r-- 1 root root 506368 Jul 22 16:27 screen-4.0.3-19.el6.x86_64.rpm drwxrwsr-x 2 root root 4096 Jul 22 18:57 sgid drwxrwsrwx 2 root root 4096 Jul 22 19:08 ssgid drwxrwxrwx 2 root root 4096 Jul 25 23:28 test-dir drwx------ 2 root root 4096 Jul 22 16:13 virtual-root.RvN4tH
小結:STICKY權限只適用于目錄上,可以讓讀寫權限的用戶無法刪除目錄下不屬 于自己的文件。
測試四:關于特定文件特性屬性: chattr , lasttr測試
關于chattr常用參數測試說明(A a i)
·正常情況下,root用戶可以刪除系統中很多文件,包括000權限文件
[root@love681 tmp]# rm -rf 22222 #刪除user1的用戶文件 [root@love681 tmp]# rm -rf ks-script-w1jlxI #刪除user2用戶的文件 [root@love681 tmp]# ll total 528 -rwxr-xr-x. 1 root root 67 Jul 22 16:03 ks-script-w1jlxI.log -rw-r--r-- 1 root root 292 Jul 22 16:47 nouser drwx------ 2 root root 4096 Jul 22 16:12 pulse-jVbgN7JshlCa drwx------ 2 gdm gdm 4096 Jul 22 16:13 pulse-V1nHqnPjJCfc -r--r--r-- 1 root root 506368 Jul 22 16:27 screen-4.0.3-19.el6.x86_64.rpm drwxrwsr-x 2 root root 4096 Jul 22 18:57 sgid drwxrwsrwx 2 root root 4096 Jul 22 19:08 ssgid drwxrwxrwx 2 root root 4096 Jul 25 23:28 test-dir drwx------ 2 root root 4096 Jul 22 16:13 virtual-root.RvN4tH
·有時候擔心root誤操作,可以使用chattr設置文件的特殊權限,使權限對root用戶也有效
[root@love681 test-dir]# ll total 0 -rw-rw-r-- 1 user1 user1 0 Jul 26 06:38 user1.bak #user1重要備份文件 -rw-rw-r-- 1 user2 user2 0 Jul 26 06:39 user2.bak #user2重要備份文件 -rw-rw-r-- 1 user3 user3 0 Jul 26 06:39 user3.bak #user3重要備份文件 [root@love681 test-dir]# chattr +A user1.bak #設置atime無法在修改 [root@love681 test-dir]# chattr +a user2.bak #設置無法刪除,只能追加內容 [root@love681 test-dir]# chattr +i user3.bak #設置對文件什么操作都不行 [root@love681 test-dir]# ll total 0 -rw-rw-r-- 1 user1 user1 0 Jul 26 06:38 user1.bak #表面上無法看出文件有任何的變化 -rw-rw-r-- 1 user2 user2 0 Jul 26 06:39 user2.bak -rw-rw-r-- 1 user3 user3 0 Jul 26 06:39 user3.bak
lsattr查看文件的特殊權限
[root@love681 test-dir]# lsattr #查看當前目錄下文件的特殊權限,默認文件有e權限 -------------e- ./user444 ----i--------e- ./user3.bak -----a-------e- ./user2.bak -------A-----e- ./user1.bak
·嘗試使用root用戶修改文件的內容
[root@love681 test-dir]# lsattr #查看文件的特殊權限 -------------e- ./user444 ----i--------e- ./user3.bak -----a-------e- ./user2.bak -------A-----e- ./user1.bak [root@love681 test-dir]# stat user1.bak #-A權限測試,atime時間訪問不修改 File: `user1.bak' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 393221 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 503/ user1) Gid: ( 503/ user1) Access: 2016-07-28 23:06:39.839996710 +0800 Modify: 2016-07-28 23:06:39.839996710 +0800 Change: 2016-07-28 23:06:39.839996710 +0800 [root@love681 test-dir]# cat user1.bak #查看下文件 [root@love681 test-dir]# stat user1.bak File: `user1.bak' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 393221 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 503/ user1) Gid: ( 503/ user1) Access: 2016-07-28 23:06:39.839996710 +0800 #文件atime的時間沒有變化 Modify: 2016-07-28 23:06:39.839996710 +0800 Change: 2016-07-28 23:06:39.839996710 +0800 [root@love681 test-dir]# mv user3.bak root.bak #root無法改名 i權限的文件 mv: cannot move `user3.bak' to `root.bak': Operation not permitted [root@love681 test-dir]# rm -rf user2.bak #root無法刪除 a權限的文件 rm: cannot remove `user2.bak': Operation not permitted
小結:在特殊權限控制下,可以限制root用戶不能刪除,修改某些用戶的特殊文件或系統特殊文件
測試五:文件訪問控制列表: getfacl , setfacl測試
1.setfacl常用參數的測試說明:
雖然特殊權限可以控制root對文件的部分權利,但是我們實際中讓某個組或用戶無法訪問或修改某文件,無法提供更精確的權限控制,此時我們就需要用到文件的ACL功能。
實例1:root的文件,user1可以修改該文件,user2只可讀取該文件,user3無任何權限(root組只有root)
·root創建文件 設置文件ACL
[root@wCentos7 getfacl]# ll total 0 -rw-r--r--. 1 root root 0 Aug 3 21:12 roots [root@wCentos7 getfacl]# setfacl -m u:user1:rw roots #設置user1對文件的讀寫權限 [root@wCentos7 getfacl]# setfacl -m u:user2:r roots #設置user2對文件的讀權限 [root@wCentos7 getfacl]# setfacl -m u:user3:- roots #設置user3對文件沒有權限 [root@wCentos7 getfacl]# getfacl roots #查看文件ACL # file: roots # owner: root # group: root user::rw- user:user1:rw- user:user2:r-- user:user3:--- group::r-- mask::rw- other::r--
·檢測user1用戶對文件的權限讀寫都可以
[user1@wCentos7 getfacl]$ echo 1234 > roots [user1@wCentos7 getfacl]$ cat roots 1234
·檢測user2用戶對文件的權限讀
[user2@wCentos7 getfacl]$ cat roots 1234 [user2@wCentos7 getfacl]$ echo 2134 >roots bash: roots: Permission denied
·檢測user3用戶對文件沒有權限
[user3@wCentos7 getfacl]$ cat roots cat: roots: Permission denied [user3@wCentos7 getfacl]$ echo 1234567 >roots bash: roots: Permission denied
2.setfacl權限順序測試說明:
在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。
[root@love681 testdir]# mkdir -p /date/testdir #創建目錄 [root@love681 testdir]# groupadd g1 #創建g1組 [root@love681 testdir]# groupadd g2 #創建g2組 [root@love681 testdir]# groupadd g3 #創建g3組 [root@love681 testdir]# useradd -G g2 alice [root@love681 testdir]# useradd -G g3 tom [root@love681 testdir]# chmod g+s /date/testdir/ [root@love681 testdir]# chown :g1 /date/testdir/ [root@love681 testdir]# setfacl -Rm g:g2:rwX ../testdir/ #設置g2組權限 [root@love681 testdir]# setfacl -Rm g:g3:rX ../testdir/ #設置3組權限 [root@love681 date]# ll -d testdir/ drwxrws---+ 2 root g1 4096 Jul 29 02:13 testdir/ [root@love681 date]# getfacl testdir/ #查看設置的權限 # file: testdir/ # owner: root # group: g1 # flags: -s- user::rwx group::r-x group:g2:rwx group:g3:r-x mask::rwx other::---
3.備份與恢復ACL列表:
備份目錄的testdir的ACL列表(-R遞歸備份目錄下所有的ACL)
root@love681 date]# getfacl -R testdir > testdir.acl.txt #備份目錄的ACL列表 [root@love681 date]# ll total 8 drwxrws---+ 2 root g1 4096 Jul 29 02:13 testdir -rw-r--r-- 1 root root 1084 Jul 29 13:42 testdir.acl.txt
恢復目錄的testdir的ACL列表(-R遞歸恢復目錄下所有的ACL)
[root@love681 date]# setfacl -R -b testdir #清除ACL目錄 [root@love681 date]# getfacl testdir #查看目錄的ACL清空了 # file: testdir # owner: root # group: g1 # flags: -s- user::rwx group::r-x other::--- [root@love681 date]# setfacl -R --set-file=testdir.acl.txt testdir #恢復ACL到目錄 [root@love681 date]# getfacl testdir #查看目錄ACL恢復了 # file: testdir # owner: root # group: g1 # flags: -s- user::rw- group::rw- group:g2:rwx group:g3:r-x mask::rwx other::r--
原創文章,作者:linux_root,如若轉載,請注明出處:http://www.www58058.com/28996
文章整體結構層次清晰,理論結合實際,對文件模型有了詳盡的認識和立即