1. 程式人生 > >《Linux系統》之"皮毛系列"(四) 使用者許可權管理

《Linux系統》之"皮毛系列"(四) 使用者許可權管理

總有人問,Linux系統為什麼比windows系統相對安全呢?我們可以總結如下:

(1)使用Linux系統的人數少,尤其在國內,很少有人關注Linux。
(2)因為Linux開源,任何的系統漏洞都會被民間高手,或者是官方人員很快的發現。從漏洞的發現到補丁的放出,時間相當短,沒有時間給病毒或者黑客作亂的機會。
(3)然後就是linux的許可權管理,linux的許可權管理很嚴格。病毒或者黑客想修改系統檔案或者系統日誌,除非有管理員密碼。所以就算中了病毒,病毒的危害也非常的小,重要的系統檔案都不會被破壞。所以發現了病毒稍做處理就搞定了。
(4)還有就是linux系統的程式管理。linux安裝程式,基本都是利用程式管理軟體,比如ubuntu、debian下的軟體中心、centos,fedora和紅帽的yum。linux系統安裝程式基本上都是用軟體管理程式,從程式開發者官網上或者是相應的發行版社群直接下載安裝。不會有被惡意篡改的軟體被安裝到使用者的電腦上。

今天,我們來看一下許可權管理的相關知識點......................................................

一、linux系統的使用者

Linux作業系統是多工(Multi-tasks)多使用者(Multi-users)的分時作業系統。每當我們使用使用者名稱登入作業系統時,Linux都會對該使用者進行認證、授權審計等操作。正因為是多使用者的作業系統,常常不可避免的當然還是多個使用者在同一時間段內使用同一臺主機,因此,使用者的隱私權就必須格外的被重視,這就涉及到檔案的所有者這個概念了。

1、檔案的所有者

檔案的所有者(英文:owner),一般指的是檔案的建立者;當某個使用者新建立了一個檔案,那麼這個使用者天生就是這個檔案的擁有者。再比如,如果這個使用者使用者哪天離職了,在離職前,他也可以使用命令來修改檔案的所有者。

檔案的所有者,可以很方便的來解決許可權問題。比如,你將你的祕密轉成檔案後,存入到你的主目錄中。你總不希望其他人看到你的祕密吧!這個時候,你就可以設定只有檔案的所有者才能檢視和修改這個檔案的內容。即使其他人知道你有這麼個“神祕”的檔案,由於你的適當設定,他們也無法知道里面的內容。

2、使用者組

使用者組(英文:group)這個概念設計,其實是用來進一步擴充套件檔案的授權與管理的。特別適合在公司團隊開發資源的時候。比如在一臺主機上,有10個使用者,使用者A,B,C,D,E是一個團隊,他們在開發一個金融專案,使用者H,I,J,K,L是一個團隊,在開發一個公司規劃專案。團隊內部的使用者可以互相檢視和修改檔案內容,而其他團隊的使用者是不應該檢視和修改本團隊的檔案內容的。因此引用了“使用者組”

的概念。

擁有了使用者組這個概念後,你就可以輕鬆的設定你所在的使用者組的其他成員有能夠看和修改你自己的檔案內容,非本組成員不能對你的檔案檢視和修改等等。

3、其他人

除了檔案的擁有者,檔案的所屬使用者組之外的使用者,我們統稱為其他人(英文:others)。你的檔案對其他人也可以很好的統一設定相應的許可權,比如,可以對除了你和本組成員外的老闆,總監等等其他人設定只能檢視你的檔案的許可權。

我們可以使用ls -l來檢視檔案的所有者,使用者組。

二、Linux系統的檔案許可權

瞭解了使用者和使用者之後,接下來,我們要著重學習一下檔案的許可權如果針對“使用者”和“使用者組”來設定呢!這一部分格外重要,尤其是對初學者來說,檔案的許可權和屬性是學習Linux的一個相當重要的關卡。如果不明白這一部分的概念,那麼你一定不會明白別人在講什麼。當你的螢幕上出現了“Permission denied”的時候,別慌,一定是許可權設定問題。

