1. 程式人生 > >Linux下對檔案許可權的管理

Linux下對檔案許可權的管理

一、基本含義
1.檔案許可權存在的意義
(1)檔案許可權是系統最底層的安全設定方法之一
(2)許可權設定的作用是保證檔案可以被可用的使用者做相應的操作

2.檔案許可權的檢視
(1)ls -l file 檢視檔案的屬性
(2)ls -ld dir 檢視目錄的屬性
首先建立一個目錄test,ls -ld檢視該目錄的屬性
在這裡插入圖片描述
然後在test目錄下建立一個檔案file,ls -l檢視檔案的屬性
在這裡插入圖片描述
(3)ll file =ls -l file
在這裡插入圖片描述
(4)ll -d dir =ls -ld dir

注:ll是個別名,是對ls -l的縮寫

3.檔案許可權的讀取
" - rw- r-- r–. 1 root root 0 Jan 1 09:24 file"
<1>- 檔案型別

  "-"  空檔案或者文字 
   l 軟連結相當於快捷方式  
   s 套接字(socket一個程式對外加劉的介面,通過他可以和程式內部交流) d  目錄   
   b( block塊裝置 dev下的sdb1對U盤檔案進行管理,檔案所管理的是一個塊裝置)
   c (字元裝置,顯示字元的檔案就是一個字元裝置)

<2> -rw- r-- r-- 檔案許可權

1.【u】檔案的擁有者對檔案可以做的
2.【g】檔案的組對檔案可以做的
3.【o】其他人可以對檔案做的

<3>‘1’
對檔案:檔案的內容被系統記錄的次數,也是刪除時要刪除的次數 即檔案的硬連結個數
對目錄:目錄中子目錄的個數
<4> root
檔案所有人 即檔案是誰建立的
<5>root 檔案所有組
<6> 0
對檔案:檔案大小
對目錄:目錄中子檔案元資料的大小 (matedate可以理解為檔案的屬性)
一個空目錄的預設大小為6
在這裡插入圖片描述


<7>檔案最後一次被更改的時間(檔案內容)不包含檔案屬性被修改的時間
<8>檔名
二、對許可權的管理
1.管理屬性 改變檔案的所有人和所有組

例:先切換到mnt/中即對應的路徑下,並建立一個目錄test以及五個檔案file1-file5
在這裡插入圖片描述
在test下建立檔案file1-file3
在這裡插入圖片描述
執行watch -n 1 ls -lR /mnt/監控/mnt/下檔案及目錄屬性的變化
在這裡插入圖片描述
在當前介面重新開啟一個shell進行操作
在這裡插入圖片描述

注:遞迴顯示 ls - lR 顯示目錄下的所有,所有人所有組的的東西只能超級使用者來分配,
誰建立的東西就屬於誰,要更改的使用者和組必須存在

(1)chown username file|dir 改變檔案的使用者
在這裡插入圖片描述


(2)chgrp groupname file|dir 改變檔案的組
在這裡插入圖片描述

注:對目錄的操作預設情況下命令的操作只限於本身,其裡面的內容是不會改變的
在這裡插入圖片描述
#####遞迴 -R 更改目錄本身和裡面所有內容的命令
(3)chgrp -R groupname dir
在這裡插入圖片描述
(4)chown -R username dir
在這裡插入圖片描述
(5)chown username:groupname file|dir 同時改變所有人和所有組用:隔開
在這裡插入圖片描述

(6)chown -R username:groupname dir

(7)chown 和 chgrp 後都可以加多個檔名同時改變多個檔案所有人或所有組
在這裡插入圖片描述
2.如何改變檔案的許可權
(1). 對許可權的理解
許可權分為 r w x 前十位分為三部分

① r :對檔案而言r表示是否可以檢視檔案的內容 cat file
對目錄來說表示是否可以檢視目錄中有什麼子檔案或者子目錄 ls dir

