[svc]linux檔案許可權

weixin_33958585發表於2018-03-16

linux中,每個檔案擁有三種許可權

f dir許可權位最佳實戰

許可權 對檔案的影響 對資料夾的影響
r 可讀取/閱讀檔案的內容 可以列出目錄內容,無法cd,ls -l看到檔名,屬性是亂碼.
w 修改檔案的內容; 如果沒r,vim可以強制寫入,echo可以重定向 可以在目錄中建立,刪除,修改目錄下檔名(前面3個功能都需要有x), 檔案的刪除受父目錄的影響,因為檔名在父目錄的block裡存著,和檔案本身許可權無關
x 可以作為命令執行,root只需x, 普通使用者需r+x 可以進入dir; 沒r無法列出,沒w無法刪除和建立檔案,重新命名檔案
f 說明
r 閱讀
-w- 重定向寫入
--x root執行
r-x 普通使用者執行
dir 說明
r 列出檔名字
r-x 列出檔名字+進入dir+屬性
rwx 列出檔名字+進入dir+屬性,新建,刪除,改名檔案

為何linux ext4檔案系統目錄預設大小是4k?
ext4檔案刪除&訪問原理

演示環境

806469-20180316214404992-233985569.png

使用者測試準備:

[root@maotai ~]# groupadd incahome          # 一個家庭(maotai, maomao的家)
[root@maotai ~]# usermod maotai -g incahome # 讓家庭主人maotai屬於incahome這個家(模擬user)
[root@maotai ~]# useradd maomao -g incahome # 讓家庭主人maomao屬於incahome這個家(模擬user)

[root@maotai ~]# useradd test               # 外面的人,主人及家庭成員以外的人(模擬其他人other)

建立檔案的測試準備

[root@maotai ~]# mkdir /maotai -p
[root@maotai ~]# echo "echo maotailinux" >/maotai/test.sh
[root@maotai ~]# chmod +x /maotai/test.sh 
[root@maotai ~]# cat /maotai/test.sh 
echo maotailinux
[root@maotai ~]# ls -l /maotai/test.sh
-rwxr-xr-x 1 root root 17 Dec  6 04:38 /maotai/test.sh

[root@maotai ~]# ls -l /maotai/test.sh
-rwxr-xr-x 1 root root 17 Dec  6 04:38 /maotai/test.sh

806469-20180316220523361-760016569.png

結論1: maotai,maomao,test三個使用者擁有同樣的其他使用者許可權,即讀和執行,沒有寫的許可權。

[root@maotai ~]# chown maotai.incahome /maotai/test.sh 
[root@maotai ~]# ll /maotai/test.sh
-rwxr-xr-x 1 maotai incahome 17 Dec  6 04:38 /maotai/test.sh

806469-20180316220743617-745280224.png

結論2:

    maotai  擁有對應使用者的許可權,即讀寫和執行許可權。
    maomao  擁有對應使用者組(incahome)的許可權,即讀和執行的許可權,沒有寫的許可權.
    test    擁有對應其他使用者的許可權,即讀和執行的許可權,沒有寫的許可權。
[root@maotai ~]# ll /maotai/test.sh
-rwxr-xr-x 1 maotai incahome 17 Dec  6 04:38 /maotai/test.sh
[root@maotai ~]# chmod g+w,o-x /maotai/test.sh # 給使用者組加上w許可權,給其他使用者去掉x許可權。
[root@maotai ~]# ls -l /maotai/test.sh
-rwxrwxr-- 1 maotai incahome 27 Dec  6 04:59 /maotai/test.sh

總結測試結論:

Linux普通檔案的讀寫執行許可權說明:

1.可讀r: 表示有**讀取,閱讀**檔案內容的許可權;

2.可寫w: 表示具有**新增,修改**檔案內容的許可權
    1.如果沒有r配合,那麼**vi**會提示無法編輯,(但可強制編輯),**echo**可以重定向或追加。
    2.特別提醒:**刪除檔案(修改檔名等)**的許可權是**受父目錄的許可權控制**,和檔案本身許可權無關。
      檔名是儲存在上一級目錄的block裡。所以要看父目錄有沒有許可權,才能執行刪除。
    