1、Linux檔案屬性

我們知道,當使用ls -la等命令時,會出現以下七列資訊:

[email protected] test]$ ls -l
總用量 4
-rw-rw-r--.    1    michael    michael      0   12月 15 06:27    a.txt
-rw-rw-r--.    1    michael    michael      0   12月 15 06:27    b.java
drwxrwxr-x.    2    michael    michael   4096   12月 15 06:27    test
[    1    ]  [ 2 ]  [  3  ]    [  4  ]   [ 5 ]  [     6     ]    [  7  ]

依次是許可權,連線數,所有者,使用者組,檔案大小,修改時間,檔名

第一列代表這個檔案的型別和許可權。我們不難發現,它是由10個字元組成的。下面我們來解析一下這10個字元:

第一個字元:代表這個檔案的型別,如,d表示目錄,-表示普通檔案,l表示連結檔案等,之前的文章裡有講過【點選進入
接下來的9個字元,每三個為一組。
第一組為檔案所有者的許可權設定,第二組為本使用者組的許可權設定,第三組為其他人的許可權設定。

在Linux系統中,檔案的許可權有三種表現形式,分別是“讀”,“寫”,“執行”,可以總結如下表:

許可權 代表字元 對檔案的含義 對目錄的含義
r 可以檢視檔案的內容 可以列出目錄的內容
w 可以修改檔案的內容 可以在目錄內進行建立、刪除檔案
執行 x 可以執行檔案 可以進入目錄

比如舉個例子,見下圖:

小貼士:每一組的rwx位置是不會變的,有該許可權就顯示字元,如果是減號-,就表示無此許可權。

2、Linux檔案許可權的重要性

Linux系統與windows系統的區別就是,每一個檔案都加了很多屬性,尤其是“使用者組”這個概念,這樣有什麼用途呢?其實,最大的用途在於“資料安全”上。

系統保護的功能:舉個例子,在linux系統中,關於系統服務的檔案通常只有root才能讀寫或者是執行,例如/etc/shadow這一個賬號管理的檔案,該檔案記憶體儲了系統中所有賬號的資料, 因此是很重要的一個配置檔案,當然不能讓任何人讀取(否則密碼會被竊取),只有root才能夠來讀取。所以該檔案的許可權被設定成為[ -rw------- ]。

團隊開發軟體或資料共享的功能:再如你所在的一個軟體開發團隊,你希望團隊成員都可以使用某一些目錄下的檔案, 而非你團隊的其他人不予開放,那麼你就可以將團隊所需的檔案許可權設定為[ -rwxrwx--- ]。

未將許可權設定妥當的危害:如果你的目錄許可權沒有作好的話,可能造成其他人都可以在你的系統上面亂搞。 例如本來只有root才能做的開關機、新增或刪除使用者等等的指令,若被你改成任何人都可以執行的話, 那麼如果使用者不小心給你重新啟動,刪除某使用者等等操作,那麼你的系統就會常常莫名其妙的故障! 而且萬一你的使用者的密碼被其他不明人士取得的話,只要他登入你的系統就可以輕而易舉的執行一些root的工作!

因此,在你修改你的linux檔案與目錄的屬性之前,一定要先搞清楚, 什麼資料是可變的,什麼是不可變的!千萬注意!接下來我們來處理一下檔案屬性與許可權的變更!

3、如何改變檔案屬性和許可權

我們可以使用以下常用的三個命令來修改檔案屬性和許可權。注意:u表示所有者,g表示使用者組,o表示其他人


1)chmod命令

命令原意:change the permissions mode of a file        命令路徑:/bin/chmod             執行許可權:所有使用者
功能描述:改變檔案或目錄許可權
語法:chmod [{ugo}{+-=}{rwx}] [檔案或目錄]
                       [mode=421] [檔案或目錄]
案例1:  賦予檔案file1所屬組寫許可權
               chmod g+w file1
案例2:取消所有者,使用者組,其他人三個部分對file1的寫許可權
               chmod ugo-w file1
