道阻且長,行則將至。埋頭苦幹,不鳴則已,一鳴驚人!加油騷年
文章目錄
1 前言
鳥哥的Linux私房菜:“Linux最優秀的地方之一,就在於它的多用戶,多任務環境。而爲了讓各個用戶具有較保密的文件數據,因此文件的權限管理就變得很重要了。”
本文爲自己認真閱讀《鳥哥的Linux私房菜》對應內容後,總結記錄所得。如果有誤,還望指正!謝謝
Linux一般將文件可存取訪問的身份分爲3個類別,分別是:owner、group、others,且三種身份各有read、write、execute等權限。
本文將會圍繞以下方面展開:
2 基本概念
2.1 用戶和用戶組的基本概念
用戶及用戶組的基本概念,以實際中一個家庭爲例,假設有一家人,家裏只有三兄弟,分別是王大毛、王二毛、王三毛這3個人,家庭的戶主是王大毛。簡要分析如下:
- 文件所有者(用戶):在這個家庭中,王大毛、王二毛、王三毛,分別有屬於自己的房間,那麼他們就是這個房間的所有者(用戶)。此時王二毛可以進入王三毛的房間,但是卻只能看看,什麼也不能動,因爲這些東西都是王三毛的。
- 用戶組:因爲這三個人是一家人,所以他們可以在公共的客廳一塊活動,大家都可以在客廳做自己的事情,比如看電視,聽音樂等。
2.2 用戶和用戶組的基本特徵
用戶、用戶組、其他這幾個類別的特徵是什麼呢?
- 用戶:每個用戶,都有自己的空間,數據存儲空間,工作空間等;
- 用戶組:同一個用戶組的成員,可以有共享的空間交流;不同用戶組的成員,不能互相訪問;比如上邊王大毛的家庭,另外一個家庭的用戶張三,就不能去訪問。除非得到王大毛家庭用戶的“邀請”。
- 其他:另外家庭的用戶張三,就是其他。
2.3 Linux下默認文件存放路徑
在Linux系統下,是有一個默認的路徑,默認文件來存放用戶和用戶組的相關信息,分別如下:
- /etc/passwd:存放所有的系統上的賬號與一般身份用戶,以及root的相關信息;
- /etc/shadow:記錄個人的密碼;
- /etc/group:記錄Linux所有的組名。
需要特別注意的是:這三個文件是Linux系統裏面賬號、密碼、用戶組信息的集中地,一定不要隨便刪除這三個文件。
3 Linux的文件屬性
3.1 查看文件屬性
當我們在Linux系統下,使用 ls -l 命令查看目錄文件時,會發現有很多的內容,我剛開始的時候瞭解的也不是很深入,只是知道個大概,今天認認真真看了看書,做一個總結。
關於Linux下 ls 命令的相關參數,可以參考菜鳥教程 - ls,部分命令參數截圖如下:
3.2 文件屬性分析
我參考自己的Ubuntu,拿如下幾個文件舉例:
列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 |
---|---|---|---|---|---|---|
drwxrwxrwx | 2 | zhaoc | zhaoc | 4096 | 10月 16 22:50 | Music |
drwxr-xr-x | 2 | root | root | 4096 | 3月 24 21:50 | vim |
-rw-r–r-- | 1 | root | root | 438 | 3月 15 15:49 | exports |
- 列1:代表這個文件的類型與權限;這一列,如果仔細觀察就會發現,每一個都是由10個字符組成(由於編輯器原因,可能會連到一塊),下邊對這10個字符分開來說:
- 第一個字符:代表這個文件是“目錄、文件或鏈接文件等”,就是文件的類型,不同的 字母 代表的含義是不一樣的:
- [ d ]:代表目錄,即此文件類型爲一個目錄類型,也就是常見的文件夾;如上邊的“Music”文件夾;
- [ - ]:代表文件,就是一個最小的單元,也就是windows下常見的基本文件等;如上邊的“exports”文件;
- [ l ]:小寫字母“L”,代表連接文件(linkfile);
- [ b ]:表示設備文件裏面的可供存儲的接口設備;
- [ c ]:表示設備文件裏面的串行端口設備,例如鍵盤、鼠標等(一次性讀取設備);
- 第2-4個字符:這三個字符代表文件所有者的權限,如上述“Music”文件,所有者的權限就是 [rwx],也就是可讀,可寫,可執行權限;
- 第5-7個字符:代表同用戶組的權限,也就是同一個用戶組內的其他用戶,對這個文件的權限。以“vim”文件爲例,同用戶組的權限就是 [r-x],即可讀,可執行權限;
- 第8-10個字符:代表其他非本用戶組的權限。以“exports”文件爲例,其他非本用戶組的權限爲 [r–],也就是可讀權限;
- 第一個字符:代表這個文件是“目錄、文件或鏈接文件等”,就是文件的類型,不同的 字母 代表的含義是不一樣的:
- 列2:表示有多少文件名連接到此節點。通俗的理解就是此文件夾下,有多少個文件夾。按照我自己的測試,這個只會顯示有多少個文件夾,而不包含文件。另外需要注意的是,這個數量包含隱藏文件夾的數量,可以參考下圖做一個對比,11-Linux文件夾下邊只有一個文件夾,但是此處顯示的文件名卻是3,那是因爲還有2個隱藏文件夾,注意這兩個隱藏文件夾前邊的文件類型也是 d。
- 列3:表示這個文件或“目錄”的“所有者賬號”,按我的理解,就是這個文件是誰第一個創建出來的。
- 列4:表示這個文件所屬的用戶組,Group。
- 列5:表示這個文件的容量大小,默認單位爲B。
- 列6:表示這個文件第一次創建的日期,或者是最近的修改日期。其實也就是最後一次修改的日期。補充一點,如果希望顯示完整的時間格式,可以使用如下命令:
ls -l --full-time
- 列7:這一列就是文件名啦。需要了解的是,以英文符號 “.” 開頭的文件,爲隱藏文件。
4 如何改變文件屬性與權限
有幾個常用的更改文件屬性、文件權限的命令。先列出來,在一一分析:
- chgrp:改變文件所屬用戶組;
- chown:改變文件所有者;
- chmod:改變文件的權限;
4.1 改變所屬用戶組:chgrp
更改文件/目錄所屬用戶組,一般我們較爲常用的就是使用 chgrp 命令。其實這個命令就是英文 change group 的縮寫;
需要注意的是,要被改變的組名必須要在 /etc/group 文件內存在纔可以,否則就會報錯。
基本的命令格式如下:
chgrp [-R] [所屬羣組] [文件或目錄]
[-R]:進行遞歸的持續更改,即修改此目錄及其下屬所有文件/目錄的羣組。
更爲詳細的信息可以參考:菜鳥教程 - chgrp,裏邊有更爲詳盡的解釋及示例。
4.2 改變文件所有者:chown
更改文件/目錄的所有者,一般常用的命令就是 chown 命令,也就是英文 change owner 的縮寫;
同樣需要注意的是,用戶必須是已經存在於系統中的賬號,也就是在 /etc/passwd 這個文件中有記錄的用戶名稱才能改變。
基本的命令格式如下:
chown [-R] [賬號名稱] [文件或目錄]
[-R]:進行遞歸的持續更改,即修改此目錄及其下屬所有文件/目錄的羣組。
如果需要同時更改文件的所有者和用戶組,可以使用如下命令:
chown root:root filename
需要同時更改文件所有者及用戶組時,推薦使用冒號 “:” ;如果需要單純的修改用戶組怎麼辦?可以使用如下命令:
chown .root filename
此種情況下,可以使用英文的小數點 “.”
4.3 改變文件權限:chmod
這個命令,可以說是在實際使用中,最常用的一個命令之一。
基本的命令格式如下:
chmod [-R] [xyz] [文件或目錄]
[-R]:進行遞歸的持續更改,即修改此目錄及其下屬所有文件/目錄的羣組。
而這個命令,稍微大點來說,有兩種不同的用法,下邊分開描述。
4.3.1 數字類型改變文件權限
通過直接使用數字方法,改變文件權限,在實際中是較爲常用的方法。簡單的來說,一個文件/目錄,有三種不同的身份,每種身份有三種不同的權限,按照二進制來劃分如下:
r | w | x | r | w | x | r | w | x |
---|---|---|---|---|---|---|---|---|
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
同樣,拿上述三個文件,做個分析
列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 |
---|---|---|---|---|---|---|
drwxrwxrwx | 2 | zhaoc | zhaoc | 4096 | 10月 16 22:50 | Music |
drwxr-xr-x | 2 | root | root | 4096 | 3月 24 21:50 | vim |
-rw-r–r-- | 1 | root | root | 438 | 3月 15 15:49 | exports |
如果我要將 Music 設置爲當前權限(rwxrwxrwx),應該怎麼做,分析,此文件擁有全部的權限,如果要設置爲此權限類型,應該使用如下命令:
chmod 777 Music
同理,如果要將 exports 設置爲當前權限(rw-r–r--),設置命令如下:
chmod 644 exports
總結一下經驗就是,使用數組類型改變文件權限時,將對應位權限轉換爲二進制數值,通過此命令設置文件權限即可。
4.3.2 符號類型改變文件權限
所謂的符號類型,就是使用類似於字母的方式,來改變文件權限。我們常用的身份有 user、group、others 這三種身份,因此 Linux 中通過 u g o 來代表三種身份,另外用 a 代表全部的身份;
具體的權限類型就可以用 r w x 來表示;
操作方式可以用如下三種方式表示:
- +:表示給此文件/目錄,加入某種權限,除此之外的其他權限不變;按我的理解就是隻修改對應部分的權限;
- -:表示除去此文件/目錄的某種權限,除此之外的其他權限保持不變;
- =:表示給文件/目錄設置權限,此種方式會覆蓋原來的所有權限內容。
用上述 “exports” 文件舉例,此文件的權限爲(rw-r–r--),我們在設置時,可以使用如下命令:
chmod u=rw,go=r exports
上述命令解釋過來,就是給文件所有者 “u” ,設置可讀,可寫的權限;給用戶組和其他用戶設置可讀權限。
需要注意的是:u=rw,go=r 這條命令,是連在一起的,中間不能有任何空格
如果我們不知道某個文件原來的屬性,只想給這個文件的每個用戶增加一個可寫入的權限,就可以使用如下命令:
chmod a+w filename
同樣的,如果是要給這個文件的所有用戶去掉可執行權限,則可以使用如下命令:
chmod a-x filename
通過上面兩個示例,可以知道,在 + - 狀態下,只要是沒有指定到的選項,則該權限“不會被變動”。
5 目錄與文件的權限意義
目錄與文件的權限,對於數據的安全是有很重要的作用的,下邊分開來介紹文件權限對於一般文件與目錄文件有何不同
5.1 權限對文件的重要性
文件是實際含有數據的地方,包括一般文本文件、數據庫內容文件、二進制可執行文件等,因此權限對於文件來說,有如下意義:
- r(read):可讀取此文件的實際內容,如讀取文本文件的文字內容等;
- w(write):可以編輯、新增或者是修改該文件的內容,但是不包含刪除該文件;也就是說寫權限只能對文件的內容進行修改。
- x(execute):該文件具有可以被系統執行的權限。此時需要注意windows下可執行文件與Linux系統下可執行文件的不同。windows是根據文件的“擴展名”來判斷文件是否有可執行權限;而Linux是通過判斷此文件是否有 “x” 權限,來決定是否可以執行。
- 總結:對於文件來說,所具有的權限是對文件的內容的權限,但並不具備刪除該文件本身的權限。因爲文件記錄的是實際的數據。
5.2 權限對目錄的重要性
文件是存放實際數據的所在,目錄主要的內容是記錄文件名列表,文件名與目錄有強烈的關聯。所以對於目錄時,不同的權限也有不同的作用:
- r(read):表示具有讀取目錄結構列表的權限;也就是說,你可以看到這個目錄下有哪些文件列表,不過也就只是看看而已;
- w(write):這個可以寫入的權限對目錄來說是很強大的,它表示你具有更改該目錄結構列表的權限:
- 新建新的文件與目錄;
- 刪除已經存在的文件與目錄(不論該文件的權限爲何);
- 將已存在的文件或目錄進行重命名;
- 轉移該目錄內的文件、目錄位置。
- 總結一下:目錄的w權限就與該目錄下面的文件名變動有關聯。
- x(execute):目錄的可執行權限有什麼用?目錄不能被用來執行,但是目錄的x 可執行權限代表的是用戶能否進入該目錄成爲工作目錄的用途。
5.2.1 目錄實際舉例1
舉例說明目錄的可執行權限有什麼作用,假設有個目錄,權限如下:
drwxr--r-- 3 root root 4096 3月 24 21:50 filename
此時系統有個賬號名稱爲 zhaoc,這個賬號並沒有支持 root 用戶組,請問 zhaoc 對這個目錄有何權限?是否可以切換到此目錄中?
回答:zhaoc 對此目錄僅具有 r 的權限,因此 zhaoc 可以查詢此目錄下的文件名列表。因爲 zhaoc 不具有 x 的權限,所以 zhaoc 並不能切換到此目錄內。這一點很重要
5.2.2 目錄實際舉例2
假設我的賬號名稱爲 zhaoc,我的主文件夾在 /home/zhaoc 這個路徑下,zhaoc對此目錄具有完全的 [rwx] 權限,如果在此目錄下有一個文件 filename,改文件的權限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 filename
問題:zhaoc 對此文件夾的權限是什麼?可否刪除此文件?
回答:由上述文件權限列表可知,此時 zhaoc 對此文件來說是 “others”的身份,因此這個文件他無法讀,無法編輯,也無法執行,也就是說他無法變動這個文件的內容。但是,由於這個文件在他的主文件夾下,他在此目錄下具有 [rwx] 的完整權限,因此對於 filename 這個 “文件名” 來說,zhaoc 是能夠 “刪除” 的,也就是說 zhaoc 這個用戶能夠刪除 “filename” 這個文件。
6 結合工作實際
結合我目前工作經驗來看,在實際工作中,文件權限的重要性在開發服務器上會得到明顯體現。比如我剛到公司的時候,所有文件權限都是隻讀;目錄權限爲可讀、可執行;也就是說,我對服務器上的任何東西都沒有寫入權限;這樣很明顯的一個好處就是,防止新人不小心刪除服務器的文件,給公司造成損失。
等到後來我在公司待了一段時間,熟悉了一些東西、需要接觸項目開發的時候,就給我開放了對服務器特定目錄的可寫操作,保證我可以在此文件夾內,進行代碼修改、提交等操作。
7 總結
- 對用戶,用戶組等概念特徵,有了一個基本瞭解;
- 對文件屬性有了一個基本認識,以及文件屬性的查看方式等;
- 對改變文件屬性與權限的三種方法,有了更深入的瞭解;
- 對一些特定情況下的使用權限,有了很好的認識;
本篇文章就是基於書本內容的一個閱讀,與自己深入瞭解後的一個筆記總結。若有錯誤之處還望指正,希望對您能有幫助!感覺不錯可以留個贊哈,方便更多的人看到,謝謝各位!