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

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-29-用户组信息相关命令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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修改文件和目录的所有者和所属组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123762.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!