Linux 组是用于管理 Linux 中用户帐户的组织单位。对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号。它被称为 用户 ID(UID)和组 ID(GID)。组的主要目的是为组的成员定义一组特权。它们都可以执行特定的操作,但不能执行其他操作。

Linux 中有两种类型的默认组。每个用户应该只有一个 主要组primary group 和任意数量的 次要组secondary group。

  • 主要组: 创建用户帐户时,已将主要组添加到用户。它通常是用户的名称。在执行诸如创建新文件(或目录)、修改文件或执行命令等任何操作时,主要组将应用于用户。用户的主要组信息存储在 /etc/passwd 文件中。
  • 次要组: 它被称为次要组。它允许用户组在同一组成员文件中执行特定操作。例如,如果你希望允许少数用户运行 Apache(httpd)服务命令,那么它将非常适合。

你可能对以下与用户管理相关的文章感兴趣。

可以使用以下四种方法实现。

  • usermod:修改系统帐户文件,以反映在命令行中指定的更改。
  • gpasswd:用于管理 /etc/group 和 /etc/gshadow。每个组都可以有管理员、成员和密码。
  • Shell 脚本:可以让管理员自动执行所需的任务。
  • 手动方式:我们可以通过编辑 /etc/group 文件手动将用户添加到任何组中。

我假设你已经拥有此操作所需的组和用户。在本例中,我们将使用以下用户和组:user1user2user3,另外的组是 mygroup 和 mygroup1

在进行更改之前,我希望检查一下用户和组信息。详见下文。

我可以看到下面的用户与他们自己的组关联,而不是与其他组关联。

  1. # id user1
  2. uid=1008(user1) gid=1008(user1) groups=1008(user1)
  3. # id user2
  4. uid=1009(user2) gid=1009(user2) groups=1009(user2)
  5. # id user3
  6. uid=1010(user3) gid=1010(user3) groups=1010(user3)

我可以看到这个组中没有关联的用户。

  1. # getent group mygroup
  2. mygroup:x:1012:
  3. # getent group mygroup1
  4. mygroup1:x:1013:

方法 1:使用 usermod 命令

usermod 命令修改系统帐户文件,以反映命令行上指定的更改。

如何使用 usermod 命令将现有的用户添加到次要组或附加组?

要将现有用户添加到辅助组,请使用带有 -G 选项和组名称的 usermod 命令。

语法:

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

如果系统中不存在给定的用户或组,你将收到一条错误消息。如果没有得到任何错误,那么用户已经被添加到相应的组中。

  1. # usermod -a -G mygroup user1

让我使用 id 命令查看输出。是的,添加成功。

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

如何使用 usermod 命令将现有的用户添加到多个次要组或附加组?

要将现有用户添加到多个次要组中,请使用带有 -G 选项的 usermod 命令和带有逗号分隔的组名称。

语法:

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

在本例中,我们将把 user2 添加到 mygroup 和 mygroup1 中。

  1. # usermod -a -G mygroup,mygroup1 user2

让我使用 id 命令查看输出。是的,user2 已成功添加到 myGroup 和 myGroup1 中。

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

如何改变用户的主要组?

要更改用户的主要组,请使用带有 -g 选项和组名称的 usermod 命令。

语法:

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

我们必须使用 -g 改变用户的主要组。

  1. # usermod -g mygroup user3

让我们看看输出。是的,已成功更改。现在,显示user3 主要组是 mygroup 而不是 user3

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

方法 2:使用 gpasswd 命令

gpasswd 命令用于管理 /etc/group 和 /etc/gshadow。每个组都可以有管理员、成员和密码。

如何使用 gpasswd 命令将现有用户添加到次要组或者附加组?

要将现有用户添加到次要组,请使用带有 -M 选项和组名称的 gpasswd 命令。

语法:

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

在本例中,我们将把 user1 添加到 mygroup 中。

  1. # gpasswd -M user1 mygroup

让我使用 id 命令查看输出。是的,user1 已成功添加到 mygroup 中。

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

如何使用 gpasswd 命令添加多个用户到次要组或附加组中?

要将多个用户添加到辅助组中,请使用带有 -M 选项和组名称的 gpasswd 命令。

