在 Linux 中把用户添加到组的四个方法

news/2024/12/19 6:39:31/

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

http://www.ppmy.cn/news/1344259.html

相关文章

统计数字出现次数的数位动态规划解法-数位统计DP

在处理数字问题时,我们经常遇到需要统计一定范围内各个数字出现次数的情况。这类问题虽然看起来简单,但当数字范围较大时,直接遍历统计的方法就变得不再高效。本文将介绍一种利用数位动态规划(DP)的方法来解决这一问题,具体来说,是统计两个整数a和b之间(包含a和b)所有…

liunx 备份文件脚本、还原文件脚本、替换文件脚本

最近项目中有这个业务,需要编写脚本文件以实现各种需求。由于我已经很长时间没有写过脚本了,因此我决定记录下这个过程,以便将来有类似的需求时可以参考。 在开始编写脚本之前,我首先对业务需求进行了深入的分析和理解。我了解了项…

华清作业day53

1.c代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <string.h> #include <unistd.h> #include <sys/wait.h> struct msgbuf{long in…

使用MATLAB驱动USRP-N320实现OFDM自收自发

文章目录 前言一、收发代码二、截取一帧 OFDM三、执行主函数四、运行结果五、资源自取 前言 本文作为实验结果记录及测试&#xff0c;方便后面回顾所做的工作。本文基于一台电脑和一台 USRP 设备实现了 OFDM 自发和自收功能 一、收发代码 ofdm_tx_rx_test.m 核心代码&#x…

ArrayList和LinkedList的区别是什么

ArrayList 和 LinkedList 分别代表了两类不同的数据结构&#xff1a;动态数组和链表。它们都实现了 Java 的 List 接口&#xff0c;但是有着各自独特的特点和性能表现。 1. 数据结构 ArrayList 是基于可调整大小的数组实现的。它允许快速随机访问&#xff0c;因为内部元素可通…

体悟PyTorch的优雅

——PyTorch 是所有的框架中面向对象设计的最优雅的一个。 —— PyTorch的设计最符合人们的思维。 编程是一门艺术&#xff0c;编程可以很优雅。研究可以很优雅&#xff0c;研发也可以很优雅。我们的人生可以很优雅&#xff01; 1. PyTorch 的优雅 PyTorch 的面向对象设计确实…

Mybatis中的sql-xml延迟加载机制

Mybatis中的sql-xml延迟加载机制 hi&#xff0c;我是阿昌&#xff0c;今天记录一下关于Mybatis中的sql-xml延迟加载机制 一、前言 首先mybatis技术本身就不多介绍&#xff0c;说延迟加载机制之前&#xff0c;那要先知道2个概念&#xff1a; 主查询对象关联对象 假设咱们现…

鸿蒙4.0.0 安装minitouch

鸿蒙4.0.0 安装minitouch ubuntu 系统 minitouch 地址 https://github.com/DeviceFarmer/minitouch 因为 鸿蒙4.0.0 对应安卓12 API版本31 所以启动 minitouch 需要 STFService 地址 https://github.com/openstf/STFService.apk 到release下载最新的STFService.apk &…