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的其他用戶都稱之為普通用戶。普通用戶賬號需要管理員進行創建,擁有有限的權限,一般只在用戶自己的家目錄中有完全權限。

根據使用方式,再將普通用戶劃分為系統用戶登錄用戶。系統用戶對守護進程獲取資源進行權限分配。這些用戶一般不允許登錄到系統,僅用于維持系統或某個程序的正常運行。登錄用戶則可以進行交互式登錄系統。

 

為了方便管理多個用戶,我們引進了組的概念?;谀撤N特定聯系的多個用戶集合在一起,即構成一個用戶組,用于表示該組內所有用戶的賬號稱為組賬號。系統同樣基于數字形式,對組賬號進行標識和區分,我們稱之為GID。

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

我們可以通過命令id查看用戶和組的信息

1470317337649426.png

文件基本權限


查看文件權限

Linux文件是有歸屬的,每個正常的文件的按歸屬分為所有者(屬主)所有組(屬組)其他用戶,我們可以對各歸屬設置相應權限。我們可以通過 ls –dl FILENAME 查看這些信息。

1470317396536154.png

解讀ls -dl信息

Image 20160804111048.png

文件類型

第一段1位代碼表示文件類型,代碼列表:

代碼 文件類型
普通文件
d 目錄文件(directory)
b 塊設備(block)
c 支付設備(character)
l 符號鏈接文件(link)
p 管道文件(pipe)
s 套接字文件(socket)

文件權限

第二段9位代碼,每3個位為一組,分3組,表示文件對應的擁有者(屬主)、所屬用戶組(屬組)和其他用戶3組權限。

文件屬性.png

每組由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。

1470317927139561.png

分別賦予rwx權限時:

1470317991496280.png

由此,我們可以知道,文件的rwx對于文件的意義是:對文件的data block內容進行查看,編輯和執行操作。(執行是相對Linux的二進制和腳本等文件而言,普通文件執行無意義。)
 

目錄

根據Linux文件系統結構我們可以知道,目錄的data block數據,是記錄該目錄下的子目錄和文件的列表,因此對data block的操作我們可以理解為查看目錄的子目錄和文件列表、增刪子目錄或文件、切換進入目錄。

同樣的,我們創建目錄/tmp/dir/,屬主和屬組依然是root,user1用戶匹配的仍然是其他用戶權限。演示:

1470318038644715.png

無權限時:user1用戶可以查看目錄的元數據;無法對目錄進行讀、寫、執行操作。

1470318074855985.png

賦權:x

可以進入目錄。

1470318161203275.png

賦權:w

僅賦權w,無法刪除/tmp/dir/file,無法添加文件;

賦權wx時候,可以刪除和添加文件

1470318195861213.png

賦權:r

僅賦權r,有限地查看目錄內文件,信息不完整。

賦權r-x,可以實現完整的查看目錄內文件。

1470318231862509.png

小結文件三種權限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文件權限,環境如下圖:

1470318277484885.png

user2是無法執行cat,也不具備查看user1.file文件的

1470318308855225.png

當我們給user2賦權x時,我們看到原來user2無法查看的user1.file文件,已經能夠查看了。

1470318337643228.png

1470318352202754.png

小結SUID:

  • 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限(用戶自身要對SUID的命令具有可執行權限)

  • 啟動為進程之后,其進程的屬主為原程序文件的屬主(即SUID讓用戶披上了命令原屬主的馬甲,賦予了原屬主的權限。)

  • 給目錄SUID是無意義的。

SGID

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

1470318415454317.png

當目錄擁有SGID時,在里面新建的文件,屬組將會是目錄的原屬組。

1470318439209905.png

小結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

(0)
昭其昭其
上一篇 2016-08-05 10:17
下一篇 2016-08-05 10:17

相關推薦

  • N21天天第十一周課程練習

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 SSL協議基礎: SSL協議位于TCP/IP協議與各種應用層協議之間,本身又分為兩層: 1)SSL記錄協議:建立在可靠傳輸層協議(TCP)之上,為上層協議提供數據封裝、壓縮、加密等基本功能。 2)SSL握手協議:在SSL記錄協議之上,用于實際數據傳輸前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。 SS…

    Linux干貨 2016-10-09
  • Linux程序包管理方式

    Linux程序包安裝和管理方式共計三種:          一、[yum|dnf],通過官網或者其他開源網站提供的文件服務器,本機鏡像源等途徑進行安裝。         二、rpm,通過官網或者其他開源網站通過…

    Linux干貨 2016-07-29
  • Linux計算機基礎及Linux入門

    計算機,Linux發型版,Linux 哲學思想,基本命令,startx ,pwd tty ,shutdown ,ifconfig , echo, export, historybo, poweroff,reboot, date, hwclock, Linux 獲取命令幫助信息,Linux發行版的基礎目錄,

    2017-09-18
  • N26第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。        who -i或-u 顯示閑置時間, 若該用戶在前一分鐘之內有進行任何動作,將標示成"."號,如果該用戶已超過24小時沒有任何動作,則標示出"old"字符串   &n…

    Linux干貨 2017-01-16
  • 馬哥教育網絡班22期+第5周課程練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@rhel677850 ~]# grep "^\(root\|fedora\|user1\)" /etc/passwd|awk -F: '{print $1,$7}&#039…

    Linux干貨 2016-09-26
  • Linux文本處理及用戶組管理命令練習

    一.文本處理基礎命令 (1).? 列出當前系統上所有已經登錄的用戶的用戶名。 ? ? ? ? ? 完成命令:who ?| ?cut ?-d’ ‘? -f1 ?| ?uniq ?-u 示例: (2).取出最后登錄到當前系統對的用戶的相關信息。 ? ? ? ? 完成命令:w ?|? tail -1 示例: (3).取出當前系統上被用戶當作…

    2018-03-11

評論列表(1條)

  • stanley
    stanley 2016-08-05 12:02

    文章的層次結構清晰明了,內容豐滿,有理論有實踐。
    圖片清晰,指示明確,結合文字引導,可謂圖文并茂。
    文件事情整體介紹的清楚明白,但如果在思路引導上加以優化是一篇上等佳作

欧美性久久久久