<1> 先去掉檔案file1 的所有許可權
在這裡插入圖片描述
<2>超級使用者下vim編輯檔案,由於沒有任何許可權所以儲存的時候要加!強制退出儲存(注: 所有的許可權限制對超級使用者都是沒有用的)在這裡插入圖片描述
<3>超級使用者下cat檢視此檔案的內容仍然是可以檢視的
在這裡插入圖片描述
<4>切換到student使用者下編輯此檔案,系統會提示沒有許可權
在這裡插入圖片描述
<5>在student使用者下檢視此檔案內容系統仍會提示沒有許可權,如圖
在這裡插入圖片描述

② w: 對檔案來說是是否可以更改i檔案的內容
對目錄可寫就是可以更改目錄或目錄中檔案的元資料,元資料就是屬性
<1>首先刪除其他檔案方便觀察,新建一個目錄dir,這個目錄的所有者對目錄有讀寫和執行的權利,所以可以對檔案和目錄進行移動(檔案或目錄的移動是一個重新命名的過程)
在這裡插入圖片描述
<2>切換到student使用者下,執行之前的作業系統會提示沒有許可權
在這裡插入圖片描述
<3>給目錄dir的其他使用者寫的許可權
在這裡插入圖片描述
<4> 再將file1移動到dir下便可成功(重新命名的過程)
在這裡插入圖片描述
在這裡插入圖片描述

注:對檔案可寫不代表可以更改檔案的名字,檔案的名字是檔案的屬性,在對檔案可寫時是不可以更改的

③x: 對檔案:是否可以通過檔案的名稱呼叫檔案內記錄的程式
對目錄:是否可以進入目錄
<1>先賦給檔案file1滿許可權,在檔案中寫入date命令,並cat檢視檔案內容
在這裡插入圖片描述
<2> ./file1 執行此檔案
在這裡插入圖片描述

(2).更改許可權的方式
<1>chmod <u|g|o><+|-|=><r|w|x> file|dir
例1. chmod u+x /mnt/file1 (增加檔案所有人對檔案執行的許可權)
在這裡插入圖片描述
例2. chmod g+w /mnt/file1 (增加檔案所有組對檔案寫的權利)
在這裡插入圖片描述
例3. chmod o-r file1 (去掉其他使用者對此檔案讀的權利)在這裡插入圖片描述
例4. chmod u=rx /mnt/file1 賦予mnt/下的file1讀和執行的許可權
在這裡插入圖片描述
例5.chmod ugo+x /mnt/fiel2 (給/mnt/file2檔案的所有人,所有組和其他人都具有執行此檔案的許可權)
在這裡插入圖片描述
例6. chmod u-r,g+w,o=x mnt/file3
在這裡插入圖片描述
例7. chmod -r /mnt/file4 (去掉每一位對此檔案讀的權利)
在這裡插入圖片描述

注:u g o的含義

u 檔案的所有人
g 檔案所有組
o 其他使用者
“+” 表示增加
“-” 表示去掉
“=” 表示設定,檔案設定的屬性,會覆蓋掉之前的許可權

相同的可以合併,不同的用","隔開

<2> chmod xxx file (xxx表示三個數字)

r 2^2=4
w 2^1=2
x 2^0=1

按位計算 ,滿許可權 777 ,無許可權000,對應的位置沒有字元 * 0 有 字元* 1

7 rwx
6 rw-
5 r-x
4 r- -
3 -wx
2 -w-
1 - -x
0 - - -

例1.chmod 777 file1 = chmod ugo=rwx (滿許可權)
在這裡插入圖片描述
例2. chomd 740 file2 = chmod u=rwx,g=r,o=- - - file2
在這裡插入圖片描述