语法:

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

在本例中,我们将把 user2 和 user3 添加到 mygroup1 中。

  1. # gpasswd -M user2,user3 mygroup1

让我使用 getent 命令查看输出。是的,user2 和 user3 已成功添加到 myGroup1 中。

  1. # getent group mygroup1
  2. mygroup1:x:1013:user2,user3

如何使用 gpasswd 命令从组中删除一个用户?

要从组中删除用户,请使用带有 -d 选项的 gpasswd 命令以及用户和组的名称。

语法:

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

在本例中,我们将从 mygroup 中删除 user1 。

  1. # gpasswd -d user1 mygroup
  2. Removing user user1 from group mygroup

方法 3:使用 Shell 脚本

基于上面的例子,我知道 usermod 命令没有能力将多个用户添加到组中,可以通过 gpasswd 命令完成。但是,它将覆盖当前与组关联的现有用户。

例如,user1 已经与 mygroup 关联。如果要使用 gpasswd 命令将 user2 和 user3 添加到 mygroup 中,它将不会按预期生效,而是对组进行修改。

如果要将多个用户添加到多个组中,解决方案是什么?

两个命令中都没有默认选项来实现这一点。

因此,我们需要编写一个小的 shell 脚本来实现这一点。

如何使用 gpasswd 命令将多个用户添加到次要组或附加组?

如果要使用 gpasswd 命令将多个用户添加到次要组或附加组,请创建以下 shell 脚本。

创建用户列表。每个用户应该在单独的行中。

  1. $ cat user-lists.txt
  2. user1
  3. user2
  4. user3

使用以下 shell 脚本将多个用户添加到单个次要组。

  1. vi group-update.sh
  2. #!/bin/bash
  3. for user in `cat user-lists.txt`
  4. do
  5. usermod -a -G mygroup $user
  6. done

设置 group-update.sh 文件的可执行权限。

  1. # chmod + group-update.sh

最后运行脚本来实现它。

  1. # sh group-update.sh

让我看看使用 getent 命令的输出。 是的,user1user2 和 user3 已成功添加到 mygroup 中。

  1. # getent group mygroup
  2. mygroup:x:1012:user1,user2,user3

如何使用 gpasswd 命令将多个用户添加到多个次要组或附加组?

如果要使用 gpasswd 命令将多个用户添加到多个次要组或附加组中,请创建以下 shell 脚本。

创建用户列表。每个用户应该在单独的行中。

  1. $ cat user-lists.txt
  2. user1
  3. user2
  4. user3

创建组列表。每组应在单独的行中。

  1. $ cat group-lists.txt
  2. mygroup
  3. mygroup1

使用以下 shell 脚本将多个用户添加到多个次要组。

  1. #!/bin/sh
  2. for user in `more user-lists.txt`
  3. do
  4. for group in `more group-lists.txt`
  5. do
  6. usermod -a -G $group $user
  7. done

设置 group-update-1.sh 文件的可执行权限。

  1. # chmod +x group-update-1.sh

最后运行脚本来实现它。

  1. # sh group-update-1.sh

让我看看使用 getent 命令的输出。 是的,user1user2 和 user3 已成功添加到 mygroup 中。

  1. # getent group mygroup
  2. mygroup:x:1012:user1,user2,user3

此外,user1user2 和 user3 已成功添加到 mygroup1 中。

  1. # getent group mygroup1
  2. mygroup1:x:1013:user1,user2,user3

方法 4:在 Linux 中将用户添加到组中的手动方法

我们可以通过编辑 /etc/group 文件手动将用户添加到任何组中。

打开 /etc/group 文件并搜索要更新用户的组名。最后将用户更新到相应的组中。

  1. # 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 中国”官方小程序来查看

linux 中将用户添加到组的 4 个方法的更多相关文章

  1. Linux 中将用户添加到组的指令

    在 Linux 操作系统下,如何添加一个新用户到一个特定的组中?如何同时将用户添加到多个组中?又如何将一个已存在的用户移动到某个组或者给他增加一个组?对于不常用 Linux 的人来讲,记忆 Linux ...

  2. Linux 中将用户添加到指定组的指令

    将一个已有用户 testuser 增加到一个已有用户组 root 中,使此用户组成为该用户的附加用户组,可以使用带 -a 参数的 usermod  指令.-a 代表 append, 也就是将用户添加到 ...

  3. Linux将用户添加到组的指令

    原文:https://blog.csdn.net/youmatterhsp/article/details/80549683:           https://www.cnblogs.com/cl ...

  4. linux把用户添加到组

    使用 usermod 命令 将现有的用户添加到多个次要组或附加组 # usermod -a -G GroupName UserName id 命令查看输出 # id UserName 用户添加到多个次 ...

  5. Linux 中将用户添加到指定组

    添加组 usermod -a -G root dev 修改组 usermod -g root dec 删除组 gpasswd -d dev root gpasswd -a dev root //将用户 ...

  6. Linux给用户添加sudo权限

    一.linux给用户添加sudo权限: 有时候,linux下面运行sudo命令,会提示类似: xxxis not in the sudoers file.  This incident will be ...

  7. 用Bash脚本将Linux普通用户添加为系统管理员

    将Linux普通用户添加为系统管理员在Gnome或KDE这样强大与完善的桌面环境下是非常简单的事情,一般来说在用户设置的对话框里就直接有相应选项.不过,出于简洁与高效的风格,自己目前并未使用这些高端但 ...

  8. 【转】linux 设置用户id 设置组id

    linux 设置用户id 设置组id   转自 linux 设置用户id 设置组id   最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...

  9. Day 5 Linux之用户、群组和权限

    Linux之用户.群组和权限 一.各文件及内容对应含义 1./etc/passwd文件 功能:存储所有用户的相关信息,该文件也被称为用户信息数据库(Database). 含义:如下图所示. 2./et ...

随机推荐

  1. 03 python 对象笔记

    类的命名方法 1.使用大驼峰命名法:每一个单词的首字母大写(第一个的也要)2.单词之间不需要下划线 对象的内置函数和属性 1.使用dir()函数来获取对象的内置方法和属性.返回值是一个列表.2.返回中 ...

  2. GXOI/GZOI2019部分题解

    D1T1:与或和 对每位处理,问题变成所有内部不包含0/1的矩阵的个数,单调栈维护即可. #include<cstdio> #include<algorithm> #inclu ...

  3. Angular 学习笔记 ( 我追的 feature 和 bug )

    Angular 有许多功能还不齐全,也有不少 bug 让人很头疼,所以这里做一些记入 Angular Bug 1.input type="number", valueChanges ...

  4. sqlserver导入Excel数据 总是报错:错误 0xc020901c: 数据流任务 1: 输出“Excel 源输出”(55) 上的 输出列“T2”(64) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项

    在网络上搜索解决办法,解决办法是把excel导入到access数据库中,再把access数据库导入到sqlsever中,公司机器上不让安装office工具,问了一个同事得到的回答是把数据中很长的那行数 ...

  5. linux环境,hidraw设备自动加载时默认权限的设置方法

    在linux系统中,hidraw设备会自动加载并设置默认权限,但系统的默认只允许root用户访问,普通用户是不允许读写. 设置的方法是修改udev的配置,配置路径是/etc/udev/rules.d/ ...

  6. mysql 系统变量

    show variables; ---------------------------------+-------------------------------------------------- ...

  7. JS权威指南读书笔记(一)

    第一章 JavaScript概述 1 JS是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.   第二章 词法结构 1 JS程序是用Unicode字符集编写的. 2 JS是区 ...

  8. Source Insight用法

    快捷键 Symbol: Browse Project Symbols-:F7, Alt+G Relation View Relationship->For Functions->Pefer ...

  9. OpenStack kilo版(3) Nova部署

    部署在controller和compute节点 配置数据库 MariaDB [(none)]> CREATE DATABASE nova;  Query OK, 1 row affected ( ...

  10. input 框自动检测输入是否为数字

    最近做一个公众号,我这个菜鸡不得不学习很多东西,谁让老师要我一个人做这个项目呢? 好,进入正题,因为菜,所以很菜,但是百度很厉害啊,谁让我不好意思问老师,而且我也觉得问这么小的问题,太难以启齿.. 因 ...