Linux用户组-主组&附加组

1,638 阅读3分钟

众所周知,Linux 是一个多用户系统,每个用户会被分配各自的操作权限

然而,试想一个公司的组织架构,往往许多位于同级别的成员,拥有一些相同权利,如“查看所属部门文件”。同理,在 Linux 系统中,许多用户也拥有共同的权限

因此,Linux 系统支持将用户按用户组来管理权限,即:权限分配给用户组,将用户加入用户组后便具有该用户组的权限。用户组为权限的统一管理提供了更高效的分配方式。

Linux 用户组有两种:主组及附加组,介绍如下:

主组:

也叫初始组,是用户登录系统时的组,规则如下:

  • 创建新用户时,若未明确指定该用户所属的主组,会默认创建一个与用户名相同的组,作为该用户的主组

  • 用户创建文件时,文件的所属权限组就是当前用户的主组

  • 使用useradd命令时用-g参数可以指定主组,则不会默认创建同名的主组

  • 用户有且只能所属一个主组

  • 用户的主组不能被删除

  • 用户不能直接被移出主组,但可以更换主组

  • 用户被删除时它的主组若没有其他所属用户,则会自动删除该主组

附加组

登录后可切换的其他组,规则如下:

  • 使用useradd命令时用-G参数可以指定附加组

  • 用户可以所属零个或多个附加组

  • 用户的附加组和主组可相同

  • 附加组可以直接被删除而无需关心是否所属于用户

  • 附加组可以新增和移除任意个所属用户

  • 用户被删除时所属附属组不会受影响

操作演示

  • 查看 /etc/passwd文件

image.png

每一个用户一条记录,7个字段分别为:用户名,密码(隐藏显示x),用户ID,用户主组ID,用户描述,用户主目录,用户默认shell

cat /etc/passwd
  user1:x:1002:1002::/home/user1:/bin/bash
  • 查看 /etc/group文件

每一个组一条记录,四个字段分别为:名,密码,组ID,组内用户列表(仅显示将该组作为附加组的用户)

cat /etc/group
  user1:x:1002:
  • 修改用户的主组
usermod -g group1 user1
cat /etc/passwd
  user1:x:1002:1003::/home/user1:/bin/bash
  • 将用户加入附属组

建议使用gpasswd命令而不是usermod,因为usermod -G命令如果不写全用户的附属组,会清空之前的所有附属组

groupadd group2
gpasswd -a user1 group2
  Adding user user1 to group group2
cat /etc/group
  group2:x:1004:user1
  • 用户的主组不能被删除
groupdel user1
  groupdel: cannot remove the primary group of user 'user1'
  • 直接删除附属组
cat /etc/group
  group2:x:1004:user1
groupdel group2
cat /etc/group
  /etc/group中已无记录
  • 创建用户时指定用户所属主组和附加组 -g:用户所属主组 -G:用户所属附加组 -M : 不创建用户主目录
useradd -g group1 -G group2 -M user3
cat /etc/passwd
  user3:x:1003:1003::/home/user3:/bin/bash
cat /etc/group
  group2:x:1004:user3

参考:Linux passwd command examples (landoflinux.com)