關(guān)于群組: 有效與初始群組、groups, newgrp
# /etc/group
這個檔案就是在記錄 GID 與群組名稱的對應了~我的 /etc/group 內(nèi)容有點像這樣:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
也是以冒號‘:’作為欄位的分隔符號,共分為四欄,每一欄位的意義是:
1. 群組名稱:就是群組名稱啦!
2. 群組密碼:通常不需要設(shè)定,因為我們很少使用到群組登入! 不過,同樣的,密碼也是被紀錄在 /etc/gshadow 當中啰!
3. GID:就是群組的 ID 啊~
4. 支援的帳號名稱:加入這個群組里面的所有的帳號, 我們知道,一個使用者是可以加入多個群組的。舉例來說,如果我想要讓 dmtsai 也加入 root 這個群組,那么在第一行的最后面加上‘,dmtsai’,注意不要有空格, 使成為‘ root:x:0:root,dmtsai’就可以啰~
比較重要的特色在于第四欄啦,因為每個使用者都可以擁有多個支援的群組, 這就好比在學校念書的時候,我們可以加入多個社團一樣! ^_^。 不過這里您或許會覺得奇怪的,那就是:‘假如我同時加入多個群組, 那么我在作業(yè)的時候,到底是以那個群組為準?’底下我們就來談一談這個‘有效群組’的概念。
# 有效群組(effective group)與初始群組(initial group)
還記得每個使用者在他的 /etc/passwd 里面的第四欄有所謂的 GID 吧?那個 GID 就是所謂的‘初始群組 ( initial group ) ’了!也就是說,當使用者一登入系統(tǒng),立刻就擁有這個群組的相關(guān)權(quán)限的意思。 舉例來說,我們上面提到 dmtsai 這個使用者的 /etc/passwd 與 /etc/group 還有 /etc/gshadow 相關(guān)的內(nèi)容如下:
[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 這兩個群組, 因此,在讀取/寫入/執(zhí)行檔案時,針對群組部分,只要是 users 與 dmtsai 這兩個群組擁有的功能, 我 dmtsai 這個使用者都能夠擁有喔!這樣瞭呼?不過,這是針對已經(jīng)存在的檔案而言, 如果今天我要建立一個新的檔案或者是新的目錄,請問一下,新檔案的群組是 dmtsai 還是 users ? 呵呵!這就得要檢查一下當時的有效群組了 (effective group)。
如果我以 dmtsai 這個使用者的身份登入后,該如何知道我所有支援的群組呢? 很簡單啊,直接輸入 groups 就可以了!注意喔,是 groups 有加 s 呢!結(jié)果像這樣:
[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 ’好了,會發(fā)生什么狀態(tài)呢? 呵呵!那個檔案的群組竟然變成 users 了!這樣更清楚有效群組的意義了吧?!
我們額外的來討論一下 newgrp 這個指令,這個指令可以變更目前使用者的有效群組, 而且是另外以一個 shell 來提供登入的喔,所以,以上面的例子來說, dmtsai 這個使用者目前是以另一個 shell 登入的,而且新的 shell 給予 dmtsai 有效 GID 為 users 就是了。當直接執(zhí)行‘ newgrp groupname ’時,使用者的有效群組會成為 groupname , 此時雖然使用者的環(huán)境設(shè)定(例如環(huán)境變數(shù)等等其他資料)不會有影響,但是使用者的‘權(quán)限’將會重新被計算。 舉例來說, dmtsai 此時建立的新檔案群組是 users 了~
鳥哥的這個例子當中,要注意的是, dmtsai 這個使用者本來就屬于 users 與 dmtsai 這兩個群組, 所以他可以直接使用 newgrp 來切換有效群組,而要離開新的有效群組時,輸入‘ exit ’即可。 假設(shè)我的 Linux 系統(tǒng)當中還有另一個群組,名稱為 vbird,那么 dmtsai 是否可以登入 vbird 這個群組? 在某些前提下是可以的:
* vbird 這個群組在 /etc/gshadow 的密碼欄為合法的(不具有 ! 開頭!);
* dmtsai 必須讓 root 或群組管理員 (group administrator) 加入到 vbird 群組中。
這兩個大前提缺一不可喔!好了,假設(shè)我已經(jīng)使用 gpasswd 建立了 vbird 這個群組的密碼, 而 dmtsai 也被加入群組成員當中了,那么當 dmtsai 輸入 ‘newgrp vbird’時, 嘿嘿! dmtsai 這個使用者的有效群組就能夠變成 vbird 啰~
# /etc/gshadow
剛剛講了很多關(guān)于‘有效群組’的概念,另外,也提到 newgrp 這個指令的用法, 但是,如果 /etc/gshadow 這個設(shè)定沒有搞懂得話,那么 newgrp 是無法動作的呢! 我的 /etc/gshadow 的內(nèi)容有點像這樣:
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
同樣還是使用冒號‘:’來作為欄位的分隔字元,而且你會發(fā)現(xiàn),這個檔案幾乎與 /etc/group 一模一樣??!是這樣沒錯~不過,要注意的大概就是第二個欄位吧~第二個欄位是密碼欄, 如果密碼欄上面是‘!’時,表示該群組不能使用密碼來登入呢! 至于第四個欄位也就是支援的帳號名稱啰~
1. 群組名稱
2. 密碼欄,同樣的,開頭為 ! 表示無法登入;
3. 群組管理員的帳號 (相關(guān)資訊在后續(xù)介紹)
4. 該群組的所屬帳號 (與 /etc/group 內(nèi)容相同!)
不過,就以系統(tǒng)的操作來說,事實上,這個 /etc/gshadow 的密碼提供,最大的功能是在于‘ 讓那些不在群組中的成員,臨時加入該群組用的。 ’ 實際上使用的情況是很少的~而如果真的要操作這樣的環(huán)境,那就得要熟悉 newgrp 的用法啰! 而且還要提供某個群組的密碼出來,真是不好管理。所以,若真的想要讓某個使用者利用該群組的功能時, 還是直接將對方加入群組的支援就好了!省得麻煩~
Linux群組管理員
為什么需要群組管理員
我們假設(shè)一個場景,一個公司里有好多部門,不同員工需要加入到不同的群組。如果其中一個部門增加員工,就需要通知管理員,將其加入到對應的群組。如果每個部門都要增加員工,那管理員可能每天都會疲于奔命處理各個請求。
這時我們可以針對每個群組設(shè)置組長,并允許組長添加刪除組成員,這樣不僅可以提高效率,還減少了管理員的工作。
如何指派群組管理
語法:
gpasswd -A USERNAME GROUPNAME
效果:
在添加群組管理時,可以指定多個用戶,多個用戶之間需要使用英文逗號隔開。
如何刪除群組管理
語法:
gpasswd -A "" GROUPNAME
效果:
gpasswd沒有特定的參數(shù)用于刪除群組管理,我們指定空字符串即可。如果組內(nèi)有多個管理員,指定保留用戶即可。
群組管理添加成員
語法:
gpasswd -a USERNAME GROUPNAME
效果:
群組管理刪除成員
語法:
gpasswd -d USERNAME GROUPNAME
效果: