歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 詳解Linux用戶系統中的群組與群組管理員

詳解Linux用戶系統中的群組與群組管理員

日期:2017/3/1 17:33:15   编辑:Linux技術

關於群組: 有效與初始群組、groups, newgrp

復制代碼代碼如下:
# /etc/group

  這個檔案就是在記錄 GID 與群組名稱的對應了~我的 /etc/group 內容有點像這樣:

復制代碼代碼如下:
  root:x:0:root
  bin:x:1:root,bin,daemon
  daemon:x:2:root,bin,daemon
  sys:x:3:root,bin,adm

  也是以冒號‘:’作為欄位的分隔符號,共分為四欄,每一欄位的意義是:

  1. 群組名稱:就是群組名稱啦!

  2. 群組密碼:通常不需要設定,因為我們很少使用到群組登入! 不過,同樣的,密碼也是被紀錄在 /etc/gshadow 當中啰!

  3. GID:就是群組的 ID 啊~

  4. 支援的帳號名稱:加入這個群組裡面的所有的帳號, 我們知道,一個使用者是可以加入多個群組的。舉例來說,如果我想要讓 dmtsai 也加入 root 這個群組,那麼在第一行的最後面加上‘,dmtsai’,注意不要有空格, 使成為‘ root:x:0:root,dmtsai’就可以啰~

  比較重要的特色在於第四欄啦,因為每個使用者都可以擁有多個支援的群組, 這就好比在學校念書的時候,我們可以加入多個社團一樣! ^_^。 不過這裡您或許會覺得奇怪的,那就是:‘假如我同時加入多個群組, 那麼我在作業的時候,到底是以那個群組為准?’底下我們就來談一談這個‘有效群組’的概念。

  # 有效群組(effective group)與初始群組(initial group)

  還記得每個使用者在他的 /etc/passwd 裡面的第四欄有所謂的 GID 吧?那個 GID 就是所謂的‘初始群組 ( initial group ) ’了!也就是說,當使用者一登入系統,立刻就擁有這個群組的相關權限的意思。 舉例來說,我們上面提到 dmtsai 這個使用者的 /etc/passwd 與 /etc/group 還有 /etc/gshadow 相關的內容如下:

復制代碼代碼如下:
  [root@linux ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow
  /etc/passwd:dmtsai:x:501:501::/home/dmtsai:/bin/bash
  /etc/group:users:x:100:dmtsai
  /etc/group:dmtsai:x:501:
  /etc/gshadow:users:::dmtsai
  /etc/gshadow:dmtsai:!::

  仔細看到上面這個表格,在 /etc/passwd 裡面,dmtsai 這個使用者所屬的群組為 GID=501 , 也就是 /etc/group 裡頭 dmtsai 那個群組啦~因為這是 initial group ,所以, 使用者一登入就會主動取得,不需要在 /etc/group 的第四個欄位寫入該帳號的!

  但是非 initial group 的其他群組可就不同了。舉上面這個例子來說,我將 dmtsai 加入 users 這個群組當中,由於 users 這個群組並非是 dmtsai 的初始群組,因此, 我必須要在 /etc/group 這個檔案中,找到 users 那一行,並且將 dmtsai 這個帳號加入第四欄, 這樣 dmtsai 才能夠支援 users 這個群組啊。

  那麼在這個例子當中,因為我的 dmtsai 這個帳號同時支援 dmtsai 與 users 這兩個群組, 因此,在讀取/寫入/執行檔案時,針對群組部分,只要是 users 與 dmtsai 這兩個群組擁有的功能, 我 dmtsai 這個使用者都能夠擁有喔!這樣瞭呼?不過,這是針對已經存在的檔案而言, 如果今天我要建立一個新的檔案或者是新的目錄,請問一下,新檔案的群組是 dmtsai 還是 users ? 呵呵!這就得要檢查一下當時的有效群組了 (effective group)。

  如果我以 dmtsai 這個使用者的身份登入後,該如何知道我所有支援的群組呢? 很簡單啊,直接輸入 groups 就可以了!注意喔,是 groups 有加 s 呢!結果像這樣:

復制代碼代碼如下:
  [dmtsai@linux ~]$ groups
  dmtsai users

  在這個輸出的訊息中,我知道我同時屬於 dmtsai 及 users 這個兩個群組,而且, 第一個輸出的群組即為有效群組 (effective group) 了。 也就是說,我的有效群組為 dmtsai 啦~此時,如果我以 touch 去建立一個新檔,例如: touch test ,那麼這個檔案的擁有者為 dmtsai ,而且群組也是 dmtsai 的啦。 這樣是否可以瞭解什麼是有效群組了?

  那麼如何變更有效群組呢?這個有兩個方法,不論是那個方法,都是以 newgrp 達成的! 以上面這個例子來說,因為我的 dmtsai 使用者同時擁有 dmtsai 與 users 兩個群組,因此, dmtsai 當然可以隨時切換 dmtsai/users 成為有效群組啰。所以,我可以下達:

復制代碼代碼如下:
  [dmtsai@linux ~]$ newgrp users
  [dmtsai@linux ~]$ groups
  users dmtsai

  此時,我的有效群組就成為 users 了。當然,要能夠順利切換有效群組的話,還需要 /etc/gshadow 的輔助才行~這個等一下我們會說明的。好了,那麼如果你開始在 /home/dmtsai 這個家目錄底下嘗試建立一個檔案,例如‘ touch test2 ’好了,會發生什麼狀態呢? 呵呵!那個檔案的群組竟然變成 users 了!這樣更清楚有效群組的意義了吧?!

  我們額外的來討論一下 newgrp 這個指令,這個指令可以變更目前使用者的有效群組, 而且是另外以一個 shell 來提供登入的喔,所以,以上面的例子來說, dmtsai 這個使用者目前是以另一個 shell 登入的,而且新的 shell 給予 dmtsai 有效 GID 為 users 就是了。當直接執行‘ newgrp groupname ’時,使用者的有效群組會成為 groupname , 此時雖然使用者的環境設定(例如環境變數等等其他資料)不會有影響,但是使用者的‘權限’將會重新被計算。 舉例來說, dmtsai 此時建立的新檔案群組是 users 了~

  鳥哥的這個例子當中,要注意的是, dmtsai 這個使用者本來就屬於 users 與 dmtsai 這兩個群組, 所以他可以直接使用 newgrp 來切換有效群組,而要離開新的有效群組時,輸入‘ exit ’即可。 假設我的 Linux 系統當中還有另一個群組,名稱為 vbird,那麼 dmtsai 是否可以登入 vbird 這個群組? 在某些前提下是可以的:

  * vbird 這個群組在 /etc/gshadow 的密碼欄為合法的(不具有 ! 開頭!);
  * dmtsai 必須讓 root 或群組管理員 (group administrator) 加入到 vbird 群組中。

  這兩個大前提缺一不可喔!好了,假設我已經使用 gpasswd 建立了 vbird 這個群組的密碼, 而 dmtsai 也被加入群組成員當中了,那麼當 dmtsai 輸入 ‘newgrp vbird’時, 嘿嘿! dmtsai 這個使用者的有效群組就能夠變成 vbird 啰~
  # /etc/gshadow
  剛剛講了很多關於‘有效群組’的概念,另外,也提到 newgrp 這個指令的用法, 但是,如果 /etc/gshadow 這個設定沒有搞懂得話,那麼 newgrp 是無法動作的呢! 我的 /etc/gshadow 的內容有點像這樣:

復制代碼代碼如下:
  root:::root
  bin:::root,bin,daemon
  daemon:::root,bin,daemon
  sys:::root,bin,adm

  同樣還是使用冒號‘:’來作為欄位的分隔字元,而且你會發現,這個檔案幾乎與 /etc/group 一模一樣啊!是這樣沒錯~不過,要注意的大概就是第二個欄位吧~第二個欄位是密碼欄, 如果密碼欄上面是‘!’時,表示該群組不能使用密碼來登入呢! 至於第四個欄位也就是支援的帳號名稱啰~

  1. 群組名稱
  2. 密碼欄,同樣的,開頭為 ! 表示無法登入;
  3. 群組管理員的帳號 (相關資訊在後續介紹)
  4. 該群組的所屬帳號 (與 /etc/group 內容相同!)

  不過,就以系統的操作來說,事實上,這個 /etc/gshadow 的密碼提供,最大的功能是在於‘ 讓那些不在群組中的成員,臨時加入該群組用的。 ’ 實際上使用的情況是很少的~而如果真的要操作這樣的環境,那就得要熟悉 newgrp 的用法啰! 而且還要提供某個群組的密碼出來,真是不好管理。所以,若真的想要讓某個使用者利用該群組的功能時, 還是直接將對方加入群組的支援就好了!省得麻煩~


Linux群組管理員
為什麼需要群組管理員
我們假設一個場景,一個公司裡有好多部門,不同員工需要加入到不同的群組。如果其中一個部門增加員工,就需要通知管理員,將其加入到對應的群組。如果每個部門都要增加員工,那管理員可能每天都會疲於奔命處理各個請求。
這時我們可以針對每個群組設置組長,並允許組長添加刪除組成員,這樣不僅可以提高效率,還減少了管理員的工作。
如何指派群組管理
語法:
復制代碼代碼如下:gpasswd -A USERNAME GROUPNAME
效果:
20151210113518270.png (727×600)

在添加群組管理時,可以指定多個用戶,多個用戶之間需要使用英文逗號隔開。
如何刪除群組管理
語法:
復制代碼代碼如下:gpasswd -A "" GROUPNAME
效果:
20151210113617279.png (727×600)

gpasswd沒有特定的參數用於刪除群組管理,我們指定空字符串即可。如果組內有多個管理員,指定保留用戶即可。
群組管理添加成員
語法:
復制代碼代碼如下:gpasswd -a USERNAME GROUPNAME
效果:
20151210113708921.png (727×600)

群組管理刪除成員
語法:
復制代碼代碼如下:gpasswd -d USERNAME GROUPNAME
效果:
20151210113734079.png (727×600)

Copyright © Linux教程網 All Rights Reserved