注:
1>.目錄有寫的許可權,讀和執行是必須賦予的
2>.沒有明確說明的權力就表示回收
3>.預設權力為了安全 
4>. 一個目錄的預設權力是755 
5>.檔案的預設許可權是644 沒有執行許可權  ,日誌檔案系統會預設把檔案的執行權力回收,這是軟體本身決定的
6>.windows系統沒有linux系統穩定,前者系統下檔案預設有執行許可權
7>.不同的檔案系統預留的許可權是不同的

3.umask

umask 系統建立檔案時預設保留的權力
作用: 檢視系統的預留許可權 , umask 可控,預留越多系統越安全
在這裡插入圖片描述
1) 使用方式: umask 077 臨時設定系統預留許可權為077
在這裡插入圖片描述
在當前shell下建立一個檔案,此檔案的許可權是600(檔案會預設回收執行許可權,即所有檔案的許可權每一位自動-1)
在這裡插入圖片描述
關閉當前shell,新開啟一個shell並建立新的檔案,其許可權會恢復預設
在這裡插入圖片描述

注: 當前shell關閉umask會還原 系統記憶體等資源會被回收,對umask的設定寫在檔案下才會永久被儲存

2)永久更改umask
<1> vim /etc/bashrc ###etc/bashrc 是shell的配置檔案(改變裝置的預留許可權)
if [ $UID -gt 199 ] && [ " id -gn" = " id -un " ]; then
umask 002 普通使用者的umask
else
umask 022 超級使用者的umask
fi

注:<1> -gt表示大於
       <2> id -gn 表示使用者所有組
       <3>id -un 表示使用者的名字
       <4>if 條件語句的意思是:如果使用者的UID大於199,並且該使用者的組和使用者的名字相同,
         那該使用者的umask值就為002,否則其umask值為022
        普通使用者的UID大於1000,所以預設umask值為002
        超級使用者的UID是0,小於199,所以其預設umask是022

如圖所示:1>普通使用者的umask為002,超級使用者的umask為022
在這裡插入圖片描述

2>如圖,修改之後將普通使用者的umask設為070,超級使用者的設為077在這裡插入圖片描述
3>設定完之後:wq儲存退出,此時檢視超級使用者umask沒有改變,是因為沒有更新檔案在這裡插入圖片描述
4> 程式初始化 source /etc/bashrc 後再次檢視發現umask變了
在這裡插入圖片描述
<2> vim etc/profile 編輯系統配置檔案/etc/profile(改變系統預留許可權)
if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
umask 002 普通使用者的umask
else
umask 022 超級使用者的umask
fi

例:1>vim etc/profile 編輯後退出儲存
在這裡插入圖片描述
2>程式未初始化前檢視umask
在這裡插入圖片描述
3> source /etc/profile 程式初始化後檢視umask改變
在這裡插入圖片描述
4>切換到普通使用者後檢視
在這裡插入圖片描述

注:程式初始化的作用是讓更改立即生效

5>cd /mnt/切換到這個目錄下,新建一個檔案和目錄測試

注:因為設定的普通使用者umask為055,所以新建立目錄的許可權為777-055=722,
即rwx-w- -w-,而檔案的許可權會預設-1,因為檔案預設保留執行許可權

在這裡插入圖片描述
6>切換到超級使用者建立檔案和目錄

注:umask 為042,新建檔案和目錄的許可權為777-042=735 ,即rwx-wxr-x,同樣檔案的預設許可權如果有執行許可權x的話會被去掉

在這裡插入圖片描述

4.特殊許可權

1)sticky 粘制位
作用:只針對目錄生效,當一個目錄上有sticky許可權時,在這個目錄中的檔案只能被檔案的所有者刪除

用法:
chmod o+t dir
chmod 1777 dir

只針對目錄 在公共目錄上用,只能對自己的檔案刪除,不可以刪除別人的檔案

