1. 程式人生 > >Ubuntu下的使用者和許可權(一)

Ubuntu下的使用者和許可權(一)

一、基礎

在某個目錄下使用命令“ls -l”可以得到該目錄下檔案的詳細資訊,如:

-rw-------  1 m    m     30509  7月  8 00:26 .xsession-errors.old
drwxr-xr-x  2 m    m      4096  4月 15 19:59 公共的/
drwxr-xr-x  2 m    m      4096  4月 15 19:59 模板/
drwxr-xr-x  2 m    m      4096  5月  9 09:23 視訊/
drwxr-xr-x  3 m    m      4096  7月  2 16:56 圖片/
drwxr-xr-x  7 m    m      4096  6月 30 17:09 文件/
drwxr-xr-x  2 m    m      4096  7月  6 12:36 下載/
drwxr-xr-x  2 m    m      4096  7月  6 12:37 音樂/
drwxr-xr-x  2 m    m      4096  7月  8 10:13 桌面/

在linux中,使用者是這樣被管理的:首先把所有使用者分成一個個的組(group),每個組下面有若干使用者(user)。於是對於一個檔案或目錄,它的的許可權就有三部分,分別是user本身(u),組裡除了user的其他人group(g),然後就是組外的人,稱為others(o),這三部分合在一起為all(a)。

對應ls -l命令的輸出,每行的前十個字元為該檔案或目錄的屬性,第一個表示其檔案型別,這個不多說;後面9個分為三組,每組三個字元,分別表示u、g、o三組的許可權。linux下檔案的許可權一般分為三種:讀(r)、寫(w)、執行(x)。由上面可以看出,某組許可權的三個字元位中,從前往後依次為讀、寫、執行,若有相應的許可權就會顯示該許可權的表示字元,若沒有則用“-”表示。

二、chmod命令

首先要po上一張表,我們已經知道每組有三個許可權,每個許可權位有兩種狀態,於是三個位組合起來就有8種狀態,如下:

Octal     Binary        FileMode

0            000             ---

1            001             --x
2            010             -w-

3            011            -wx
4            100            r--
5            101            r-x
6            110            rw-
7            111            rwx

           這張表的目的是為了簡化許可權的表示,不必每次都寫全部字母,用一個數字就可以代替。那麼如何理解這張表有兩種方式:

1、每個許可權位都有兩種狀態,有或者沒有,分別表示為0或1,那麼許可權的八種狀態很自然的就是三個位的0、1組合,每個組合可以用一個八進位制數字表示,就如表的最左邊那一列所示;

2、我們賦予每種許可權以不同的數值,r為4,w為2,x為1,-為0,那麼每組所擁有的許可權就是每種許可權數值的和。

          總之,無論哪種方式,我們的目的就是得到表格最左邊那一列的八進位制數字。下面我們就用chmod命令來修改一個檔案的許可權。

最基本的: chmod  ???  filename   每個?代表一個組的許可權。比如 chmod 777 filename 表示給filename的每一組都賦予全部的許可權。

升級:  chmod  u/g/o/a  +/-/=  r/w/x  這種格式, 首先給出要賦予的組名稱,如u,ug,go,uo,a等,如果不寫則預設為a;然後給出運算子,+表示新增,-表示移除,=表示設定;最後就是許可權的組合了,如r,rw,wx等。

例: chmod o + wx filename; chmod u - x filename; chmod + w filename; chmod go = r filename; 

如果要分別設定多個組的不同許可權,需要用逗號隔開,如: chmod u - x, go = r filename 

三、umask命令(待續)

四、超級使用者許可權命令:su和sudo

         在linux下,只有一個超級使用者root,擁有超級許可權,其家目錄就是/root。其他的都是普通使用者,家目錄是/home下用username命名的資料夾。Ubuntu有一個與眾不同的特點,那就是初次 使用時,你無法作為root來登入系統,為什麼會這樣?這就要從系統的安裝說起。對於其他Linux系統來說,一般在安裝過程就設定root密碼,這樣用 戶就能用它登入root帳戶或使用su命令轉換到超級使用者身份。與之相反,Ubuntu預設安裝時,並沒有給root使用者設定口令,也沒有啟用root帳 戶。   root 使用者和安裝系統時的使用者是兩回事,除非安裝時使用者名稱取名 root。

