天天看點

Linux初學(CnetOS Linux7)之檔案權限

1.使用者與群組以及其他人的概念

假設有一家人,家裡隻有三兄弟,分别是王大毛、王二毛與王三毛三個人, 而這個家庭是登記在王大毛的名下的!是以,『王大毛家有三個人,分别是王大毛、王二毛與王三毛』, 而且這三個人都有自己的房間,并且共同擁有一個客廳!

使用者的意義:由于王家三人各自擁有自己的房間,是以, 王二毛雖然可以進入王三毛的房間,但是二毛不能翻三毛的抽屜! 因為抽屜裡面面可能有三毛自己私人的東西,例如日記等等的,這是『私人的空間』,是以當然不能讓二毛拿! 

群組的概念:由于共同擁有客廳,是以王家三兄弟可以在客廳打開電視機、坐在沙發上面發呆等等的!反正,隻要是在客廳的東西,三兄弟都可以使用! 

今天又有個人,叫做小花,他是小花家的人,與王家沒有關系! 這個時候,除非王家認識小花,然後開門讓小花進來王家,否則小花永遠沒有辦法進入王家, 更不要說進到王三毛的房間!小花就是所謂的『其他人,Others』

2.Linux 使用者身份與群組記錄的檔案

在Linux系統當中,預設的情況下,所有的系統上的帳号與一般身份使用者,還有root的相關資訊, 都是記錄在/etc/passwd這個檔案内的。至于個人的密碼則是記錄在/etc/shadow這個檔案下。 此外,Linux所有的群組名稱都紀錄在/etc/group内!這三個檔案可以說是Linux系統裡面帳号、密碼、群組資訊的集中地! 不要随便删除這三個檔案!

3. Linux檔案屬性 

『ls 』這一個察看檔案的指令!首先以普通使用者的身份登入系統,然後使用 su - 切換身份成為root後, 下達『 ls -al 』指令

[[email protected] ~]$ su -  # 先來切換一下身份看看
Password:
[[email protected] ~]# ls -al
total 48
dr-xr-x---.  5    root     root    4096  May 29 16:08 .
dr-xr-xr-x. 17    root     root    4096  May  4 17:56 ..
-rw-------.  1    root     root    1816  May  4 17:57 anaconda-ks.cfg
-rw-------.  1    root     root     927  Jun  2 11:27 .bash_history
-rw-r--r--.  1    root     root      18  Dec 29  2013 .bash_logout
-rw-r--r--.  1    root     root     176  Dec 29  2013 .bash_profile
-rw-r--r--.  1    root     root     176  Dec 29  2013 .bashrc
drwxr-xr-x.  3    root     root      17  May  6 00:14 .config               <=範例說明處
drwx------.  3    root     root      24  May  4 17:59 .dbus
-rw-r--r--.  1    root     root    1864  May  4 18:01 initial-setup-ks.cfg  <=範例說明處
[    1    ][  2 ][   3  ][  4 ][    5   ][    6     ] [       7          ]
[  權限   ][連結][擁有者][群組][檔案容量][ 修改日期 ] [      檔名        ]
           

ls是『list』的意思,重點在顯示檔案的檔名與相關屬性。而選項『-al』則表示列出所有的檔案詳細的權限與屬性 (包含隐藏檔,就是檔名第一個字元為『 . 』的檔案)。

</pre><pre name="code" class="plain">-rw-r--r--.  1    root     root    1864  May  4 18:01 initial-setup-ks.cfg  <=範例說明處
[    1    ][  2 ][   3  ][  4 ][    5   ][    6     ] [       7          ]
[  權限   ][連結][擁有者][群組][檔案容量][ 修改日期 ] [      檔名        ]
           
1. -rw-r--r-- :代表這個檔案的類型與權限
    • 第一個字元代表這個檔案是『目錄、檔案或連結檔等等』:
      • 當為[ d ]則是目錄,例如上表檔名為『.config』的那一行;
      • 當為[ - ]則是檔案,例如上表檔名為『initial-setup-ks.cfg』那一行;
      • 若是[ l ]則表示為連結檔(link file);
      • 若是[ b ]則表示為裝置檔裡面的可供儲存的周邊裝置(可随機存取裝置);
      • 若是[ c ]則表示為裝置檔裡面的序列埠裝置,例如鍵盤、滑鼠(一次性讀取裝置)。
    • 接下來的字元中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減号[ - ]而已。
      • 第一組為『檔案擁有者可具備的權限』,以『initial-setup-ks.cfg』那個檔案為例, 該檔案的擁有者可以讀寫,但不可執行;
      • 第二組為『加入此群組之帳号的權限』;
      • 第三組為『非本人且沒有加入本群組之其他帳号的權限』。

