【Linux】Linux下檔案的許可權管理和所屬使用者所屬組
同樣,使用者對檔案的許可權分為了讀、寫、執行三種,其中檔案和資料夾對於這三種理解不同,重點的是所謂許可權,其實是對內容操作的許可權,而不是檔案自身。
資料夾巢狀的情況下,許可權如何發揮作用?
1. 使用者和檔案有什麼關係
1.1 使用者和檔案之間的關係
張三建立了某個檔案,如 touch 111.txt,那麼張三就是這個檔案的所有者,對這個檔案來說,馬雲就是其他人。
用ll命令列出某目錄下的檔案如下
-rw-r--r-- 1 root root 0 Aug 17 10:19 111.txt -rw-r--r-- 1 root root 0 Aug 17 10:19 222.txt drwxr-xr-x 2 root root 4096 Aug 17 10:19 test
可見,root是檔案111.txt和222.txt的所有者,對它的許可權rw-就是讀寫許可權。如果是馬雲,那就是r--,就是隻讀,不能寫和執行。
1.2.讀、寫、執行對檔案和資料夾分別意味著什麼?
初學的時候,望文生義,很容易搞不清楚讀、寫、執行是對什麼起作用。
比如,資料夾test裡面有檔案111.txt,在資料夾test上許可權給滿,111.txt設定為只讀,那普通使用者還能刪掉這個檔案嗎?
一實驗,發現可以刪掉,怎麼111.txt設定為只讀檔案,普通使用者也可以刪掉它?一頭霧水。
首先要清楚的是,使用者root是超級管理員,不受這些限制。
其次要理解,這些許可權是對其內容而言的設定。
使用者馬雲,在111.txt身上算是其他人,如果沒有讀許可權,則打不開111.txt,就是cat 111.txt會出現許可權拒絕。如果沒有寫許可權,則不能編輯111.txt(但是用vi有點問題,系統bug,111.txt有內容,馬雲沒許可權寫,結果一樣可以開啟,但是開啟的是無內容的顯示,然後馬雲可以鍵入新的文字,強制儲存,原來111.txt內容會被覆蓋了),如果沒有執行許可權,則不能執行。
使用者馬雲,在資料夾test上算是其他人,如果沒有讀許可權,則用ls列出目錄中有哪些檔案時會被禁止,沒有寫許可權,則不能在資料夾中建立和刪除檔案,只能改一改現有的檔案,沒有執行許可權,則不能進入該目錄。
111.txt算是資料夾test的內容,可以刪掉是因為資料夾test的許可權給滿了,而不看111.txt自身的許可權。111.txt自身的許可權設定,管理的是它裡面的內容的許可權。
檔案 | 資料夾 | |||
r | 4 | 讀 | 檢視檔案內容 cat/more/head/tail/less |
列出目錄中的內容 ls/ |
w | 2 | 寫 | 修改檔案內容 vim |
在目錄中建立、刪除檔案 touch/mkdir/rmdir/rm |
x | 1 | 執行 | 執行檔案 (指令碼或命令) |
可以進入目錄 cd |
父目錄許可權和子目錄許可權的影響是怎麼樣的?
假設某資料夾路徑是這樣的:
/ study / english / 111.txt
使用者馬雲對於這些檔案都是其他人的身份。
問,當資料夾 study 對馬雲的許可權只讀,資料夾 english 對馬雲的許可權是讀寫執行,檔案 111.txt 對馬雲的許可權是讀寫執行,那麼馬雲可以檢視111.txt的內容嗎?
答:不可以,許可權要從最外層的資料夾開始進入,因為study不具備執行許可權,進入不了,雖然english和111.txt有許可權,也檢視不了。
如果把study改為只有執行許可權,沒有讀許可權呢?
可以看到,進入study可以,列出study下內容就不行
但是檢視資料夾english和檔案111.txt都是正常的。
在資料夾study下新建檔案不行,但是在english下新建檔案可以。
也就是說,資料夾的許可權並不具有繼承性,當我在資料夾english下新建檔案時,沒有因為父級資料夾沒有許可權而不能操作。
父級資料夾只要有x許可權,那麼子級資料夾就不受父級資料夾的影響了。父級資料夾沒有x許可權,其下的檔案和資料夾在操作時會受到影響。
有點類似大院子巢狀小院子,大院子沒有x許可權(沒有鑰匙),就進入不了大院子,那你們的小院子,你有鑰匙也沒有用。
這時study沒有了執行許可權,進不了study目錄,則執行新建檔案如下:
可以看出,沒有執行許可權的資料夾,其下的資料夾和檔案在操作時受到了影響。
1.3.怎麼更改檔案和資料夾的許可權
1.首先要問哪些使用者能更改檔案許可權?
答:超級管理員和檔案所有者可以修改,其他人修改不了。
2.怎麼修改?
答:
命令名稱:chmod
命令英文原意:change the permissions mode of a file
命令所在路徑:/bin/chmod
執行許可權:所有使用者
選項:-R遞迴修改
功能描述:改變檔案或目錄許可權
方法1 | 方法2 |
chmod [{ugoa}{+-=}{rwx}][檔案或目錄] | chmod [mode=421][檔案或目錄] |
這種方法是直接修改檔案的某些使用者的許可權位,不用管其他使用者的情況。 u代表所有者、g代表所屬組,o代表其他人,a代表全部。 |
讀許可權是4 寫許可權是2 執行許可權是1 其實就是二進位制位置不同。 rwx,r是二進位制100,w是二進位制10,x是二進位制1。 |
chmod u+x English.zip 把檔案English.zip的所有者許可權中加上執行許可權。 chmod g+r,o-r English.zip chmod g=rx English.zip 不管檔案所屬組以前是什麼許可權,現在就是設定為rx |
chmod 755 English.zip 7就是111,就是rwx都有了,同樣,5就是讀和執行的許可權,這句話就是設定檔案English.zip所有者是讀寫執行許可權,所屬組和其他人是讀和執行的許可權。 |
選項:-R遞迴修改 新建資料夾時,-p是遞迴依次建立,而修改檔案或資料夾許可權時,如果要修改目錄下的子目錄和檔案許可權同時修改,要用-R chmod -R 777 /tmp/a/ 把/tmp/a/及其所有子目錄和檔案的許可權都改為777 |
1.4.怎麼更改檔案的所有者和所屬組,chown和chgrp
命令名稱:chown
命令英文原意:change file ownership
命令所在路徑:/bin/chown
執行許可權:root
語法:chown【新主人的使用者名稱】【檔案或目錄】
功能描述:改變檔案或目錄的所有者
範例:$ chown mayun 111.txt (把檔案111.txt的所有者改為mayun)
首先,改變檔案的讀寫執行許可權的時候,root和檔案所有者都可以操作。但是改變檔案所有者的時候,只有root可以操作,如下圖。
當然,把檔案換新主人,那新主人的使用者名稱不能輸入錯。
改變檔案所有者後,所屬組還是root哦!
那怎麼改變所屬組呢?和改變檔案所有者類似,只是把chown換成chgrp
命令名稱:chgrp
命令英文原意:change file group ownership
命令所在路徑:/bin/chgrp
執行許可權:所有使用者
語法:chgrp【新的使用者組】【檔案或目錄】
功能描述:改變檔案或目錄的所屬組
範例:$ chgrp mayun 111.txt 改變檔案111.txt的所屬組為mayun
現在又有個問題,沒設定之前檔案的所有者和所屬組是誰?
答:檔案的所有者很簡單,誰建立了這個檔案,檔案的所有者就是誰!
那檔案的所屬組是誰?就是檔案所有者的主要組。
1.5.新建的資料夾和檔案預設什麼許可權?(不常用)
我們新建一個檔案222.txt,新建一個資料夾dir2,看看系統給他們的預設許可權是什麼?
從哪裡知道新建資料夾的許可權是rwxr-xr-x呢?
答曰:umask命令就是幹這事的,它就是檢視新建資料夾和新建檔案的預設許可權。
看到了資料夾預設許可權情況,檔案的預設許可權比資料夾少個x ,防止被攻擊。
命令名稱:umask
命令英文原意:the user file-creation mask
命令所在路徑:Shell內建命令
執行許可權:所有使用者
語法:umask [-S]
-S 以rwx形式顯示新建檔案預設許可權
功能描述:顯示、設定檔案的預設許可權
範例:$ umask -S
如上圖,root和普通使用者得到的預設許可權還不一樣。
用root使用者,新建資料夾時預設許可權為755,檔案許可權預設644,能否更改為預設新建資料夾為700,預設新建檔案許可權600呢?
答曰:可以,與rwxrwxrwx異或演算法得出許可權碼,然後umask 許可權碼即可。
rwx rwx rwx 為777
與什麼異或能得到700 (rwx------)?
得到結果---rwxrwx,也就是077
因此,只要umask 077即可得到想要的結果。
umask 077後,新建的資料夾dir3許可權就是rwx------,新建的檔案就是去掉可執行許可權後的效果。
也就是說,umask的引數和得到的結果都是補碼,不是直接的許可權碼