天天看點

檔案權限

伺服器内有了不同的賬号,那麼怎麼界定哪些檔案屬于哪些使用者?有時我們還想共享我們的給特定的人?有時我們還想共享檔案給所有的人?既然有了這麼多需求,我們linux中是怎麼管理檔案的,是怎麼滿足我們需求的。身為管理者我們需要做什麼?它的功能我們怎麼合理運用才可以最大限度的保護系統的安全。第一節第二部分很重要。

庖丁解牛前是繞牛三周。牛分為兩種,一種是檔案,一種是目錄。不同的牛要用不同的刀。

1)       檔案的權限,簡單看檔案權限,使用ll指令檢視

第一位檔案類型

第2-4位是檔案的屬主的權限,r代表root具有讀權限,w代表有寫權限,x代表root具有執行權限。

第5-7位是檔案的屬組的權限,-代表沒有該位的權限。

第8-10位是檔案的其它權限

1這裡是檔案的硬連結數

root是檔案的屬主名

root是檔案的屬組名

25是檔案的大小

Oct 25 02:58是檔案的修改時間

最後test是檔案名

2)       目錄權限

目錄的權限結構和檔案一樣,但是目錄的權限位和檔案權限位代表的意義是完全不同的。目錄的存儲的結構,大家是否記得,這個很重要,隻有熟記目錄的目錄結構才能更好的了解目錄權限位的作用。我們回憶一下目錄的存儲結構,目錄的名字和權限資訊都存在inode中,目錄對應的block中存放的是子目錄的名字和inode号,有趣的事情就發生在這裡。當我們更改檔案名的時候,我們更改的是什麼?對,更改的是檔案父目錄的block,這時我們需要什麼權限呢!嗯,父目錄的寫權限。這裡我們我們可以說目錄的權限位了,r代表可以讀目錄下的子目錄,w代表我們可以我們可以給目錄下添加删除檔案或目錄,x其實它就是多餘,為了檔案系統結構統一留着它吧,x你當個藥引子吧,rw要想使用必須有x!

不要停,linux的這種目錄結構産生了一個比較有趣的東西,使用者的家目錄下有一個檔案,目前使用者對這個檔案什麼權限都沒有或者讀或者執行權限,我們可以删除這個檔案嗎?嗯,可以。

1)       屬主和屬組管理

檔案的屬主和屬組不是一層不變的,怎麼把屬主和屬組更改為其它的使用者。

      Username填哪個使用者的使用者名,該檔案就會的屬屬主就會更改為該使用者。這裡有一個前提,更改檔案屬主的賬号必須是管理者,為什麼呢?有些時候我們想把東西送給别人,比爾還不一定要呢!比如比如送你你應該tnt。

這裡我們增加了一個:和groupname,嗯這裡我們可以直接指定屬組。也可以隻寫一個:,代表把:前屬主的主組指定為檔案的屬組。:前面可以不填内,代表隻更改屬組。

假如某個檔案夾下有很多檔案和很多子目錄我們怎麼改權限,難道我們要一個一個的更改。當然不要啦,-r遞歸更改目錄下檔案目錄的權限。

chgrp更改檔案的屬組。簡直多餘。

2)       更改權限位

chmod這個指令就足夠了。這個指令有兩種賦權的方式,一種是使用rwx的方式,這種方式更加适合更改權限時使用,另一種是直接使用數字的模式,這種方法一步到位的指定檔案的權限。

rwx模式

u+r代表屬主增加一個讀權限

g-w代表屬組減少寫權限

o+x代表其它增加執行權限

a-x(-x)代表屬主屬組其它都減去執行權限

例如chmod –r a-w filename,這裡的-r代表遞歸

數字模式

              653是怎麼來的rwx對應算出來的,這個不好解釋,容我列個表

              rw-r-x-wx

              110101011

              按照二進制每三位(三位組合起來代表屬主屬組其中一個的權限)為一個數字,這個很重要,這是接下來的内容的基本。

              當我們建立一個目錄它的權限時多少?嗯,755。建立檔案呢?644。這是因為什麼,因為linux中定義了umask。建立目錄的權限時怎麼來的,這裡以root為例子解釋。Root的umask是022,然後用777的二進制111111111按位減去022的二進制000010010,得出的結果就是目錄的權限。那檔案的權限時644,因為檔案有執行權限是很危險的,系統建立檔案時預設把所有執行權限拿去了。

上面了解了吧。哦好,我出一道題。不,我不出題了,直接說一個需求:在/testdir/中,要求每個人都能建立檔案也可以檢視其他人的檔案的内容,但是不能删除其他人的檔案。

傳統的權限不能滿足我們的需求,這時linux引入了特殊的權限。

SUID:在檔案屬主u上增加特殊權限chmod u+s command。這個指令在運作的時候,程序的屬主将變成程序的屬主,而不是程序的發起者(程序的屬主一般是程序的發起者)。

SGID:目錄屬組g上增加特殊權限chmod g+s command。這時在對應的目錄下建立檔案或目錄時,新建立的屬組不再是建立者的屬組,而是父目錄的屬組。

SBIT:目錄的其它權限o上增加特殊權限chmod o+s command。這時在該目錄下,每個人隻能删除屬主是自己的檔案,不可以删除其他使用者的檔案。

root的權限實在是太大了,很多時候我們會敲錯指令改錯檔案,有一個辦法讓root也無法改檔案,當然不是root永遠不能更改該檔案,隻是我們給那個檔案一個緩沖機制,就像大陸股票市場推出的熔斷機制。

給filename增加鎖,要想更改filename需先執行

也可以先使用lsattr filename檢視檔案是否有鎖。

人類總很複雜,假如有/testdir/,我們想讓/testdir/目錄建立的檔案屬組是t1;同時需要t2組對/testdir/目錄具有讀寫權限;也要t3對/testdir/目錄隻有讀的權限;其它組對檔案沒有任何權限。

原本的權限就滿足不了我們了,這時linux引入了acl權限。這個引入需要在檔案系統的配合,ext4和xfs支援這個特性,在挂載的時候需要開啟這個特性。CentOS7的檔案系統預設開啟acl,CentOS6沒開啟。

Arg的格式是這樣的

[d]:(m|u|g):name:rwx

第一個冒号後面是屬主、屬組或者是mask,選擇一個填寫,這裡的mask和umask類似,我們額外添加的權限的二進制格式必須先與mask按位相與後才是它的真實權限。

第二冒号後面是屬主或者屬組的名字

最後是我們想給的權限格式rwx模式

第一個冒号前面可以不寫。還記得之前SGID和檔案的權限繼承嗎?嗯acl權限也可以繼承,這個d的意思是default,我們想讓子檔案目錄有什麼acl權限,隻要加個d就可以啦!

一些例子

使用getfacl filename檢視指令的acl權限。

那麼有一個問題,acl權限的執行順序是什麼?不用記,其實就是按getfacl filename得到的權限順序來的。

接下來的這一組指令是一次備份acl權限的步奏。

權限看似很多,隻有了解linux的存儲結構和基本的權限,其它權限的基本就是基本權限的補充,一個原理不停的拓展而已。

上一篇: 權限設定
下一篇: chmod

繼續閱讀