2. 1 :表示有多少檔名連結到此節點(i-node)

每個檔案都會将他的權限與屬性記錄到檔案系統的i-node中,不過,我們使用的目錄樹卻是使用檔名來記錄, 是以每個檔名就會連結到一個i-node!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個i-node号碼

3. root :表示這個檔案(或目錄)的『擁有者帳号』

4. root :表示這個檔案的所屬群組

5. 1864 :這個檔案的容量大小,預設機關為bytes

6.  May  4 18:01 :這個檔案的建檔日期或者是最近的修改日期

如果想要顯示完整的時間格式,可以利用ls的選項,亦即:『ls -l --full-time』就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。 另外,如果是以繁體中文安裝你的Linux系統,那麽日期欄位将會以中文來顯示。 可惜的是,中文并沒有辦法在純文字的終端機模式中正确的顯示,是以此欄會變成亂碼。 那得要使用『export LC_ALL=en_US.utf8』來修改語系喔!
如果想要讓系統預設的語系變成英文的話,那麽你可以修改系統設定檔『/etc/locale.conf』
7. initial-setup-ks.cfg :為這個檔案的檔名,如果檔名之前多一個『 . 』,則代表這個檔案為『隐藏檔』

4.改變檔案屬性與權限

  • chgrp :改變檔案所屬群組
  • chown :改變檔案擁有者
  • chmod :改變檔案的權限, SUID, SGID, SBIT等等的特性

改變所屬群組, chgrp 要被改變的群組名稱必須要在/etc/group檔案記憶體在才行,否則就會顯示錯誤!連目錄下的所有次目錄或檔案同時更改檔案群組的話,直接加上 -R 的選項即可

[[email protected] ~]# chgrp [-R] dirname/filename ...
           

改變檔案擁有者, chown

使用者必須是已經存在系統中的帳号,也就是在/etc/passwd 這個檔案中有紀錄的使用者名稱才能改變。連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 -R 的選項即可

[[email protected] ~]# chown [-R] 帳号名稱 檔案或目錄
[[email protected] ~]# chown [-R] 帳号名稱:群組名稱 檔案或目錄
           

注:chown也可以使用『chown user.group file』 ,亦即在擁有者與群組間加上小數點『 . 』 也行! 不過設定帳号時,在帳号當中加入小數點這就會造成系統的誤判了! 是以建議使用冒号『:』 來隔開擁有者與群組啦!此外,chown也能單純的修改所屬群組呢! 例如『chown .sshd initial-setup-ks.cfg』 就是修改群組,那就是那個小數點的用途

改變權限, chmod

檔案權限的改變使用的是chmod這個指令,權限的設定方法有兩種, 分别可以使用數字或者是符号來進行權限的變更

  • 數字類型改變檔案權限

Linux檔案的基本權限就有九個,分别是owner/group/others三種身份各有自己的read/write/execute權限, 檔案的權限字元為:『-rwxrwxrwx』, 這九個權限是三個三個一組的!其中,可以使用數字來代表各個權限,各權限的分數對照表如下:

r:4

w:2

x:1 每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

others= --- = 0+0+0 = 0

是以設定權限的變更時,該檔案的權限數字就是770啦!變更權限的指令chmod的文法是這樣的:

[[email protected] ~]# chmod [-R] xyz 檔案或目錄
選項與參數:
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更
           
在實際的系統運作中最常發生的一個問題就是,以vim編輯一個shell的文字批次檔後,文檔的權限通常是 -rw-rw-r-- 也就是664, 如果要将該檔案變成可執行檔,并且不要讓其他人修改此一檔案的話, 那麼就需要-rwxr-xr-x這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令
  • 符号類型改變檔案權限

改變權限的方法,基本上就九個權限分别是(1)user (2)group (3)others三種身份!那麼我們就可以使用u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麽讀寫的權限就可以寫成r, w, x!

chmod

u

g

o

a

+(加入)

-(除去)

=(設定)