1、su

       su用來切換當前使用者到指定的使用者,其格式為:su 引數 username。省略username時,預設為root。

       一般使用的引數有:-l (login),表示改變使用者的同時也載入該使用者的環境設定,可以簡寫為-,即省略l;-p(),表示不改變環境變數的設定;  -c (command),這個引數後面需要跟一個用單引號括起來的命令,表示切換到某個使用者後只執行這一條命令,完畢後再回到原來的使用者。

2、sudo

        su可以直接切換到root使用者從而獲取最高許可權,但這也增加了風險。一般情況下,作為普通使用者只需要在某幾個時刻才會用到root許可權,普通使用者的許可權足以執行大部分的命令。這樣一來,就沒必要先切換到root身份打完命令再切換回來。

        sudo就是為了解決這一需求而產生的。它只要求普通使用者輸入自己的密碼而不是root的密碼就可以暫時性的獲得root許可權,“暫時性”是指只執行一條命令,完事就失去root許可權。有點像上面的su -c ,但後者要求root密碼。
       我們可以簡單的理解成:su獲得穩定的超級使用者(或其他使用者許可權),sudo獲得暫時性的限制了的root許可權,一段時間之後會失效。

       當然sudo的作用遠不止此,實際上,sudo有點像可以精細控制的su,不僅可以暫時性獲得root許可權,也可以獲得其他使用者的許可權;不僅在獲取某個使用者許可權後可以執行全部命令,還可以限制他只執行某些命令——因為只需要執行某幾個命令的情況下而給予全部命令的執行許可權是危險的且不必要的。能夠實現這種精細控制的辦法就是修改sudo的配置檔案。

sudo的配置檔案是/etc/sudoers,在修改該配置檔案時,務必使用visudo工具 來進行編輯,因為該工具會自動對配置語法進行嚴格檢查,如果發現錯誤,在儲存退出時給出警告,並提示你哪段配置出錯,從而確保該配置檔案的正確性。相反, 如果使用其它的文字編輯程式的話,一旦出錯,就會給系統帶來嚴重的後果。下面給出的是Ubuntu預設的/etc/sudoers檔案內容:

# User privilege specification

root ALL=(ALL) ALL

# Members of the admin group may gain root privileges

%admin ALL=(ALL) ALL

第 一項配置的作用,是允許root使用者使用sudo命令變成系統中任何其它型別的使用者。第二個配置規定,管理組中的所有成員都能以root的身份執行所有命 令。

例:jorge ALL=(root) /usr/bin/find, /bin/rm

第一欄規定它的適用物件:使用者或組,就本例來說,它是使用者jorge。此外,因為系統中的組和使用者可以重名,要想指定該規則的適用物件是組而非使用者的話,組物件的名稱一定要用百分號%開頭。第二欄指定該規則的適用主機。當我們在多個系統之間部署sudo環境時,這一欄格外有用,這裡的ALL代表所有主機。但是,對於桌面系統或不想將sudo部署到多個系統的情況,這一欄就換成相應的主機名。第三欄的值放在括號內,指出第一欄規定的使用者能夠以何種身份來執行命令。本例中該值設為root,這意味著使用者jorge能夠以root使用者的身份來執行後面列出的命令。該值也可以設成萬用字元ALL,jorge便能作為系統中的任何使用者來執行列出的命令了。最 後一欄(即/usr/bin/find, /bin/rm)是使用逗號分開的命令表,這些命令能被第一欄規定的使用者以第三欄指出的身份來執行它們。本例中,該配置允許jorge作為超級使用者執行 /usr/bin/find和 /bin/rm這兩個命令。需要指出的是,這裡列出的命令一定要使用絕對路徑。

sudo命令預設的切換使用者是root,要想以非root使用者身份來執行命令,必須使用-u選項來指定想要作為的使用者,當然前提是在sudoers中配置好了。比如要想以fred身份來執行ls命令,就應該這樣:$ sudo -u fred ls /home/fred,沒有“-u fred”時就預設為切換到root。