Linux学习-29-用户组信息相关命令

news2025/4/26 10:18:14

8.17 Linux groupadd命令:添加用户组

  • 添加用户组的命令是 groupadd,命令格式如下:
[root@CncLucZK ~]# groupadd [选项] 组名
  • 选项:

    • -g GID:指定组 ID;
    • -r:创建系统群组。
    • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
  • 使用 groupadd 命令创建新群组非常简单,例如:

[root@CncLucZK ~]# groupadd u-dev3
[root@CncLucZK ~]# grep u-dev3 /etc/group /etc/gshadow
/etc/group:u-dev3:x:1005:
/etc/gshadow:u-dev3:!::
  • 新组的组标识号是在当前已有的最大组标识号的基础上加1

8.18 Linux groupmod命令详解:修改用户组

  • groupmod 命令用于修改用户组的相关信息,命令格式如下:
[root@CncLucZK ~]# groupmod [选现] 组名
  • 选项:

    • -g GID:修改组 ID;
    • -n 新组名:修改组名;
    • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • 例如:

[root@CncLucZK ~]# grep u-dev3 /etc/group /etc/gshadow
/etc/group:u-dev3:x:1005:
/etc/gshadow:u-dev3:!::
[root@CncLucZK ~]# groupmod -n 'u-dev4' u-dev3
[root@CncLucZK ~]# grep u-dev3 /etc/group /etc/gshadow
[root@CncLucZK ~]# grep u-dev4 /etc/group /etc/gshadow
/etc/group:u-dev4:x:1005:
/etc/gshadow:u-dev4:!::

注意,用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的。

8.19 Linux groupdel命令:刪除用户组

  • groupdel 命令用于删除用户组(群组),此命令基本格式为:
[root@CncLucZK ~]#groupdel 组名
  • 使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。如:删除上节中用 groupadd 命令创建的群组 u-dev3,执行命令如下:
[root@CncLucZK ~]# grep u-dev3 /etc/group /etc/gshadow
/etc/group:u-dev3:x:1005:
/etc/gshadow:u-dev3:!::
[root@CncLucZK ~]# groupdel u-dev3
[root@CncLucZK ~]# grep u-dev3 /etc/group /etc/gshadow

注意,不能使用 groupdel 命令随意删除群组。此命令仅适用于删除那些 “不是任何用户初始组” 的群组,换句话说,如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除。例如:

#查询已经存在u-dev2用户组
[root@CncLucZK ~]# grep u-dev2 /etc/passwd  /etc/group /etc/gshadow
/etc/passwd:u-dev2:x:1004:1004::/home/u-dev2:/bin/bash
/etc/group:u-dev2:x:1004:
/etc/gshadow:u-dev2:!::
#删除u-dev2组
[root@CncLucZK ~]# groupdel u-dev2
groupdel: cannot remove the primary group of user 'u-dev2'

可以看到,groupdel 命令删除 temp 群组失败,且提示“不能删除 temp 用户的初始组”。如果一定要删除 u-dev2 群组,要么修改 u-dev2 用户的 GID,也就是将其初始组改为其他群组,要么先删除 u-dev2 用户。虽然我们已经学了如何手动删除群组数据,但胡乱地删除群组可能会给其他用户造成不小的麻烦,因此更改文件数据要格外慎重。

8.20 Linux gpasswd命令用法详解:把用户添加进组或从组中删除

  • 为了避免系统管理员(root)太忙碌,无法及时管理群组,我们可以使用 gpasswd 命令给群组设置一个群组管理员,代替 root 完成将用户加入或移出群组的操作。gpasswd 命令的基本格式如下:
[root@CncLucZK ~]# gpasswd 选项 组名
  • 此命令提供的各种选项以及功能:

    选项功能
    选项为空时,表示给群组设置密码,仅 root 用户可用。
    -A user1,…将群组的控制权交给 user1,… 等用户管理,也就是说,设置 user1,… 等用户为群组的管理员,仅 root 用户可用。
    -M user1,…将 user1,… 加入到此群组中,仅 root 用户可用。
    -r移除群组的密码,仅 root 用户可用。
    -R让群组的密码失效,仅 root 用户可用。
    -a user将 user 用户加入到群组中。
    -d user将 user 用户从群组中移除。
  • 从上表可以看到,除 root 可以管理群组外,可设置多个普通用户作为群组的管理员,但也只能做“将用户加入群组”和“将用户移出群组”的操作。

