站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Unit15-Advanced Topics in Users Groups and Permissions

User and Group ID Numbers

我們可透過 ls 指令配合參數 -l 來查看詳細的檔案及權限內容 (顯示的 owner 及 group 為名稱),若配合參數 -n 則可將 owner 及 group 轉換為 UID 及 GID 顯示。

 #ls -l
 total 592
 -rw-r--r-- 1 root     root 510762 Aug  5 08:32 04_1.html
 -rw-r--r-- 1 root     root      0 Aug  4 09:49 -13_1
 -rw------- 1 root     root   1391 Jul 30 16:29 anaconda-ks.cfg
 drwxr-xr-x 2 root     root   4096 Jul 30 16:32 Desktop
 -rw-r--r-- 1 root     root  38677 Jul 30 16:29 install.log
 -rw-r--r-- 1 root     root   4388 Jul 30 15:46 install.log.syslog
 drwxr-xr-x 2 weithenn root   4096 Aug  5 08:44 test
 #ls -ln
 total 592
 -rw-r--r-- 1   0 0 510762 Aug  5 08:32 04_1.html
 -rw-r--r-- 1   0 0      0 Aug  4 09:49 -13_1
 -rw------- 1   0 0   1391 Jul 30 16:29 anaconda-ks.cfg
 drwxr-xr-x 2   0 0   4096 Jul 30 16:32 Desktop
 -rw-r--r-- 1   0 0  38677 Jul 30 16:29 install.log
 -rw-r--r-- 1   0 0   4388 Jul 30 15:46 install.log.syslog
 drwxr-xr-x 2 500 0   4096 Aug  5 08:44 test

User Management Tools

新增使用者帳號完成後接著會使用指令 passwd 來設定使用者密碼時我們可透過參數 --stdin 來達成只需輸入一次密碼 (通常為二次) 即可完成密碼更新設定,這樣有助於使用 Shell Script 來一次大量設定使用者帳號時使用,如下為設定密碼 wei1234 至使用者帳戶 weithenn 內。

 #echo wei1234 | passwd --stdin weithenn
 Changing password for user weithenn.
 passwd: all authentication tokens updated successfully.

設定完成的使用者密碼存放於 /etc/shadow 中並將密碼欄位利用 MD5 演算法進行加密 (不可逆),您可嘗試使用上述指令再設定同樣的密碼您會發現即使密碼相同,但經過 MD5 加密演算後的密碼欄位值皆不相同。

 #grep weithenn /etc/shadow
 weithenn:$1$fNoxaXXK$TtZPrVIYJGwPZ2tNnrXqB0:14467:0:99999:7:::          //第一次密碼設定為 wei1234
 weithenn:$1$Kxk7efF4$EHK6KZqerxOA.4m7B44Wr0:14467:0:99999:7:::          //第二次密碼設定為 wei1234

我們可以看到第一次設定密碼為 wei1234 時其密碼經過 MD5 演算之後為 $1$fNoxaXXK$TtZPrVIYJGwPZ2tNnrXqB0,第二次再次設定密碼為 wei1234 時其密碼經過 MD5 演算之後為 $1$Kxk7efF4$EHK6KZqerxOA.4m7B44Wr0,為何密碼設定相同但演算出來之後不同? 原因在於 每次演算的 Salt 不同 所致,我們可將密碼欄位值分成二個部份來看如下表格所示,所以從下列表格可以了解到即使每次使用者密碼都相同,但透過 不同的 Salt 來對密碼加以調味 (演算) 結果 (菜) 當然是不同的。

$1$fNoxaXXK$TtZPrVIYJGwPZ2tNnrXqB0
$1$fNoxaXXK $TtZPrVIYJGwPZ2tNnrXqB0
固定值 Salt固定值 透過 Salt 對密碼 wei1234 進行演算得到的值

Monitoring Logins

我們可利用如下指令來觀察目前或之前誰登入系統。

Default Permissions

系統在預設的情況下其檔案 (Files) 權限為 666 而目錄 (Directory) 的權限為 777,那系統如何來設計一般使用者 (Non-Privileged Users) 及超級使用者 (Root) 所建立的檔案及目錄權限? 答案為使用 umask 來達成此項目的。

透過下列表格我們可以清楚了解系統利用 umask 遮罩值來 遮住 預設權限值後,所得到的值即為一般使用者 (Non-Privileged Users) 所得到的檔案 (664) 及目錄 (775) 的權限。

_File Directory
Default Permission rw- rw- rw- (666)rwx rwx rwx (777)
umask --- --- -w- (002)--- --- -w- (002)
Received Permission rw- rw- r-- (664)rwx rwx r-x (775)

Special Permissions for Executables and Directories

suid 功能為何? 簡單來說設定 suid 可使一般使用者在該程式執行時可 暫時提升權限 至與該檔案擁有者 (Owner) 相同的權限。舉例來說我們已經知道使用者密碼資訊存放於 /etc/shadow 中,您可嘗試使用一般使用者身份去查看此檔案內容您將發現無法查看此檔案內容如下訊息所示。

 $cat /etc/shadow
 cat: /etc/shadow: Permission denied