例:1>先建立使用者tom,harry,leo ,他們分別屬於組shengchan ,caiwu 和jishu
建立一個公共目錄/pub/,任何人都可以在這個目錄上讀寫和執行
在這裡插入圖片描述
2>watch -n 1 ls -lR /pub/監控這個公共目錄的變化
在這裡插入圖片描述
3>切換到使用者tom下,建立一個檔案file1
在這裡插入圖片描述
4>退出tom使用者,切換到使用者harry下,建立一個檔案file2
在這裡插入圖片描述
5>使用者harry刪除tom建立的檔案file1,這時時可以刪除的
在這裡插入圖片描述
6>對目錄/pub/進行以下操作,其他使用者位的x被換成了t
在這裡插入圖片描述
7>再次切換到使用者tom,建立新的檔案file0,file1
在這裡插入圖片描述
8>tom刪除自己建的檔案file1可以刪除,但是刪除harry建的檔案file2 系統會提示:不能刪除,操作不被允許
在這裡插入圖片描述
2)sgid 強制位
作用:只針對二進位制可執行檔案,當檔案上有sgid時任何人執行此檔案產生的程序都屬於檔案的組
對目錄:當目錄上有sgid許可權時任何人在此目錄中建立的檔案都屬於目錄的所有組

注:sgid 任何使用者在執行這個檔案時都屬於這個檔案的組,用完後身份恢復
只對新的檔案有效,已經存在的檔案只能通過chgrp -R更改

用法:
chmod g+s file|dir
chmod 2755 file|dir

注:
<1>檔案的型別由檔案內容決定的,而不是檔名字
<2>程序屬於程序的發起者
<3>ps 程序掃描  ax 系統所有  -o 表示 引數的表達方式
    eg:   ps ax -o comm,user,group
    

例:1>此命令觀察程序比較直觀所以建立一個watch程序,檢視/bin/watch的屬性
在這裡插入圖片描述
建立一個watch程序
在這裡插入圖片描述
2> ps ax -o comm,user,group檢視這個程序的使用者和組
在這裡插入圖片描述
可以看到watch程序的使用者和組都是root
在這裡插入圖片描述
3>將/bin/watch檔案的組改為student
在這裡插入圖片描述
4>關閉上一個程序新建一個,檢視程序資訊,雖然改變了檔案的組,但程序中顯示的認識執行這個程序的使用者的組
在這裡插入圖片描述
5>切換到tom使用者下重複以上操作
在這裡插入圖片描述
檢視程序資訊,watch程序的使用者和組都是tom的
在這裡插入圖片描述
6>超級使用者下chmod g+s /bin/watch ,使用者組位的x變成s
在這裡插入圖片描述
7>再次建立程序並檢視程序資訊,此時程序中使用者的組變成了/bin/watch 這個檔案的組,即就是任何人執行此檔案時產生的程序都屬於更改檔案的組
在這裡插入圖片描述

3)suid 冒險位

只針對二進位制可執行檔案
當檔案上有suid時任何人執行這個檔案中的程式產生的程序都屬於檔案的所有 人
(任何使用者執行這個動作時都是這個檔案的所有人,用完後恢復自己的身份)
用法:
chmod u+s file
chmod 4755 /bin/watch

例:1>超級使用者下chmod u+s /bin/watch,檔案許可權使用者位的x變成了s
在這裡插入圖片描述
2>重新整理程序並檢視程序資訊,tom使用者建立的程序這時程序的使用者變成了root,即tom在執行/bin/watch這個檔案時他的身份變成了root,也就是/bin/watch 這個檔案的所有人
在這裡插入圖片描述
注:(在同時執行chmod g+s和chmod u+s時應該是chmod 6755 /bin/watch 因為二者同時存在)

5.許可權列表acl

1) 存在的意義
作用讓特定的使用者對特定的檔案擁有特定的許可權

普通許可權只能滿足某一類情況,特定人有特定需求時用許可權列表

2) acl列表的檢視

<1>ls -l 檢視
許可權後有+表示許可權列表開啟
只要設定了許可權列表系統顯示的就是假的許可權,是錯誤的,應該利用許可權列表檢視真的許可權
在這裡插入圖片描述