#创建新群组 u-dev3,并将群组交给 zk 管理
[root@CncLucZK ~]# groupadd u-dev3	#创建群组
[root@CncLucZK ~]# gpasswd u-dev3	#设置密码
Changing the password for group u-dev3	
New Password: 
Re-enter new password: 
[root@CncLucZK ~]# gpasswd -A zk u-dev3	     #加入群组管理员为 zk
[root@CncLucZK ~]# grep u-dev3 /etc/group /etc/gshadow
/etc/group:u-dev3:x:1005:
/etc/gshadow:u-dev3:$6$eOSib/sOpap/D0$gj0l.G25x6Mgz5xzmoEuASZfb6qOuZ8JBgSVlU8w8pE03fisqCAmj/I2Ft.ZkTSG7RAgKd9qXiaSB6MPXaWaG0:zk:

可以看到,此时 zk 用户即为 u-dev3 群组的管理员。

  • 以zk用户登陆系统,并将用户 zk和 u-dev1加入u-dev3群组。
[root@CncLucZK ~]# su - zk
Last login: Sat Oct 15 12:07:52 CST 2022 on pts/0
[zk@CncLucZK ~]$ gpasswd -a zk u-dev3
Adding user zk to group u-dev3
[zk@CncLucZK ~]$ gpasswd -a u-dev1 u-dev3
Adding user u-dev1 to group u-dev3
[zk@CncLucZK ~]$ grep u-dev3 /etc/group /etc/gshadow
/etc/group:u-dev3:x:1005:zk,u-dev1
grep: /etc/gshadow: Permission denied
#以zk用户登陆系统,并将用户 zk 和 u-dev1 加入u-dev3群组。
  • 前面讲过,使用 usermod -G 命令也可以将用户加入群组,但会产生一个问题,即使用此命令将用户加入到新的群组后,该用户之前加入的那些群组都将被清空。例如:
#方式1:将u-dev2添加到zk群组,并不移除u-dev2之前的附加组
[root@CncLucZK ~]# gpasswd -M u-dev2 u-dev3
[root@CncLucZK ~]# gpasswd -M u-dev2 zk
[root@CncLucZK ~]# grep u-dev2 /etc/passwd /etc/group /etc/gshadow
/etc/passwd:u-dev2:x:1004:1004::/home/u-dev2:/bin/bash
/etc/group:zk:x:1002:u-dev2						#u-dev2的附加组
/etc/group:u-dev2:x:1004:
/etc/group:u-dev3:x:1005:zk,u-dev1,u-dev2		#u-dev2的附加组
/etc/gshadow:zk:!::u-dev2
/etc/gshadow:u-dev2:!::
/etc/gshadow:u-dev3:$6$eOSib/sOpap/D0$gj0l.G25x6Mgz5xzmoEuASZfb6qOuZ8JBgSVlU8w8pE03fisqCAmj/I2Ft.ZkTSG7RAgKd9qXiaSB6MPXaWaG0:zk:zk,u-dev1,u-dev2

#方式2:将u-dev2添加到zk群组,usermod -G导致用户的只能对一个属组附加
[root@CncLucZK ~]# usermod -G zk  u-dev2
[root@CncLucZK ~]# grep u-dev2 /etc/passwd /etc/group /etc/gshadow
/etc/passwd:u-dev2:x:1004:1004::/home/u-dev2:/bin/bash
/etc/group:zk:x:1002:u-dev2					#u-dev2的附加组只保留了一个
/etc/group:u-dev2:x:1004:
/etc/gshadow:zk:!::u-dev2
/etc/gshadow:u-dev2:!:: 					
  • 虽然使用 usermod 命令成功地将u-dev2 用户加入在 zk群组中,但u-dev2 用户原本在u-dev3群组中,此时却被移出,这就是使用 usermod 命令造成的。因此,将用户加入或移出群组,最好使用 gpasswd 命令。

8.21 Linux newgrp命令用法详解:切换用户的有效组

  • 我们知道,每个用户可以属于一个初始组(用户是这个组的初始用户),也可以属于多个附加组(用户是这个组的附加用户)。既然用户可以属于这么多用户组,那么用户在创建文件后,默认生效的组身份是哪个呢?当然是初始用户组的组身份生效,因为初始组是用户一旦登陆就获得的组身份。也就是说,用户的有效组默认是初始组,因此所创建文件的属组是用户的初始组。那么,既然用户属于多个用户组,能不能改变用户的初始组呢?使用命令 newgrp 就可以。

  • newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组。此命令的基本格式如下:

[root@CncLucZK ~]# newgrp 组名
  • 下面,我们通过一个实例,讲解此命令的具体用法和功能:
#首先,建立 3 个用户组 group1-test、group2-test 和 group3-test,命令如下:
[root@CncLucZK ~]# groupadd group1-test
[root@CncLucZK ~]# groupadd group2-test
[root@CncLucZK ~]# groupadd group3-test
创建一个用户 u1-test,同时指定 u1-test 的初始组为 group1-test,附加组为 group2-test,group3-tes,执行命令如下
[root@CncLucZK ~]# useradd -g group1-test -G group2-test,group3-test u1-test
[root@CncLucZK ~]# grep u1-test /etc/group
group2-test:x:1007:u1-test
group3-test:x:1008:u1-test
[root@CncLucZK ~]# more /etc/group | grep u1-test
group2-test:x:1007:u1-test
group3-test:x:1008:u1-test
#对用户 u1-test 设置密码,执行命令如下:
[root@CncLucZK ~]# passwd u1-test
Changing password for user u1-test.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password: 
passwd: all authentication tokens updated successfully.
#切换至 user1 用户,通过 newgrp 切换用户组进行下列操作,读者可从中体会出 newgrp 命令的作用。
#切换至 u1-test 用户
[root@CncLucZK ~]# su - u1-test
[u1-test@CncLucZK ~]$ whoami
u1-test
#使用 newgrp 命令一边切换 u1-test 的初始组,一边创建文件
[u1-test@CncLucZK ~]$ mkdir utxt1
[u1-test@CncLucZK ~]$ newgrp group2-test
[u1-test@CncLucZK ~]$ mkdir utxt2
[u1-test@CncLucZK ~]$ newgrp group3-test
[u1-test@CncLucZK ~]$ mkdir utxt3
#查看各文件的详细信息
[u1-test@CncLucZK ~]$ pwd
/home/u1-test
[u1-test@CncLucZK ~]$ ll
total 12
drwxr-xr-x 2 u1-test group1-test 4096 Oct 15 13:49 utxt1
drwxr-xr-x 2 u1-test group2-test 4096 Oct 15 13:50 utxt2
drwxr-xr-x 2 u1-test group3-test 4096 Oct 15 13:50 utxt3
[u1-test@CncLucZK ~]$ echo $$
150852
[u1-test@CncLucZK ~]$ 
[u1-test@CncLucZK ~]$ newgrp group2-test
[u1-test@CncLucZK ~]$ echo $$
151357

可以看到,通过使用 newgrp 命令切换用户的初始组,所创建的文件各自属于不同的群组,这就是 newgrp 所发挥的作用,即通过切换附加组成为新的初始组,从而让用户获得使用各个附加组的权限。

用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。

[u1-test@CncLucZK ~]$ newgrp root
  • 这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

  • newgrp命令的底层实现:newgrp 命令每一次切换用户的初始组,该用户都会以另外一个 shell(新进程,也可以说是子进程)登陆,只不过在新 shell 上登陆的该用户,其初始组改变了而已。