r

w

x

檔案或者目錄
[[email protected] ~]# chmod  u=rwx,go=rx  .bashrc
# 注意!那個 u=rwx,go=rx 是連在一起的,中間并沒有任何空白字元!
           

5.權限對檔案的重要性

檔案是實際含有資料的地方,包括一般文字檔、資料庫内容檔、二進位可執行檔(binary program)等等。 是以,權限對于檔案來說,他的意義是這樣的:

  • r (read):可讀取此一檔案的實際内容,如讀取文字檔的文字内容等;
  • w (write):可以編輯、新增或者是修改該檔案的内容(但不含删除該檔案);
  • x (eXecute):該檔案具有可以被系統執行的權限。

在Linux底下,檔案是否能被執行,是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關系的 6.權限對目錄的重要性

r (read contents in directory):

表示具有讀取目錄結構清單的權限,是以當你具有讀取(r)一個目錄的權限時,表示可以查詢該目錄下的檔名資料。 是以可以利用 ls 這個指令将該目錄的内容清單顯示出來!

w (modify contents of directory):

這個可寫入的權限對目錄來說,是很了不起的! 因為他表示具有異動該目錄結構清單的權限,也就是底下這些權限:

  • 建立新的檔案與目錄;
  • 删除已經存在的檔案與目錄(不論該檔案的權限為何!)
  • 将已存在的檔案或目錄進行更名;
  • 搬移該目錄内的檔案、目錄位置。

x (access directory):

目錄的x代表的是使用者能否進入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄!舉例來說,當登入Linux時, 你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是『cd』(change directory)!

現在假設『檔案是一堆檔案資料夾』,是以可以在上面寫/改一些資料。而『目錄是一堆抽屜』,是以可以将資料夾分類放置到不同的抽屜去。 是以抽屜最大的目的是拿出/放入資料夾.其實,這個 x 權限設計,就相當于『該目錄,也就是該抽屜的 "鑰匙" 』,沒有鑰匙打不開抽屜 注意:

  1. 要開放目錄給任何人浏覽時,應該至少也要給予r及x的權限,但w權限不可随便給w 則具有相當重要的權限,因為他可以讓使用者刪除、更新、建立檔案或目錄
  2. 如果該目錄屬于使用者本身,即使目錄下的文檔對使用者沒有wx權限,但是使用者在這個目錄底下還是能夠删除檔案的。這就相當于有個莫名其妙的人,拿著一個完全密封的資料夾放到你的辦公室抽屜中,因為完全密封你也打不開、看不到這個資料夾的内部資料(對檔案來說,你沒有權限)。 但是因為這個資料夾是放在你的抽屜中,你當然可以拿出/放入任何資料在這個抽屜中(對目錄來說,你具有所有權限)。 是以,情況就是:你打開抽屜、拿出這個沒辦法看到的資料夾、将他丢到走廊上的垃圾桶,順利删除!

7.使用者操作功能與權限

  • /dir1/file1
  • /dir2

  現在在系統使用普通使用者xiaohui這個帳号,那麽這個帳号針對 /dir1, /dir1/file1, /dir2 這三個檔名來說,分别需要『哪些最小的權限』才能達成各項任務?

操作動作 /dir /dir1/file1 dir2 重點
讀取 file1 内容 x r - 要能夠進入 /dir1 才能讀到裡面的檔案資料!
修改file内容 x wx - 能夠進入 /dir1 且修改 file1 才行!
執行 file1 内容 x rx - 能夠進入 /dir1 且 file1 能運作才行!
删除 file1檔案 wx - - 能夠進入 /dir1 具有目錄修改的權限即可!
将 file1 複製到 /dir2 x r wx 能夠讀 file1 且能夠修改 /dir2 内的資料

上面的表格當中,很多時候 /dir1 都不必有r權限,因為我們知道 /dir1 是個目錄,也是個抽屜!那個抽屜的 r 代表『這個抽屜裡面有燈光』, 是以能看到的抽屜内的所有資料夾名稱 (非内容)。但你已經知道裡面的資料夾放在哪個地方,那麼即使沒有的燈光可以摸黑拿到該資料夾 是以,上面很多動作中,你隻要具有 x 即可,r 是非必備的!隻是,沒有 r 的話,使用 [tab] 時,系統就無法自動幫你補齊檔名了!

繼續閱讀