linux用户和用户组的理解

在 Linux 中,组是用户的集合。这些组的主要目的是为给定资源定义一组权限,如读取,写入或执行权限,这些权限可以在组内的用户之间共享。还可以可以将用户添加到现有的用户组以利用其授予的权限。

Linux两种用户组

任何用户都必须依赖一个用户组才能存在,同时一个用户可以属于多个组。

  1. 主要组(primary group)- 是用户创建文件时用于设置文件权限的组。通常,主组的名称与用户的名称相同。每个用户必须属于一个主要组;
  2. 附加组(attached group)- 用于向一组用户授予某些特权一个用户可以同时属于多个附加组。

Linux创建新用户

Linux下可以使用useradd或adduser(这个暂时没有搞清楚)命令来建立用户帐号和创建用户的起始目录,使用权限是超级用户,非root用户执行useradd 需临时调权限,前面加sudo。

创建新用户命令

1
useradd [参数] username

useradd命令参数

-g : 指定用户所属gid(主要组)

-G : 指定用户所属的groups(附加组)

-r : 建立一个系统帐号(就有啥用不知道)

-p : 指定新用户的密码,不指定后面会要求输入

-e : 指定账号的失效日期,日期格式为MM/DD/YY,例如06/19/2021。缺省表示永久有效

-u : 指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499

Linux删除用户

linux用户的相关数据包含如下几项:

  1. 用户配置文件( /etc/passwd) 中;
  2. 用户密码文件(/etc/shadow )中;
  3. 用户所属组记录文件 (/etc/group )中;
  4. 组配置文件( /etc/gshadow )中;
  5. 用户个人文件, /home/username, /var/spool/mail/username。

使用以下命令即可移除上述所有信息:

1
userdel -r username

列出用户所属的组

有多种方法可以找出用户所属的组,一种方法是使用 cat , less 或 grep 这些命令列出这些文件的内容。另一个更简单的选择是使用一个特定的命令。

groups命令

在没有参数的情况下执行时,该命令将打印当前登录用户所属的所有组的列表。

要获取特定用户所属的所有组的列表,可以使用groups username

使用id 命令

该命令将显示用户名 (uid) ,用户的主要组 (gid) 和用户的附加组 (groups),如果省略用户名,则显示当前用户的信息。

要仅打印用户和组名称而不打印用户 ID 和组 ID ,请使用该 -n 选项,选项 -g 将仅打印主要组, 选项 -G 打印所有组。

Linux添加用户组

还在研究中,涉及权限分配问题

几种管理文件说明

用户管理文件,记录系统的所有用户(/etc/passwd)

1
2
3
4
5
6
7
8
9
10
root:x:0:0:root:/root:/bin/bash
1 2 3 4 5 6 7
| | | | | | |
| | | | | | |--用户默认使用的shell
| | | | | |--用户家目录
| | | | |--用户的注释信息
| | | |--用户主要组id(gid)
| | |--用户id(uid)
| |--密码占位符,非真密码
|--用户名

用户密码文件,记录各个用户的密码的md5加密(/etc/shadow)

1
2
3
4
5
6
7
8
9
10
11
root:$xxxxxxx/:2333:2333:2333:7:空白:空白:空白
1 2 3 4 5 6 7 8 9
| | | | | | | | |--保留字段,目前为空
| | | | | | | |--用户过期日期(单位/天),从1970年的1月1日至今天数
| | | | | | |--在口令过期之后多少天禁用此用户
| | | | | |--提前多少天警告用户口令将过期
| | | | |--两次修改口令间隔最多的天数
| | | |--两次修改口令间隔最少的天数
| | |--上次修改密码的时间(单位/天),自1970年01月01日至今天数
| |--用户密码,如果密码添加“!!”表示禁用该用户
|--用户名(对应/etc/passwd文件内的用户名)

用户所属用户组的记录文件(/etc/group)

1
2
3
4
5
root:x:0:root
| | | |--额外组(可以多个用“,”隔开)
| | |--组ID(GID)
| |--组密码占位符
|--组名

组配置文件,记录组的一些信息(/etc/gshadow)

1
2
3
4
5
root:空白:空白:root
| | | |--以逗号分隔的小组成员
| | |--以逗号分隔的组管理员
| |--加密的密码
|--组名