Linux文件權限管理-2016-8-04

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控制來管理文件權限了。

ACLAccess Control List,實現靈活的權限管理

除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限

注意:

CentOS7.0默認創建的xfsext4文件系統有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 復制file1acl權限給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:

主要的文件操作命令cpmv都支持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測試

 

一.關于文件和目錄的權限基本概述:

111.png

 

我們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

通常我們以下圖表示:

 


權限.png 

 

 

-rw-r–r–:表示這個權限為:644

X的權限我們現在不管它,我們后面會介紹到 

關于不同的權限,文件或目錄有一下的意義,我們稍后來測試:

文件:

r: 可使用文件查看類工具獲取其內容

w: 可修改其內容

x: 可以把此文件提請內核啟動為一個進程

目錄:所以建議最好的目錄權限為:rwxr-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,屬組為lovemeuser2為組成員) ,測試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

 

測試結果:用戶對目錄有寫權限和執行權限時,可以刪除目錄底下的文件,但是卻不能看到目錄下的文件列表。

 

目錄權限總結測試結果:

用戶對目錄單單只有寫權限  或 執行權限  或讀權限 沒有實際意義:

寫權限:無法進入目錄,無法在目錄下創建文件,無法刪除文件,無法去讀目錄下的文件列表;

執行權限:只可以進入目錄,沒有其他的功用;

讀權限:可以看看文件名,沒有別的功用;

讀寫權限:除了可以看看目錄下的文件名,沒有別的功用;

寫 執行權限:可以刪除別人的文件,不可查看目錄下的文件列表,比較危險;

 

所以建議最好的目錄權限為:rwxr-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

(0)
linux_rootlinux_root
上一篇 2016-08-04
下一篇 2016-08-04

相關推薦

  • 軟件包管理2

    四、程序包編譯     程序包編譯安裝:     Application-VERSION-release.src.rpm –> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝     源代碼&#82…

    Linux干貨 2016-08-27
  • 20160805作業-正則表達式

    http://note.youdao.com/yws/public/redirect/share?id=1e40165dc16523400e14433e71683963&type=false

    Linux干貨 2016-08-08
  • shell腳本之批量添加用戶

        沒錯,這是一個簡單的腳本,不寫不知道,寫了才發現自己多垃圾。     我是一名普通的公司網絡管理,接觸linux不長,一直理想都是和馬哥學習linux,可惜因為拖家帶口的原因,沒辦法交學費和馬哥學習,心里小小遺憾吧。每天看著馬哥的文章以及百度搜索的視頻文章學習,感覺自己學…

    Linux干貨 2016-07-07
  • 對防火墻的初步認識

      防火墻,就是用于實現Linux下訪問控制的功能的,它分為硬件的或者軟件的防火墻兩種。無論是在哪個網絡中,防火墻工作的地方一定是在網絡的邊緣。而我們的任務就是需要去定義到底防火墻如何工作,這就是防火墻的策略,規則,以達到讓它對出入網絡的IP、數據進行檢測。    目前市面上比較常見的有3、4層的防火墻,叫網絡層的防火墻,還有7…

    Linux干貨 2017-06-15
  • 文件系統

    文件系統 文件和目錄被組織成一個單根倒置樹結構 文件系統從根目錄下開始,用“/”表示 文件名稱區分大小寫 以.開頭的文件為隱藏文件   一個.表示本目錄。 兩個..表示根目錄 路徑分隔的/      路徑分割為正斜線分割 文件有兩類數據:        元數據:metadata …

    Linux干貨 2017-05-02
  • 22期第二周課堂練習

    Linux上文件系統管理類命令都有哪些,其常用的使用方法及其相關示例演示     (1).cp文件復制命令     單源復制:cp [OPTION]… [-T] SOURCE DEST     多源復制:cp&nbs…

    Linux干貨 2016-08-22

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-08 14:49

    文章整體結構層次清晰,理論結合實際,對文件模型有了詳盡的認識和立即

欧美性久久久久