《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等命令時,會出現以下七列信息:

michael@admin 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值。

查看系統默認權限補碼:

[michael@master 桌面]$ umask
0022
           #  第一個0表示八進制,  後三位022纔是真實補碼

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

[michael@master ~]$ 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".

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章