以上实例中,通过添加 shell 内置命令 "echo $$" 就可以发现,每次使用 newgrp 命令,都会切换到一个新的进程。
  • 在本节实例中,使用 newgrp 命令切换用户初始组的整个过程
    在这里插入图片描述
  • 可以看到,每一次使用 newgrp 切换用户的初始组,用户都会切换到一个新的子 shell 中,如图 1 中,u1-test 用户的初始组从最初的 group1-test,切换成了 group2-test,再切换成 group3-test。当然,如果你想回到原本的环境,需要通过 exit 命令不断回退到当前进程的父进程,最终才能回到初始组为 group1-test 时的 user1-test 运行的 shell 中。

参考文献:
Linux groupadd命令:添加用户组
Linux 用户和用户组管理

下一篇:Linux学习-30-chgrp、chown修改文件和目录的所有者和所属组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ opencv 图像色彩空间转换--色域捕获

1.API和相关知识 1.inRange 在opencv中,我们提取指定色彩范围的区域,采用inRange实现,这样的一块区域,学名叫做ROI(region of interest),感兴趣区域。 关于inRange的提取原理 图像中&#xff0…

这是一篇用python画3D爱心的代码

浅浅写一个最近很火的爱心代码 最近你是否也被李峋的爱心跳动代码所感动,心动不如行动,相同的代码很多,我们今天换一个玩法!构建一个三维的跳动爱心!嗯!这篇博客本着开源的思想!不是说谁对浪漫…

开放服务担心安全?vx-api-gateway值得一用

下载地址:VX-API-Gateway帮助文档 下载解压打开后 Windows 下vx-api-gateway启动 bin目录下start.bat文件 启动后访问http://localhost:5256/ VX-API客户端用于查看VX-API运行的基本信息,管理应用与API及黑名单,打开客户端的方式,在浏览器中请求http://地址:端口…

被生活、房贷车贷压得喘不过气的35岁测试工程师,拿什么来谈追求~

高龄测试员现状 我有位在深圳工作的测试员朋友分享了他的工作经历,他今年35岁,前不久被公司辞退,面对家庭,房贷,车贷的压力,让他的生活都是一片灰,离职后最让测试员感到痛心是在面试多家公司以…

Android Studio App开发之广播组件Broadcast的讲解及实战(包括收发标准、有序、静态广播实现手机震动功能 附源码)

一、收发标准广播 Android的广播机制正式借鉴了Wifi的通信原理,不必搭建专门的通路,就能在发送方与接收方之间建立连接,同时广播也是Android的四大组件之一,它用于Android各组件之间的灵活通信,与活动的区别在于以下几…

荧光素标记大鼠甲状腺滤泡上皮细胞FRTL-5,荧光素FITC标记的FRTL-5细胞,FITC-FRTL-5

产品名称:荧光素标记大鼠甲状腺滤泡上皮细胞FRTL-5,荧光素FITC标记的FRTL-5细胞 英文名称:FITC-FRTL-5 在F-12培养基中加入5%小牛血清、10mU/ml TSH、10g/ml胰岛素、5g/ml转铁蛋白、10ng/ml生长抑素、0.4ng/ml氢化可的松、10ng/…

JAVA虚拟机的性能监控

一、JDK的命令行工具 命令一:jps(虚拟机进程状况工具) jps -q //只输出LVMID,省略主类的名称(LVMID:虚拟机实例运行时候的进程号) jps -m //输出虚拟机进程启动的时传递给主类main()函数的参…

笔记本电脑数据怎么恢复?笔记本电脑数据恢复用什么工具?

随着互联网时代的发展,电脑的应用越来越广泛,已经深深融入了我们的工作乃至生活当中。其中,笔记本作为可随身携带的电脑设备,其灵活、轻便等优势一直深受大家喜爱。在日常使用过程中,我们会往笔记本里存储各式各样的数…

Springboot快速开发-书本信息管理系统(项目源码)

【我后续会发一个资源包,里面是所有代码,数据库表设计也有,大学生可以直接用,导入数据库运行,再导入后端项目和前端项目,再去网页运行就好了,效果图下面有】 1、考核要求: 数据库&am…

笔试强训第22天--(第一个只出现一次的字符 小易的升级之路)

