在 Linux 中把使用者新增到組的四個方法

Magesh Maruthamuthu發表於2019-04-23

Linux 組是用於管理 Linux 中使用者帳戶的組織單位。對於 Linux 系統中的每一個使用者和組,它都有惟一的數字標識號。它被稱為 使用者 ID(UID)和組 ID(GID)。組的主要目的是為組的成員定義一組特權。它們都可以執行特定的操作,但不能執行其他操作。

Linux 中有兩種型別的預設組。每個使用者應該只有一個 主要組primary group 和任意數量的 次要組secondary group

  • 主要組: 建立使用者帳戶時,已將主要組新增到使用者。它通常是使用者的名稱。在執行諸如建立新檔案(或目錄)、修改檔案或執行命令等任何操作時,主要組將應用於使用者。使用者的主要組資訊儲存在 /etc/passwd 檔案中。
  • 次要組: 它被稱為次要組。它允許使用者組在同一組成員檔案中執行特定操作。例如,如果你希望允許少數使用者執行 Apache(httpd)服務命令,那麼它將非常適合。

你可能對以下與使用者管理相關的文章感興趣。

  • 在 Linux 中建立使用者帳戶的三種方法?
  • 如何在 Linux 中建立批次使用者?
  • 如何在 Linux 中使用不同的方法更新/更改使用者密碼?

可以使用以下四種方法實現。

  • usermod:修改系統帳戶檔案,以反映在命令列中指定的更改。
  • gpasswd:用於管理 /etc/group/etc/gshadow。每個組都可以有管理員、成員和密碼。
  • Shell 指令碼:可以讓管理員自動執行所需的任務。
  • 手動方式:我們可以透過編輯 /etc/group 檔案手動將使用者新增到任何組中。

我假設你已經擁有此操作所需的組和使用者。在本例中,我們將使用以下使用者和組:user1user2user3,另外的組是 mygroupmygroup1

在進行更改之前,我希望檢查一下使用者和組資訊。詳見下文。

我可以看到下面的使用者與他們自己的組關聯,而不是與其他組關聯。

# id user1
uid=1008(user1) gid=1008(user1) groups=1008(user1)

# id user2
uid=1009(user2) gid=1009(user2) groups=1009(user2)

# id user3
uid=1010(user3) gid=1010(user3) groups=1010(user3)

我可以看到這個組中沒有關聯的使用者。

# getent group mygroup
mygroup:x:1012:

# getent group mygroup1
mygroup1:x:1013:

方法 1:使用 usermod 命令

usermod 命令修改系統帳戶檔案,以反映命令列上指定的更改。

如何使用 usermod 命令將現有的使用者新增到次要組或附加組?

要將現有使用者新增到輔助組,請使用帶有 -G 選項和組名稱的 usermod 命令。

語法:

# usermod [-G] [GroupName] [UserName]

如果系統中不存在給定的使用者或組,你將收到一條錯誤訊息。如果沒有得到任何錯誤,那麼使用者已經被新增到相應的組中。

# usermod -a -G mygroup user1

讓我使用 id 命令檢視輸出。是的,新增成功。

# id user1
uid=1008(user1) gid=1008(user1) groups=1008(user1),1012(mygroup)

如何使用 usermod 命令將現有的使用者新增到多個次要組或附加組?

要將現有使用者新增到多個次要組中,請使用帶有 -G 選項的 usermod 命令和帶有逗號分隔的組名稱。

語法:

# usermod [-G] [GroupName1,GroupName2] [UserName]

在本例中,我們將把 user2 新增到 mygroupmygroup1 中。

# usermod -a -G mygroup,mygroup1 user2

讓我使用 id 命令檢視輸出。是的,user2 已成功新增到 myGroupmyGroup1 中。

# id user2
uid=1009(user2) gid=1009(user2) groups=1009(user2),1012(mygroup),1013(mygroup1)

如何改變使用者的主要組?

要更改使用者的主要組,請使用帶有 -g 選項和組名稱的 usermod 命令。

語法:

# usermod [-g] [GroupName] [UserName]

我們必須使用 -g 改變使用者的主要組。

# usermod -g mygroup user3

讓我們看看輸出。是的,已成功更改。現在,顯示user3 主要組是 mygroup 而不是 user3

# id user3
uid=1010(user3) gid=1012(mygroup) groups=1012(mygroup)

方法 2:使用 gpasswd 命令

gpasswd 命令用於管理 /etc/group/etc/gshadow。每個組都可以有管理員、成員和密碼。

如何使用 gpasswd 命令將現有使用者新增到次要組或者附加組?