<2>getfacl
getfacl file 檢視acl開啟後的檔案的許可權

   file: file   檔名稱
   owner: root   檔案所有者
   group: root   檔案所有組  
   user::rw-       檔案所有者的許可權
   user:tom:rwx    指定的使用者對該檔案的許可權
   group::---      檔案所有組的許可權
   group:caiwu:r-x  指定組對檔案的許可權
   mask::rwx       能賦予使用者的最大權力,可改變,見注
   other::---      其他人對檔案的許可權

在這裡插入圖片描述

普通使用者不能訪問超級使用者的桌面,做實驗是需要在/mnt/下
許可權列表雖然空但仍然開著

3 )acl列表的管理
<1>getfacl file
在這裡插入圖片描述
<2>setfacl -m u:username:rwx file 設定指定使用者對檔案的許可權
在這裡插入圖片描述
<3>setfacl -m g:groupname:rwx file 指定組對檔案的許可權
在這裡插入圖片描述
<4>setfacl -x u:username file 從acl列表中刪除該使用者
在這裡插入圖片描述
<5>setfacl -x g:groupname file 從acl列表中刪除這個組,即撤銷這個組對檔案的許可權
在這裡插入圖片描述
<6>setfacl -b file 關閉許可權列表
注:在許可權列表為空,沒有刪除許可權列表是檢視檔案的屬性,檔案的許可權後會有+
在這裡插入圖片描述
setfacl -b file 關閉許可權列表後檢視檔案屬性,檔案許可權後的+消失了
在這裡插入圖片描述
一個檔案的許可權列表關閉一次後之前設定的內容會清空
4)mask值
(1)在許可權列表中mask表示能生效的許可權值
(2) 當使用chmod減小開啟acl的檔案許可權時mask值會發生改變

當檔案的許可權出現+時,用chmod 改變檔案許可權時會影響mask許可權,此時應該用

例:1.分別指定tom和harry的許可權,並ls -l檢視檔案的許可權,原來檔案使用者組(g)位的許可權變成了mask的許可權
在這裡插入圖片描述
2.chmod g-rx file ,去掉g位讀和執行的許可權後,mask的許可權會改變,之前指定的使用者擁有的許可權系統會提示:有效的只有w即寫的許可權,沒有讀和執行的許可權
在這裡插入圖片描述
(3)恢復mask的許可權兩種方法:

<1>chmod g+rx file ,因為mask的許可權一般展示在group原來的位置
在這裡插入圖片描述
<2>setfacl -m m:rwx file 恢復mask的許可權
在這裡插入圖片描述
5)acl的預設許可權設定
(1)acl預設許可權只針對目錄設定
(2)acl許可權只針對設定完成之後新建立的檔案或目錄生效,而已經存在的檔案是不會繼承預設許可權的
(3)setfacl -m d:u:username:rwx /mnt/ dir,指定使用者對目錄的預設許可權
例:1.新建一個目錄test1 ,並在test1目錄下建立檔案file1 file2 file3
在這裡插入圖片描述
2.指定tom使用者對這個目錄有讀寫和執行的權利,切換到tom使用者檢視授權之前建立的檔案file1 ,系統會提示沒有許可權
在這裡插入圖片描述
3.對tom指定許可權後超級使用者再建立一個新的檔案file7
在這裡插入圖片描述
4.tom使用者對新建檔案file7進行檢視
在這裡插入圖片描述
(4)setfacl -k /mnt/file 刪除acl預設許可權的設定
例:超級使用者下刪除之前設定的預設許可權在這裡插入圖片描述
超級使用者新建檔案file9
在這裡插入圖片描述
tom使用者檢視檔案file9失敗,但檢視刪除許可權之前建立的file8是可以的
在這裡插入圖片描述
預設許可權對目錄本身不生效