1. 程式人生 > >02 使用者及檔案許可權管理

02 使用者及檔案許可權管理

一、Linux 使用者管理

Linux 是一個可以實現多使用者登陸的作業系統,比如“李雷”和“韓梅梅”都可以同時登陸同一臺主機,他們共享一些主機的資源,但他們也分別有自己的使用者空間,用於存放各自的檔案。但實際上他們的檔案都是放在同一個物理磁碟上的甚至同一個邏輯分割槽或者目錄裡,但是由於 Linux 的 使用者管理 和 許可權機制,不同使用者不可以輕易地檢視、修改彼此的檔案。

1. 檢視使用者

開啟終端,輸入命令:

$ who am i

或者

$ who mom likes

3-2.1-1

輸出的第一列表示開啟當前偽終端的使用者的使用者名稱(只檢視當前登入使用者的使用者名稱,去掉空格直接使用 whoami

 即可),第二列的 pts/0 中 pts 表示偽終端,所謂偽是相對於 /dev/tty 裝置而言的,那七個使用 [Ctrl]+[Alt]+[F1]~[F7] 進行切換的 /dev/tty 裝置是“真終端”,偽終端就是當你在圖形使用者介面使用 /dev/tty時每開啟一個終端就會產生一個偽終端, pts/0 後面那個數字就表示開啟的偽終端序號,你可以嘗試再開啟一個終端,然後在裡面輸入 who am i ,看第二列是不是就變成 pts/1了,第三列則表示當前偽終端的啟動時間。

who 命令其它常用引數

引數 說明
-a 列印能列印的全部
-d 列印死掉的程序
-m am i,mom likes
-q 列印當前登入使用者數及使用者名稱
-u 列印當前登入使用者登入資訊
-r 列印執行等級

2. 建立使用者

在 Linux 系統裡, root 賬戶擁有整個系統至高無上的權利,比如 新建/新增 使用者。

root 許可權,系統許可權的一種,與 SYSTEM 許可權可以理解成一個概念,但高於 Administrator 許可權,root 是 Linux 和 UNIX 系統中的超級管理員使用者帳戶,該帳戶擁有整個系統至高無上的權力,所有物件他都可以操作,所以很多黑客在入侵系統的時候,都要把許可權提升到 root 許可權,用 Windows 的方法理解也就是將自己的非法帳戶新增到 Administrators 使用者組。更比如安卓作業系統中(基於 Linux 核心)獲得 root 許可權之後就意味著已經獲得了手機的最高許可權,這時候你可以對手機中的任何檔案(包括系統檔案)執行所有增、刪、改、查的操作。

我們一般登入系統時都是以普通賬戶的身份登入的,要建立使用者需要 root 許可權,這裡就要用到 sudo 這個命令了。不過使用這個命令有兩個大前提,一是你要知道當前登入使用者的密碼,二是當前使用者必須在 sudo 使用者組。

su,su- 與 sudo

su <user> 可以切換到使用者 user,執行時需要輸入目標使用者的密碼,sudo <cmd> 可以以特權級別執行 cmd 命令,需要當前使用者屬於 sudo 組,且需要輸入當前使用者的密碼。su - <user> 命令也是切換使用者,同時環境變數也會跟著改變成目標使用者的環境變數。

現在我們新建一個叫 lilei 的使用者:

$ sudo adduser lilei

實驗樓的環境目前設定為 shiyanlou 使用者執行 sudo 不需要輸入密碼,通常此處需要按照提示輸入 shiyanlou 密碼(Linux 下密碼輸入是不顯示任何內容的),shiyanlou 使用者密碼可以通過點選右側邊欄的SSH直連檢視。然後是給 lilei 使用者設定密碼,後面的選項的一些內容你可以選擇直接回車使用預設值:

3-2.2-1

這個命令不但可以新增使用者到系統,同時也會預設為新使用者建立 home 目錄:

$ ls /home

現在你已經建立好一個使用者,並且你可以使用你建立的使用者登入了,使用如下命令切換登入使用者:

$ su lilei

$ su -l lilei

輸入剛剛設定的 lilei 的密碼:

3-2.2-2

退出當前使用者跟退出終端一樣可以使用 exit 命令或者使用快捷鍵 Ctrl+d

3. 使用者組

在 Linux 裡面每個使用者都有一個歸屬(使用者組),使用者組簡單地理解就是一組使用者的集合,它們共享一些資源和許可權,同時擁有私有資源,就跟家的形式差不多,你的兄弟姐妹(不同的使用者)屬於同一個家(使用者組),你們可以共同擁有這個家(共享資源),爸媽對待你們都一樣(共享許可權),你偶爾寫寫日記,其他人未經允許不能檢視(私有資源和許可權)。當然一個使用者是可以屬於多個使用者組的,正如你既屬於家庭,又屬於學校或公司。

在 Linux 裡面如何知道自己屬於哪些使用者組呢?

方法一:使用 groups 命令

$ groups shiyanlou

此處輸入圖片的描述

其中冒號之前表示使用者,後面表示該使用者所屬的使用者組。這裡可以看到 shiyanlou 使用者屬於 shiyanlou 使用者組,每次新建使用者如果不指定使用者組的話,預設會自動建立一個與使用者名稱相同的使用者組(差不多就相當於家長的意思,或者說是老總)。

#建立一個名為xiaozhen的使用者,指定使用者組為shiyanlou
$ sudo adduser -g shiyanlou xiaozhen

$ sudo passwd xiaozhen #設定密碼

$ groups xiaozhen
xiaozhen : shiyanlou

預設情況下在 sudo 使用者組裡的可以使用 sudo 命令獲得 root 許可權。shiyanlou 使用者也可以使用 sudo 命令,為什麼這裡沒有顯示在 sudo 使用者組裡呢?可以檢視下 /etc/sudoers.d/shiyanlou 檔案,我們在 /etc/sudoers.d 目錄下建立了這個檔案,從而給 shiyanlou 使用者賦予了 sudo 許可權:

此處輸入圖片的描述

方法二:檢視 /etc/group 檔案

$ cat /etc/group | sort

這裡 cat 命令用於讀取指定檔案的內容並列印到終端輸出。 | sort 表示將讀取的文字進行一個字典排序再輸出,然後你將看到如下一堆輸出,你可以在最下面看到 shiyanlou 的使用者組資訊:

3-2.3-3

沒找到,沒關係,你可以使用命令過濾掉一些你不想看到的結果:

$ cat /etc/group | grep -E "shiyanlou"

此處輸入圖片的描述

etc/group 檔案格式說明

/etc/group 的內容包括使用者組(Group)、使用者組口令、GID 及該使用者組所包含的使用者(User),每個使用者組一條記錄。格式如下:

group_name:password:GID:user_list

你看到上面的 password 欄位為一個 x並不是說密碼就是它,只是表示密碼不可見而已。

將其它使用者加入 sudo 使用者組

預設情況下新建立的使用者是不具有 root 許可權的,也不在 sudo 使用者組,可以讓其加入 sudo 使用者組從而獲取 root 許可權

$ su -l lilei
$ sudo ls

會提示 lilei 不在 sudoers 檔案中,意思就是 lilei 不在 sudo 使用者組中,至於 sudoers 檔案(/etc/sudoers)你現在最好不要動它,操作不慎會導致比較麻煩的後果。

使用 usermod 命令可以為使用者新增使用者組,同樣使用該命令你必需有 root 許可權,你可以直接使用 root 使用者為其它使用者新增使用者組,或者用其它已經在 sudo 使用者組的使用者使用 sudo 命令獲取許可權來執行該命令。

這裡我用 shiyanlou 使用者執行 sudo 命令將 lilei 新增到 sudo 使用者組,讓它也可以使用 sudo 命令獲得 root 許可權:

$ su shiyanlou # 此處需要輸入shiyanlou使用者密碼,點選右側工具欄“SSH直連”,可以看到密碼。
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei

然後你再切換回 lilei 使用者,現在就可以使用 sudo 獲取 root 許可權了。

4. 刪除使用者

刪除使用者是很簡單的事:

$ sudo deluser lilei --remove-home

3-2.4-1

$ sudo userdel lilei

 二、許可權管理

檔案許可權就是檔案的訪問控制權限,即哪些使用者和組群可以訪問檔案以及可以執行什麼樣的操作。