要將現有使用者新增到次要組,請使用帶有 -M 選項和組名稱的 gpasswd 命令。

語法:

# gpasswd [-M] [UserName] [GroupName]

在本例中,我們將把 user1 新增到 mygroup 中。

# gpasswd -M user1 mygroup

讓我使用 id 命令檢視輸出。是的,user1 已成功新增到 mygroup 中。

# id  user1
uid=1008(user1) gid=1008(user1) groups=1008(user1),1012(mygroup)

如何使用 gpasswd 命令新增多個使用者到次要組或附加組中?

要將多個使用者新增到輔助組中,請使用帶有 -M 選項和組名稱的 gpasswd 命令。

語法:

# gpasswd [-M] [UserName1,UserName2] [GroupName]

在本例中,我們將把 user2user3 新增到 mygroup1 中。

# gpasswd -M user2,user3 mygroup1

讓我使用 getent 命令檢視輸出。是的,user2user3 已成功新增到 myGroup1 中。

# getent group mygroup1
mygroup1:x:1013:user2,user3

如何使用 gpasswd 命令從組中刪除一個使用者?

要從組中刪除使用者,請使用帶有 -d 選項的 gpasswd 命令以及使用者和組的名稱。

語法:

# gpasswd [-d] [UserName] [GroupName]

在本例中,我們將從 mygroup 中刪除 user1

# gpasswd -d user1 mygroup
Removing user user1 from group mygroup

方法 3:使用 Shell 指令碼

基於上面的例子,我知道 usermod 命令沒有能力將多個使用者新增到組中,可以透過 gpasswd 命令完成。但是,它將覆蓋當前與組關聯的現有使用者。

例如,user1 已經與 mygroup 關聯。如果要使用 gpasswd 命令將 user2user3 新增到 mygroup 中,它將不會按預期生效,而是對組進行修改。

如果要將多個使用者新增到多個組中,解決方案是什麼?

兩個命令中都沒有預設選項來實現這一點。

因此,我們需要編寫一個小的 shell 指令碼來實現這一點。

如何使用 gpasswd 命令將多個使用者新增到次要組或附加組?

如果要使用 gpasswd 命令將多個使用者新增到次要組或附加組,請建立以下 shell 指令碼。

建立使用者列表。每個使用者應該在單獨的行中。

$ cat user-lists.txt
user1
user2
user3

使用以下 shell 指令碼將多個使用者新增到單個次要組。

vi group-update.sh

#!/bin/bash
for user in `cat user-lists.txt`
do
usermod -a -G mygroup $user
done

設定 group-update.sh 檔案的可執行許可權。

# chmod + group-update.sh

最後執行指令碼來實現它。

# sh group-update.sh

讓我看看使用 getent 命令的輸出。 是的,user1user2user3 已成功新增到 mygroup 中。

# getent group mygroup
mygroup:x:1012:user1,user2,user3

如何使用 gpasswd 命令將多個使用者新增到多個次要組或附加組?

如果要使用 gpasswd 命令將多個使用者新增到多個次要組或附加組中,請建立以下 shell 指令碼。

建立使用者列表。每個使用者應該在單獨的行中。

$ cat user-lists.txt
user1
user2
user3

建立組列表。每組應在單獨的行中。

$ cat group-lists.txt
mygroup
mygroup1

使用以下 shell 指令碼將多個使用者新增到多個次要組。

#!/bin/sh
for user in `more user-lists.txt`
do
for group in `more group-lists.txt`
do
usermod -a -G $group $user
done

設定 group-update-1.sh 檔案的可執行許可權。

# chmod +x group-update-1.sh

最後執行指令碼來實現它。

# sh group-update-1.sh

讓我看看使用 getent 命令的輸出。 是的,user1user2user3 已成功新增到 mygroup 中。

# getent group mygroup
mygroup:x:1012:user1,user2,user3

此外,user1user2user3 已成功新增到 mygroup1 中。

# getent group mygroup1
mygroup1:x:1013:user1,user2,user3

方法 4:在 Linux 中將使用者新增到組中的手動方法

我們可以透過編輯 /etc/group 檔案手動將使用者新增到任何組中。

開啟 /etc/group 檔案並搜尋要更新使用者的組名。最後將使用者更新到相應的組中。

# vi /etc/group

via: https://www.2daygeek.com/linux-add-user-to-group-primary-secondary-group-usermod-gpasswd/

作者:Magesh Maruthamuthu 選題:lujun9972 譯者:NeverKnowsTomorrow 校對:wxy

本文由 LCTT 原創編譯,Linux 中國 榮譽推出

在 Linux 中把使用者新增到組的四個方法

相關文章