选择 B 从头找和从尾找不都得遍历嘛 B 错了建议给自己来个大嘴巴子 C 老演员了 A 一个从头来,一个从尾来,这样才能全满嘛 A 从1开始存的 但是依然是头指针等于尾指针的时候是空,但是你不留一个空间不存数据,那满的时候也是头指针等…

HAWE油缸_哈威油缸

HAWE油缸_哈威油缸宁波秉圣主要做的型号:HSE24-20,HSE16-8,HSE12-8,HSA32-20,HSE16-16,SHA32-20,SHA40-25等。 HAWE防爆阀宁波秉圣常作的型号:EXGZ4-12-GM24,NSWP2D/M/20-G24EX,VP1Z-G24EX,NBVP16R/2-G24EX,PSL41/160-3-E1-G24EX-3m,PSV4S2/2…

期末前端web大作业——名侦探柯南网页制作 Hbuiderx制作网页 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

32岁事业无成,我终于选择放过自己了

作为一名热爱编程的程序员,我一直在思考,既然我热爱这份职业,如果我能在工作中获得人生意义,岂不是两全其美。于是,我去看了一本书《发现你的天赋》。很多人评价,照着上面的引导认真做题,不仅能…

springboot2.X整合mybatis使用joda时间格式变量完成插入操作

开发工具使用的idea2022.3&#xff0c;数据库是mysql5.X系列&#xff0c;springboot用的是2.7系列&#xff0c;使用了java8的joda类型的时间格式完成mybatis的插入操作。下面贴代码说明实现过程 项目结构如下图&#xff1a; 下面说一些关键的maven配置 <!-- springboot myb…

如何检测和克服MLOps中的模型漂移

image.png机器学习 (ML) 被广泛认为是数字化转型的基石&#xff0c;但 ML 模型最容易受到数字环境变化动态的影响。 ML 模型由创建它们的时间段内可用的变量和参数定义和优化。 让我们看看一个基于垃圾邮件的通用模板创建的 ML 模型的案例&#xff0c;该模板当时可能正在激增。…

安装【银河麒麟V10】linux系统

最近客户的服务器是麒麟的操作系统&#xff0c;因为要在上面安装我们的应用所以&#xff0c;要找镜像在本地搭建测试环境&#xff0c;看看有什么问题&#xff0c;把遇到的问题和操作总结一下。因为客户的服务器是内网&#xff0c;没网还需要挂载镜像&#xff0c;所以还需要挂载…

Linux命令从入门到实战 ---- 磁盘管理类

du 查看文件和目录占用的磁盘空间 du disk usage 磁盘占用情况 基本语法 du [选项] 目录/文件 显示目录下每个子目录的磁盘使用情况 选项功能-h将文件大小转换成人类便于阅读的形式-a查看子目录和文件-c显示所有的文件和子文件后&#xff0c;显示总和-s只显示总和–max-depth…

docker-compse整合redis集群

这里写自定义目录标题配置配置、数据和logs目录配置docker-compose配置集群总结本文是通过docker-compose在linux配置redis高可用。前提条件是系统中需要安装docker和docker-compose。配置配置、数据和logs目录 mkdir -p /home/docker-redis在当前目录下创建cluster-conf.conf…

回溯法求解n个元素的集合的幂集

目录 1.回溯法 2.集合的幂集本质问题 3.集合的幂集 &#xff08;1&#xff09;集合 &#xff08;2&#xff09;求解集合的幂集 &#xff08;3&#xff09;算法描述 &#xff08;4&#xff09;算法实现 &#xff08;5&#xff09;算法拓展 1.回溯法 回溯法也是设计递归…

Android App开发实战之实现微信记账本(附源码 超详细必看)

需要源码或图片集请点赞关注收藏后评论区留言~~~ 一、需求描述 好用的记账本必须具备两项基本功能。一项时记录新帐单&#xff0c;另一项时查看账单列表&#xff0c;其中账单的记录操作要求用户输入账单的明细要素&#xff0c;包括账单的发生时间&#xff0c;账单的收支类型&a…