Unix/Linux系統是一個典型的多使用者系統,不同的使用者處於不同的地位,對檔案和目錄有不同的訪問許可權。為了保護系統的安全性,Unix/Linux系統除了對使用者許可權作了嚴格的界定外,還在使用者身份認證、訪問控制、傳輸安全、檔案讀寫許可權等方面作了周密的控制。

在 Unix/Linux中的每一個檔案或目錄都包含有訪問許可權,這些訪問許可權決定了誰能訪問和如何訪問這些檔案和目錄。

1. 檢視檔案許可權

我們之前已經很多次用到 ls 命令了,如你所見,我們用它來列出並顯示當前目錄下的檔案,當然這是在不帶任何引數的情況下,它能做的當然不止這麼多,現在我們就要用它來檢視檔案許可權。

使用較長格式列出檔案:

$ ls -l

你可能除了知道最後面那一項是檔名之外,其它項就不太清楚了,那麼到底是什麼意思呢:

可能你還是不太明白,比如第一項檔案型別和許可權那一堆東西具體指什麼,連結又是什麼,何為最後修改時間,下面一一道來:

  • 檔案型別

關於檔案型別,這裡有一點必需時刻牢記: Linux 裡面一切皆檔案。

  • 檔案許可權

讀許可權,表示你可以使用 cat <file name> 之類的命令來讀取某個檔案的內容;寫許可權,表示你可以編輯和修改某個檔案; 執行許可權,通常指可以執行的二進位制程式檔案或者指令碼檔案,如同 Windows 上的 exe 字尾的檔案,不過 Linux 上不是通過檔案字尾名來區分檔案的型別。需要注意的一點是,一個目錄同時具有讀許可權和執行許可權才可以開啟並檢視內部檔案,而一個目錄要有寫許可權才允許在其中建立其它檔案,這是因為目錄檔案實際儲存著該目錄裡面的檔案的列表等資訊。

所屬使用者組許可權,是指你所在的使用者組中的所有其它使用者對於該檔案的許可權,比如,你有一個 iPad,那麼這個使用者組許可權就決定了你的兄弟姐妹有沒有許可權使用它破壞它和佔有它。

  • 連結數

連結到該檔案所在的 inode 結點的檔名數目。

  • 檔案大小

以 inode 結點大小為單位來表示的檔案大小,可以給 ls 加上 -lh 引數來更直觀的檢視檔案的大小。

2. 變更檔案所有者

假設目前是 lilei 使用者登入,新建一個檔案,命名為 “ iphone6 ”:

$ cd /home/lilei
$ touch iphone6

可見檔案所有者是 lilei :

3-3.2-1

現在,換回到 shiyanlou 使用者身份,使用以下命令變更檔案所有者為 shiyanlou :

$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6

現在檢視,發現 檔案所有者成功修改為 shiyanlou :

3-3.2-2

3. 修改檔案許可權

如果你有一個自己的檔案不想被其他使用者讀、寫、執行,那麼就需要對檔案的許可權做修改,這裡有兩種方式:

  • 方式一:二進位制數字表示

每個檔案的三組許可權(擁有者,所屬使用者組,其他使用者,記住這個順序是一定的)對應一個 " rwx ",也就是一個 “ 7 ” ,所以如果我要將檔案“ iphone6 ”的許可權改為只有我自己可以用那麼就這樣:

先在檔案里加點內容:

$ echo "echo \"hello shiyanlou\"" > iphone6

然後修改許可權:

$ chmod 600 iphone6

現在,其他使用者已經不能讀這個“ iphone6 ”檔案了:

3-3.3-1

  • 方式二:加減賦值操作

完成上述相同的效果,你可以:

$ chmod go-rw iphone6

go 還有 u 分別表示 group、others 和 user,+ 和 - 分別表示增加和去掉相應的許可權。

三、adduser 和 useradd 的區別是什麼?

答:useradd 只建立使用者,建立完了用 passwd lilei 去設定新使用者的密碼。adduser 會建立使用者,建立目錄,建立密碼(提示你設定),做這一系列的操作。其實 useradd、userdel 這類操作更像是一種命令,執行完了就返回。而 adduser 更像是一種程式,需要你輸入、確定等一系列操作。