概述
從接觸linux第一天開始,Linux一切皆文件的哲學思想就深植于每個linuxer的心中,因此,實現Linux的系統安全必然繞不開文件權限。文件的權限是建立在用戶的基礎上的,脫離了用戶,文件權限也就變得毫無意義了。用戶、組和文件權限一起鑄就了linux的系統安全模型。本文主要從文件權限方面了解Linux的安全模型。
文中主要講解了:
1. 文件權限rwx權限對于Linux文件和目錄的意義
2. 三個特殊權限的應用場景和作用。
本文是基于Linux文件系統的 CentOS 7.2 進行理解和示例演示。Windows下的FAT和NTFS未必適用。
用戶和組
首先,讓我們簡單地回顧一些基本的用戶和組的信息。
用戶
在Linux中,根據系統管理的需要,將用戶賬號分為管理員和普通用戶,他們擁有不同的權限、擔任不同的角色。系統用一個數字形式對用戶進行標識,我們稱之為UID,系統僅僅是通過UID進行識別和區分用戶。用戶名是用以方便人類識別的。(root未必是管理員,UID=0的用戶就一定是管理員)
管理員
我們一般稱管理員用戶為root。在Linux中,UID=0的root用戶權限是至高無上的,它可以控制所有的程序,訪問所有的文件,使用系統上所有的功能。
普通用戶
除了管理員,我們把UID不等于0的其他用戶都稱之為普通用戶。普通用戶賬號需要管理員進行創建,擁有有限的權限,一般只在用戶自己的家目錄中有完全權限。
根據使用方式,再將普通用戶劃分為系統用戶和登錄用戶。系統用戶對守護進程獲取資源進行權限分配。這些用戶一般不允許登錄到系統,僅用于維持系統或某個程序的正常運行。登錄用戶則可以進行交互式登錄系統。
組
為了方便管理多個用戶,我們引進了組的概念?;谀撤N特定聯系的多個用戶集合在一起,即構成一個用戶組,用于表示該組內所有用戶的賬號稱為組賬號。系統同樣基于數字形式,對組賬號進行標識和區分,我們稱之為GID。
每一個用戶賬號至少屬于一個組,這個組稱為該用戶的基本組(如果用戶UID和基本組GID相同,我們稱為該用戶的私有組);如果該用戶同時還包括在其他的組中,則這些組稱為該用戶的附加組(或公共組)。
我們可以通過命令id查看用戶和組的信息
文件基本權限
查看文件權限
Linux文件是有歸屬的,每個正常的文件的按歸屬分為所有者(屬主)、所有組(屬組)和其他用戶,我們可以對各歸屬設置相應權限。我們可以通過 ls –dl FILENAME 查看這些信息。
解讀ls -dl信息
文件類型
第一段1位代碼表示文件類型,代碼列表:
代碼 | 文件類型 |
– | 普通文件 |
d | 目錄文件(directory) |
b | 塊設備(block) |
c | 支付設備(character) |
l | 符號鏈接文件(link) |
p | 管道文件(pipe) |
s | 套接字文件(socket) |
文件權限
第二段9位代碼,每3個位為一組,分3組,表示文件對應的擁有者(屬主)、所屬用戶組(屬組)和其他用戶3組權限。
每組由r w x 順序排列表示,當擁有相應權限時候,就取對應字母表示有權限;以“-”(減號)表示無權限。字母代表的意義為:r 讀(read)、w 寫(write)、x 執行(execute)。
對于每組每一位權限而言,僅存在有和沒有,因此我們可以引進3組3位二進制表示,每組數字是范圍是000-111,轉換為人類易讀表示為0-7。
符號 二進制 八進制 — 000 0 –r 001 1 -w- 010 2 -wr 011 3 r– 100 4 r-x 101 5 rw- 110 6 rwx 111 7
擴展功能
第三段1位字符,是新添加的一項增強功能,所以一些發行版現在可能僅顯示前 10 個字符。在其他情況下,第 11 個字符是一個空格,所以您可能不會注意到它。這個字符指定一種替代性的訪問方法是否適用于該文件。當文件模式位后面的字符是一個空格時,沒有替代性訪問方法。當它是一個印刷字符時,則存在這樣一種方法。舉例而言,該方法可能是一個訪問控制列表。GNU
ls
使用了一個 “.”(句點)字符來表示一個僅具有 SELinux 安全性上下文的文件。具有其他任何替代訪問(FACL)方法組合的文件使用 “+”(加號)字符來標記。
第五、六段顯示的是文件的歸屬:所有者和所屬組。
演示文件權限
了解了上面的概念,我接下來我們通過演示,加以理解三種權限對文件和目錄意義:
文件
首先我們準備演示文件/tmp/cat,演示用戶user1。/tmp/cat文件的屬主和屬組都是root,所以user1對應該文件的權限歸屬是其他用戶。
無權限時:user1用戶可以查看文件的元數據;無法對文件進行讀、寫、執行操作,即讀寫使用user data。
分別賦予rwx權限時:
由此,我們可以知道,文件的rwx對于文件的意義是:對文件的data block內容進行查看,編輯和執行操作。(執行是相對Linux的二進制和腳本等文件而言,普通文件執行無意義。)
目錄
根據Linux文件系統結構我們可以知道,目錄的data block數據,是記錄該目錄下的子目錄和文件的列表,因此對data block的操作我們可以理解為查看目錄的子目錄和文件列表、增刪子目錄或文件、切換進入目錄。
同樣的,我們創建目錄/tmp/dir/,屬主和屬組依然是root,user1用戶匹配的仍然是其他用戶權限。演示:
無權限時:user1用戶可以查看目錄的元數據;無法對目錄進行讀、寫、執行操作。
賦權:x
可以進入目錄。
賦權:w
僅賦權w,無法刪除/tmp/dir/file,無法添加文件;
賦權wx時候,可以刪除和添加文件
賦權:r
僅賦權r,有限地查看目錄內文件,信息不完整。
賦權r-x,可以實現完整的查看目錄內文件。
小結文件三種權限rwx對文件和目錄的不同意義:
代碼 | 權限描述 | 對文件的意義 | 對目錄的意義 |
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。
SUID
我們演示的是cat命令,測試用戶user1和 user2,其中文件cat和user1.file文件權限,環境如下圖:
user2是無法執行cat,也不具備查看user1.file文件的
當我們給user2賦權x時,我們看到原來user2無法查看的user1.file文件,已經能夠查看了。
小結SUID:
-
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限(用戶自身要對SUID的命令具有可執行權限)
-
啟動為進程之后,其進程的屬主為原程序文件的屬主(即SUID讓用戶披上了命令原屬主的馬甲,賦予了原屬主的權限。)
-
給目錄SUID是無意義的。
SGID
我們給目錄予SGID,當用戶本身無權限的時候,SGID是無效的,用戶自身需要對目錄有相應的權限。
當目錄擁有SGID時,在里面新建的文件,屬組將會是目錄的原屬組。
小結SGID:
-
默認情況下,用戶創建文件時,其屬組為此用戶所屬的 主
-
一旦某目錄被設定了SGID ,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
-
通常用于創建一個協作目錄
Sticky Bit
這個就是針對others來設置的了,和上面兩個一樣,只是功能不同而已。
SBIT(Sticky Bit)目前只針對目錄有效,對于目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅有自己與 root才有權力刪除。
最具有代表的就是/tmp目錄,任何人都可以在/tmp內增加、修改文件(因為權限全是rwx),但僅有該文件/目錄建立者與 root能夠刪除自己的目錄或文件。
小結Sticky
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可 可以刪除該文件
sticky 對文件無意義
結束語
用戶言論只代表其個人觀點,由于初學Linux,限于本人水平有限,文中難免錯誤紕漏。歡迎各位看官不吝指教、討論相關技術。謝謝。
聯系我:jacky18676887374@aliyun.com
原創文章,作者:昭其,如若轉載,請注明出處:http://www.www58058.com/29146
文章的層次結構清晰明了,內容豐滿,有理論有實踐。
圖片清晰,指示明確,結合文字引導,可謂圖文并茂。
文件事情整體介紹的清楚明白,但如果在思路引導上加以優化是一篇上等佳作