天天看點

Linux基礎 檔案權限

概述

從接觸

linux第一天開始,linux一切皆檔案的哲學思想就深植于每個linuxer的心中,是以,實作linux的系統安全必然繞不開檔案權限。檔案的權

限是建立在使用者的基礎上的,脫離了使用者,檔案權限也就變得毫無意義了。使用者、組和檔案權限一起鑄就了linux的系統安全模型。本文主要從檔案權限方面了

解linux的安全模型。

文中主要講解了:

1. 檔案權限rwx權限對于linux檔案和目錄的意義 2. 三個特殊權限的應用場景和作用。

本文是基于linux檔案系統的 centos 7.2 進行了解和示例示範。windows下的fat和ntfs未必适用。

使用者群組

首先,讓我們簡單地回顧一些基本的使用者群組的資訊。

在linux中,根據系統管理的需要,将使用者賬号分為管理者和普通使用者,他們擁有不同的權限、擔任不同的角色。系統用一個數字形式對使用者進行辨別,我們稱之為uid,系統僅僅是通過uid進行識别和區分使用者。使用者名是用以友善人類識别的。(root未必是管理者,uid=0的使用者就一定是管理者)

Linux基礎 檔案權限

我們一般稱管理者使用者為root。在linux中,uid=0的root使用者權限是至高無上的,它可以控制所有的程式,通路所有的檔案,使用系統上所有的功能。

除了管理者,我們把uid不等于0的其他使用者都稱之為普通使用者。普通使用者賬号需要管理者進行建立,擁有有限的權限,一般隻在使用者自己的家目錄中有完全權限。

根據使用方式,再将普通使用者劃分為系統使用者和登入使用者。系統使用者對守護程序擷取資源進行權限配置設定。這些使用者一般不允許登入到系統,僅用于維持系統或某個程式的正常運作。登入使用者則可以進行互動式登入系統。

為了友善管理多個使用者,我們引進了組的概念。基于某種特定聯系的多個使用者集合在一起,即構成一個使用者組,用于表示該組内所有使用者的賬号稱為組賬号。系統同樣基于數字形式,對組賬号進行辨別和區分,我們稱之為gid。

每一個使用者賬号至少屬于一個組,這個組稱為該使用者的基本組(如果使用者uid和基本組gid相同,我們稱為該使用者的私有組);如果該使用者同時還包括在其他的組中,則這些組稱為該使用者的附加組(或公共組)。

我們可以通過指令id檢視使用者群組的資訊

Linux基礎 檔案權限

檔案基本權限

linux檔案是有歸屬的,每個正常的檔案的按歸屬分為所有者(屬主)、所有組(屬組)和其他使用者,我們可以對各歸屬設定相應權限。我們可以通過 ls –dl filename 檢視這些資訊。

Linux基礎 檔案權限
Linux基礎 檔案權限
第一段1位代碼表示檔案類型,代碼清單:

代碼

檔案類型

普通檔案

d

目錄檔案(directory)

b

塊裝置(block)

c

支付裝置(character)

l

符号連結檔案(link)

p

管道檔案(pipe)

s

套接字檔案(socket)

第二段9位代碼,每3個位為一組,分3組,表示檔案對應的擁有者(屬主)、所屬使用者組(屬組)和其他使用者3組權限。
Linux基礎 檔案權限
每組由r w x 順序排清單示,當擁有相應權限時候,就取對應字母表示有權限;以“-”(減号)表示無權限。字母代表的意義為:r 讀(read)、w 寫(write)、x 執行(execute)。 對于每組每一位權限而言,僅存在有和沒有,是以我們可以引進3組3位二進制表示,每組數字是範圍是000-111,轉換為人類易讀表示為0-7。 符号 二進制 八進制 — 000 –r 001 -w- 010 2 -wr 011 3 r– 100 4 r-x 101 5 rw- 110 6 rwx 111 7
第三段1位字元,是 新添加的一項增強功能,是以一些發行版現在可能僅顯示前 10 個字元。在其他情況下,第 11 個字元是一個空格,是以您可能不會注意到它。這個字元指定一種替代性的通路方法是否适用于該檔案。當檔案模式位後面的字元是一個空格時,沒有替代性通路方 法。當它是一個印刷字元時,則存在這樣一種方法。舉例而言,該方法可能是一個通路控制清單。gnu <code>ls</code> 使用了一個 “.”(句點)字元來表示一個僅具有 selinux 安全性上下文的檔案。具有其他任何替代通路(facl)方法組合的檔案使用 “+”(加号)字元來标記。

第五、六段顯示的是檔案的歸屬:所有者和所屬組。

了解了上面的概念,我接下來我們通過示範,加以了解三種權限對檔案和目錄意義:

首先我們準備示範檔案/tmp/cat,示範使用者user1。/tmp/cat檔案的屬主和屬組都是root,是以user1對應該檔案的權限歸屬是其他使用者。

Linux基礎 檔案權限
Linux基礎 檔案權限

由此,我們可以知道,檔案的rwx對于檔案的意義是:對檔案的data block内容進行檢視,編輯和執行操作。(執行是相對linux的二進制和腳本等檔案而言,普通檔案執行無意義。)

根據linux檔案系統結構我們可以知道,目錄的data block資料,是記錄該目錄下的子目錄和檔案的清單,是以對data block的操作我們可以了解為檢視目錄的子目錄和檔案清單、增删子目錄或檔案、切換進入目錄。

同樣的,我們建立目錄/tmp/dir/,屬主和屬組依然是root,user1使用者比對的仍然是其他使用者權限。示範:

Linux基礎 檔案權限
Linux基礎 檔案權限
可以進入目錄。
Linux基礎 檔案權限
僅賦權w,無法删除/tmp/dir/file,無法添加檔案; 賦權wx時候,可以删除和添加檔案
Linux基礎 檔案權限
僅賦權r,有限地檢視目錄内檔案,資訊不完整。 賦權r-x,可以實作完整的檢視目錄内檔案。
Linux基礎 檔案權限

權限描述

對檔案的意義

對目錄的意義

r

read

可以檢視檔案内容

可以列出目錄下的子目錄和檔案(需要與x權限)

w

write

可以修改檔案内容

可以在目錄中建立、删除子目錄和檔案(需與x權限配合)

x

execute

可以執行檔案

可以進入目錄

檔案特殊權限

在linux中,普通使用者可以對自己的賬戶進

行密碼修改,修改後的密碼是存儲在/etc/shadow的,這就意味着普通使用者對/etc/shadow檔案具有寫權限。如果賦予普通使用者對/etc

/shadow檔案寫權限,即表示普通使用者可以删改檔案下其他使用者的賬戶密碼資訊,這帶來的後果是災難性的。

而事實上,/etc/shadow檔案的的權

限是000,系統中僅有管理者是可以對000的檔案進行編輯。我們也僅僅是通過passwd指令時,才能進行密碼的修改。這表示當普通使用者使用

passwd指令時,它披上了管理者的小馬甲,暫時擷取了root的權限,對/etc/shadow檔案進行編輯操作。

這就引進了linux權限模型的3個特殊權限:suid、sgid和 sticky。

我們示範的是cat指令,測試使用者user1和 user2,其中檔案cat和user1.file檔案權限,環境如下圖:

Linux基礎 檔案權限

user2是無法執行cat,也不具備檢視user1.file檔案的

Linux基礎 檔案權限

當我們給user2賦權x時,我們看到原來user2無法檢視的user1.file檔案,已經能夠檢視了。

Linux基礎 檔案權限
Linux基礎 檔案權限

任何一個可執行程式檔案能不能啟動為程序:取決發起者對程式檔案是否擁有執行權限(使用者自身要對suid的指令具有可執行權限)

啟動為程序之後,其程序的屬主為原程式檔案的屬主(即suid讓使用者披上了指令原屬主的馬甲,賦予了原屬主的權限。)

給目錄suid是無意義的。

我們給目錄予sgid,當使用者本身無權限的時候,sgid是無效的,使用者自身需要對目錄有相應的權限。

Linux基礎 檔案權限

當目錄擁有sgid時,在裡面建立的檔案,屬組将會是目錄的原屬組。

Linux基礎 檔案權限

預設情況下,使用者建立檔案時,其屬組為此使用者所屬的 主

一旦某目錄被設定了sgid ,則對此目錄有寫權限的使用者在此目錄中建立的檔案所屬的組為此目錄的屬組

  通常用于建立一個協作目錄

這個就是針對others來設定的了,和上面兩個一樣,隻是功能不同而已。  

sbit(sticky bit)目前隻針對目錄有效,對于目錄的作用是:當使用者在該目錄下建立檔案或目錄時,僅有自己與 root才有權力删除。  

最具有代表的就是/tmp目錄,任何人都可以在/tmp内增加、修改檔案(因為權限全是rwx),但僅有該檔案/目錄建立者與 root能夠删除自己的目錄或檔案。

Linux基礎 檔案權限

具有寫權限的目錄通常使用者可以删除該目錄中的任何檔案,無論該檔案的權限或擁有權

在目錄設定sticky  位,隻有檔案的所有者或root可 可以删除該檔案

sticky 對檔案無意義

結束語

使用者言論隻代表其個人觀點,由于初學linux,限于本人水準有限,文中難免錯誤纰漏。歡迎各位看官不吝指教、讨論相關技術。謝謝。

聯系我:[email protected]

繼續閱讀