3.可執行x: 表示具有執行檔案的許可權。
    1.檔案本身要能夠執行
    2.**普通使用者**同時還具備r的許可權才能執行
    3.**root**只要有**x的許可權**就能執行。

總結Linux目錄的讀、寫、執行許可權說明

1.可讀r:表示具有瀏覽目錄下面檔案及子目錄的許可權,即ls dir。 
    a、如果沒有x許可權,不能放進目錄裡,即無法cd dir。 
    b、如果沒有x許可權,ls列表時可以看到所有檔名,但是會提示無許可權訪問目錄下的檔案。 
    c、如果ls -l列表,所有的屬性會帶有問號,也會提示無許可權訪問目錄下的檔案,但是可以看到所有檔名。
    
2.可寫w: 表示具有增加、刪除或修改目錄內檔名(一般指檔名)的許可權,需要x許可權配合。 

3.可執行x: 表示具有進入目錄的許可權,例如cd dir。
           但是沒有r無法列表檔案及目錄,沒有w無法新建和刪除。 

注意: 預設許可權是安全許可權的臨界點,工作中儘量給這個臨界點,或者小於臨界點,不要大於臨界點。
如下所示,超級使用者建立目錄預設是755,檔案是644.

[root@n1 maotai]# mkdir dir 
[root@n1 maotai]# touch file 
[root@n1 maotai]# ls -lrt 
drwxr-xr-x 2 root root 4096 2月 8 11:05 dir 
-rw-r–r–   1 root root 0    2月 8 11:06 file

檔案的時間戳

806469-20180316203622460-892836706.png

屬性 解釋
檔案的 Access time atime 讀取檔案/執行檔案 時更改的。如cat 1.log
檔案的 Modified time mtime 寫入檔案時 隨檔案內容的更改而更改的。如echo 1 > alog
檔案的 Create time ctime 寫入檔案/更改所有者/許可權/連結 設定時隨 Inode的內容更改而更改的。如ln if.sh if1.sh
影響範圍及區別 atime >= ctime >= mtime

umask對檔案計算結果為奇數時加1

umask奇數位許可權問題--這種計算不靠譜

檔案許可權遇到奇數要在奇數位-1 ,資料夾不變
806469-20180316210223121-968331886.png

檔案許可權計算小結論----這種靠譜補一些

參考

檔案許可權計算

建立檔案預設最大許可權為666 (-rw-rw-rw-),預設建立的檔案沒有可執行許可權x位。

對於檔案來說,umask的設定是在假定檔案擁有八進位制666的許可權上進行的,檔案的許可權就是666減去umask(umask的各個位數字也不能大於6,如,077就不符合條件)的掩碼數值;
重點在接下來的內容,如果umask的部分位或全部位為奇數,那麼,在對應為奇數的檔案許可權位計算結果分別再加1就是最終檔案許可權值。

目錄許可權計算

建立目錄預設最大許可權777(-rwx-rwx-rwx),預設建立的目錄屬主是有x許可權,允許使用者進入。

對於目錄來說,umask的設定是在假定檔案擁有八進位制777許可權上進行,目錄八進位制許可權777減去umask的掩碼數值。

檔案許可權的一般計算方法:

預設檔案許可權計算方法

1)假設umask值為:022(所有位為偶數)
6 6 6      ==>檔案的起始許可權值
0 2 2 -    ==>umask的值
---------
6 4 4

2)假設umask值為:045(其他使用者組位為奇數)----需要額外處理
6 6 6      ==>檔案的起始許可權值
0 4 5 -    ==>umask的值
---------
6 2 1      ==>計算出來的許可權。由於umask的最後一位數字是5,所以,在其他使用者組位再加1。
0 0 1 +
---------
622        ==>真實檔案許可權

預設目錄許可權計算方法(不需要額外處理)

 7 7 7      ==>目錄的起始許可權值
 0 2 2 -    ==>umask的值
---------
 7 5 5

相關文章