Linux中把用户添加到组的4个方法总结

前言

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 文件手动将用户添加到任何组中。

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

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

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

# 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 添加到 mygroup 和 mygroup1 中。

# usermod -a-G mygroup,mygroup1 user2

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

# 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]

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

#gpasswd-M user2,user3 mygroup1

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

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

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

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

语法:

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

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

#gpasswd-d user1 mygroup
Removing user user1from group mygroup

方法 3:使用 Shell 脚本

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

例如, user1 已经与 mygroup 关联。如果要使用 gpasswd 命令将 user2 和 user3 添加到 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 命令的输出。 是的, user1 、 user2 和 user3 已成功添加到 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 命令的输出。 是的, user1 、 user2 和 user3 已成功添加到 mygroup 中。

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

此外, user1 、 user2 和 user3 已成功添加到 mygroup1 中。

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

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

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

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

# vi /etc/group

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • Linux shell数组与关联数组的用法实例

    1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ declare -A fruits_price $ fruits_price=([apple]='$100' [orange]='$150') 列出关联数组的索引(也就是 key): $ echo ${!fruits_price[*]} $ echo ${!fruits_price[@]} 2. 序列数组 seq 方法创建 基本用法: $ a_nu

  • linux用户组以及权限总结

    用户组 在linux 中每个用户必须属于一个组,而Linux下有三种组的概念,如下: 文件所拥有者 用户所在组 其他组 文件所有者: 就是文件的创造者,谁创建的文件,谁就是文件的所有者. 用户所在组: 当Linux当前用户创建了一个文件后,则这个文件所属于的组便是这个用户所在的组 其他组: 除了文件所有者以及所在组的用户外,系统其他的用户都是文件的其他组 我们如何去查看当前的登录用户以及用户所属组呢?进入到终端下,输入下面的命令: 1.查看登录的用户名? whoami:查看登录的用户名 2.查看

  • Linux组基本介绍知识点总结

    一.Linux组基本介绍 在Linux中每个用户必须属于一个组,不能独立于组外.在Linux中每个文件有所有者,所在组,其他组的概念 1)所有者 2)所在组 3)其他组 4)改变用户的所在组 二.文件/目录 所有者 一般为文件的创建者,谁创建了该文件,就自然成为该文件的所有者 1.查看文件的所有者 1)指令: ls  -ahl 2) 应用实例 : 2.修改文件所有者 指令: chown  用户名   文件名 应用实例 要求: 三.组的创建 1.基本命令 groupadd  组名 2.应用实例  

  • Linux中的awk数组的基本使用方法

    1.awk数组描述 在其他的编程语言中,数组的下标都是从0开始的,也就是说,如果想反向引用数组中 的第一个元素,则需要引用对应的下标[0],在awk中数组也是通过引用下标的方法,但是在awk中数组的下标是从1开始的,在其他语言中,你可能会习惯于先"声明"一个数组,在awk中,则不用这样,直接为数组的元素赋值即可(其实如果自己给数组赋值,下标从1或者从0开始那就无所谓了!) 2.在声明数组时,可能值很多,命令太长,降低命令可读性,所以使用反斜杠"\",来进 行换行,效

  • Linux中把用户添加到组的4个方法总结

    前言 Linux 组是用于管理 Linux 中用户帐户的组织单位.对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号.它被称为 用户 ID(UID)和组 ID(GID).组的主要目的是为组的成员定义一组特权.它们都可以执行特定的操作,但不能执行其他操作. Linux 中有两种类型的默认组.每个用户应该只有一个 主要组 primary group  和任意数量的 次要组 secondary group  . • 主要组: 创建用户帐户时,已将主要组添加到用户.它通常是用户的名称.在执

  • Linux中不同用户之间复制文件的两个方法

    前言 考虑如下情景:foo用户home目录下有一文件file.txt,要将其copy至bar用户的home目录.Linux对用户home目录有严格的权限限制,非owner用户或者同group用户无权限读写,除非是root(至高无上的root).如果没有root权限,有什么办法把file.txt 复制到bar用户的home目录下呢? 想到两个办法. 第一个办法,先用foo用户登录,把文件copy到系统临时目录/tmp,然后切换到bar用户,再从系统临时目录/tmp把文件copy到自己的home目录

  • 解决Linux中ROOT用户删除普通用户报普通用户已登录问题

    问题产生背景:今天在Linux某普通用户openam_jxedu上配置系统,因为文件误删,我想删除系统安装文件,重新解压安装,但是考虑到该系统生成的配置文件可能会对后来的某些功能造成影响,因此便想删除该普通用户--openam_jxedu,然后重新创建该用户,然后再进行系统的重新安装. 问题描述:我在root用户下,使用userdel -r openam_jxedu 指令删除该用户,但是却发现报如下错误. 我本地确定已经关闭了openam_jxedu用户的连接.因为可能是其他主机在连接opena

  • 在Linux中查看及终止正在运行的后台程序方法

    linux 任务管理-后台运行与终止 fg.bg.jobs.&.ctrl + z命令 一. & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境

  • LINUX中如何查看某个端口是否被占用的方法

    之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat -anp |grep 端口号 如下,我以3306为例,netstat -anp |grep 3306(此处备注下,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看),如下图1: 图1中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了. 2.netstat -nultp(此处不用加端口号)

  • Linux 中shell脚本设置开头固定格式的实现方法

    Linux 之shell脚本设置开头固定格式 每次进入shell都要设置开头,很麻烦,现修改vim配置文件即可. [root@node01 ~]vim .vimrc 将下列内容复制进文件 set ignorecase set cursorline set autoindent autocmd BufNewFile *.sh exec ":call SetTitle()" func SetTitle() if expand("%:e") == 'sh' call se

  • destoon实现会员商铺中指定会员或会员组投放广告的方法

    本文实例讲述了destoon实现会员商铺中指定会员或会员组投放广告的方法,对destoon开发来说有很好的实用价值.分享给大家供大家参考,具体方法如下: 一.指定会员属性来投放广告 如果想在同一个位置显示广告的,可以在模板文件夹template\default\homepage下的 side.htm 文件里增加: {if $COM[vip]} {else} 显示的AD(可以调用网站广告管理里的调用方式) {/if} 详解:以上代码的意思是,VIP不显示广告,其他会员则显示,可以很好的体现出VIP

  • Linux中crontab输出重定向不生效问题的解决方法

    问题 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为"crontab",是"cron table"的简写. 近期在crontab中添加了一个定时任务,该任务执行之后默认会有正常输出.为了确保在任务执行过程中的异常信息也可以捕获,方便问题定位,因此在crontab中我写了这么一条命令: 01 09 * * * cd /o

  • Linux中如何查询运行文件的全路径的方法

    在linux中,有些地方需要使用绝对路径,对于一些命令,如java.mysql等,需要使用到运行文件所在的路径,给大家介绍一个命令,来查询这个路径. which 可以通过which查询运行文件的所在路径,具体如下: 命令详解 以mysql为例,命令如下: [work(zhaoweinan)@tjtxvm-144-80 soft]$ which mysql /opt/soft/percona-mysql55/bin/mysql 命令输出了运行文件mysql所在的路径 当没有该文件时,输出如下: [

  • 如何在Linux环境为用户添加sudo权限

    sudo的配置文件 sudo默认配置文件是**/etc/sudoers** ,一般使用Linux指定编辑工具visudo ,此工具的好处是可以进行错误检查.在添加规则不符合语法规则时,保存退出时会提示给我们错误信息:配置好后,可以用切换到您授权的普通用户下,通过sudo -l来查看哪些命令是可以执行的或禁止的: /etc/sudoers 文件中每行是一个规则,前面带有#号可以当作是注释的内容,并不执行:如果规则很长,可以写在多列上,可以用\号来续行. /etc/sudoers 的规则可分为两类:

随机推荐