案例3:設定目錄dir1為所有使用者具有全部許可權
               chmod 777 dir1


2)chown命令

命令原意:change  file  ownership                               命令路徑:/bin/chown              執行許可權:root
功能描述:改變檔案或目錄的所有者
語法:chown [使用者] [檔案或目錄]
案例1:改變檔案file1的所有者為nobody
           chown  nobody  file1
案例2:將install.log的擁有者與群組改回為root 
            chown root:root install.log

chown還可以順便直接修改群組的名稱!此外,如果要連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 -R 的選項即可!

案例3:修改目錄dir1及其子目錄和檔案的擁有者為michael.
           chown -R michael: dir1;
案例4:修改目錄dir1的使用者組為root
           chown .root dir1

小貼士: 使用者和使用者組必須是已經存在系統中的賬號,也就是在/etc/passwd 這個檔案中有紀錄的使用者名稱稱才能改變。


3)chgrp命令

命令原意:change  file  group ownership                  命令路徑:/bin/chgrp                    執行許可權:root
功能描述:改變檔案或目錄的所屬組
語法:chgrp [使用者組] [檔案或目錄]
案例1:  改變檔案file1的所屬組為adm
            chgrp  dam  file1
案例2:修改目錄dir1及其子目錄和檔案的使用者組為michael
            chgrp -R michael dir1


4、許可權數字    

Linux系統在檔案許可權上,除了使用“r”,"w","x"這樣的字元來代表外,其實也使用了二進位制的數字來替代(原則:rwx位置順序固定,根據位置對應關係,對應三位數的二進位制,有許可權的位置上為1,無許可權的位置上為0),見下表

代表字元 二進位制表現形式 十進位制數字
r 100 4
w 010 2
x 001 1

於是,我們可以使用許可權的數字之和來設定檔案的所有者,使用者組或其他人的許可權。比如6,只能是4與2的和,表示擁有讀和寫許可權,再如3,也只能是2與1的和,表示擁有寫和執行的許可權。因為所有者,使用者組,其他人三個概念在Linux上也是固定順序,可以表示為ugo,那麼就可以使用三個連續的數字來表示對應使用者的許可權。如:755,表示u為7,g為5,o為5,即所有者有rwx許可權,使用者組有r_x許可權,其他人有r_x許可權。

案例1:修改目錄dir1為所有使用者為全部許可權
             chmod 777 dir1
案例2:修改檔案file1為所有使用者只有執行許可權
             chmod 111 file1
案例3:chmod  7  file1     #表示其他人有全部許可權,而所有者和使用者組沒有任何許可權。一位數相當於前面有兩個0,兩位數相當於前面有一個0,   即    7 等價於007, 54等價於054.

5、umask命令

在Linux系統中,建立一個檔案總是有一個預設許可權的,那麼這個許可權是怎麼來的?其實,這就是umask乾的事情。umask設定了使用者建立檔案的預設許可權。不過,umask設定的是許可權的“補碼”(也稱掩碼),它與chmod的效果剛好相反,chmod設定的是檔案許可權碼。我們可以在 /etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中設定umask值。

檢視系統預設許可權補碼:

[[email protected] 桌面]$ umask
0022
           #  第一個0表示八進位制,  後三位022才是真實補碼

修改許可權補碼語法格式:umask  nnn,

[[email protected] ~]$ umask nnn         #實際設定時,請將n設定為數字

此時的nnn就是許可權的補碼。Linux系統規定,不允許使用者在建立一個檔案時就授予執行許可權(建立後,可以使用chmod修改),因此n的最大值為6;而對於目錄而言,n的最大值為7。因此:

檔案的實際許可權為:666-nnn

目錄的實際許可權為:777-nnn

舉個例子,如果我們使用umask命令進行了如此操作:umask  022。那麼系統的實際許可權就是:

檔案預設許可權:666 - 022  為644,即 "r-xr--r--".

目錄預設許可權:777 - 022 為755, 即"rwxr-xr-x".

-------------------------------------------------------------------未完待續,敬請留言------------------------------------------------------------------------------------