但當我們使用一般使用者身份登入系統時您可執行指令 passwd 來變更您的密碼且可儲存於 /etc/shadow 中,為何沒有權限查看 /etc/shadow 內容但欲可執行 passwd 指令來更新密碼於 /etc/shadow 中? 原因就在於 passwd 執行檔有設定 suid 因此當一般使用者執行 passwd 指令時會 暫時提升權限 至該檔案擁有者 (Owner) 也就是 Root 相同的權限,因此可寫入您新設定的密碼至 /etc/shadow 檔案中。

 #ll /etc/shadow
 -r-------- 1 root root 1129 Aug 13 08:16 /etc/shadow
 #ll /usr/bin/passwd
 -rwsr-xr-x 1 root root 22960 Jul 17  2006 /usr/bin/passwd

至於如何表示 suid、sgid、sticky 呢? 在之前的章節第 5 章時有提到關於每個檔案及目錄均透過 10 個字符 (Ten-Character) 4 組數字來表示其權限,其中第一個字符即為表示 suid、sgid、sticky。

  1. 第 1 個字符: 特殊權限 (Suid、Sgid、Sticky)
  2. 第 2 ~ 4 個字符: 使用者權限 (User Permission)
  3. 第 5 ~ 7 個字符: 群組權限 (Group Permission)
  4. 第 8 ~ 10 個字符: 其它人權限 (Other Permission)

以下表格為說明 suid、sgid、sticky 如何表示

_suid sgid sticky
Directory (755)rwxr-xr--
Directory (3755)rwsr-sr-t
Executable Files (744)rwx r--r--
Executable Files (6744)rwsr-Sr-T

補充

當您操作系統中途必須短暫離開座位時我們可透過安裝 vlock 套件來達成鎖定桌面的目的,詳細內容請參考 [vlock - virtual console lock program]

Lab

Lab1. 使用者 weithenn 為 MIS 部門而 chris 為 Sales 部門,如今老板將此二位使用者加入 project 部門中,請設定此二位使用者於 project 資料夾下新增的檔案或目錄及 GID 權限為該群組名稱。

Ans:

整個建立相關環境及設定步驟流程如下:

  1. 使用 Root 建立如下環境
    1. 建立 project 資料夾 (mkdir)
    2. 建立使用者帳號 weithenn、chris (useradd)
    3. 設定使用者密碼 weithenn、chris (passwd)
    4. 建立郡組 mis、sales、project (groupadd)
    5. 將使用者預設郡組指定為 mis 及 sales (usermod)
  2. 使用者 weithenn、chris 登入使用指令 id 確定相關資訊
    1. 切換路徑至 /project 下建立檔案後查看檔案權限
  3. 使用 Root 設定 /project 權限為 3770
  4. 使用者 weithenn、chris 切換路徑至 /project 下建立檔案後查看檔案權限
 #mkdir /project                   //建立 project 資料夾
 #useradd weithenn                 //建立使用者帳號 weithenn
 #useradd chris                    //建立使用者帳號 chris
 #passwd weithenn                  //設定使用者 weithenn 密碼
 #passwd chris                     //設定使用者 chris 密碼
 #groupadd mis                     //建立 mis 群組
 #groupadd sales                   //建立 sales 群組
 #groupadd project                 //建立 project 群組
 #vi /etc/group                    //修改群組設定檔
 project:x:504:weithenn,chris      //將 weithenn 及 chris 加入 project 群組
 #usermod -g mis weithenn          //將使用者 weithenn 預設群組設定為 mis
 #usermod -g sales chris           //將使用者 chris 預設群組設定為 sales
 $id                               //查詢帳號資訊
 uid=500(weithenn) gid=502(mis) groups=502(mis),504(project) context=user_u:system_r:unconfined_t
 $touch f1.weithenn                //建立檔案
 $ll                               //查詢檔案權限
 -rw-r--r-- 1 weithenn mis     0 Aug 13 08:53 f2.weithenn
 $id                               //查詢帳號資訊
 uid=501(chris) gid=503(sales) groups=503(sales),504(project) context=user_u:system_r:unconfined_t
 $touch f1.chris                   //建立檔案
 $ll                               //查詢檔案權限
 -rw-r--r-- 1 chris    sales   0 Aug 13 08:54 f1.chris
 #chmod 3770 /project -v
 mode of `/project' changed to 3770 (rwxrws--T)
 $touch f2.weithenn                //使用者 weithenn 建立此檔案
 $touch f2.chris                   //使用者 chris 建立此檔案
 $ll                               //查詢檔案權限
 -rw-r--r-- 1 chris    sales   0 Aug 13 08:54 f1.chris
 -rw-r--r-- 1 weithenn project 0 Aug 13 08:52 f1.weithenn
 -rw-r--r-- 1 chris    project 0 Aug 13 08:55 f2.chris
 -rw-r--r-- 1 weithenn mis     0 Aug 13 08:53 f2.weithenn
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com