1. 程式人生 > 實用技巧 >【Linux】Linux下檔案的許可權管理和所屬使用者所屬組

【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代表全部。
+r代表加上讀許可權,-r代表去掉讀許可權,=r代表不管以前是什麼許可權,現在設定為讀許可權

讀許可權是4

寫許可權是2

執行許可權是1

其實就是二進位制位置不同。

rwx,r是二進位制100,w是二進位制10,x是二進位制1。

chmod u+x English.zip

把檔案English.zip的所有者許可權中加上執行許可權。

chmod g+r,o-r English.zip
把檔案的所屬組加上讀許可權,把其他人的去掉讀許可權,g+r和o-r用逗號分隔。

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的引數和得到的結果都是補碼,不是直接的許可權碼