Linux-账号管理
用户账号管理
用户账号概述
用户账号的常见分类
- 超级用户:拥有至高无上的权限。root uid=0 gid=0 权限最大。
- 普通用户:权限受到限制的用户。1000-65535 做一般权限的系统管理,权限有限。
- 程序用户:不登录的用户 系统默认的情况。1=<uid<999 为了提升系统安全性,为了支持所对应服务对系统资源的使用,不能用于登录系统或管理系统。
UID
用户标识 0代表账号为系统管理员,1-999代表系统账号,1000-6000则是一般使用者。
账号文件 /etc/passwd详解
/etc/passwd 是 Linux 系统中存储用户账户信息的关键文件,所有用户(包括系统用户)的基本信息都记录在此。该文件为纯文本格式,全局可读但只有 root 用户可写。
字段结构(共7个字段,用冒号分隔)
| 序号 | 字段名 | 说明 |
|---|---|---|
| 1 | 用户名 | 用户登录名(如 root, ftp 等) |
| 2 | 密码占位符 | 历史遗留字段,现代系统用 x 表示密码存储在 /etc/shadow 中 |
| 3 | UID | 用户ID: - 0 = root - 1-999 = 系统用户 - 1000+ = 普通用户 |
| 4 | GID | 主组ID,对应 /etc/group 中的组 |
| 5 | GECOS | 注释字段,通常包含用户全名、联系方式等信息 |
| 6 | 家目录 | 用户登录后的初始工作目录 |
| 7 | 登录Shell | 用户默认shell(如 /bin/bash), /sbin/nologin 表示禁止登录 |
密码数据库文件 /etc/shadow详解
/etc/shadow 是 Linux 系统的密码数据库文件,存储所有用户的加密密码及安全策略信息。相比 /etc/passwd,该文件具有以下特性:
- 仅 root 用户可读写
- 采用更安全的存储机制
- 包含密码时效控制参数
字段结构(9个字段,冒号分隔)
| 序号 | 字段名 | 格式说明 | 特殊值含义 |
|---|---|---|---|
| 1 | 用户名 | 与/etc/passwd对应 | - |
| 2 | 加密密码 | 格式:$id$salt$hash (id=1-MD5, 5-SHA256, 6-SHA512) | !=锁定账户 *=服务账户 |
| 3 | 最后修改日期 | 从1970-1-1起的天数 | 0=下次登录必须修改密码 |
| 4 | 最小修改间隔 | 从第 3 字段起,多长时间之内不能修改密码 | 0=无限制 |
| 5 | 密码有效期 | 距离第 3 字段多长时间内需要再次变更密码 | 99999=永不过期 |
| 6 | 密码过期前告警 | 距离密码有效期的前 n 天告警 | 默认7 |
| 7 | 密码过期后宽限期 | 密码过期后仍允许登录的天数 | 空=立即禁用 0=过期后禁用 |
| 8 | 账户过期日期 | 从1970-1-1起的天数 | 空=永不过期 |
| 9 | 保留字段 | 未使用 | - |
字段详解
[root@localhost ~]#head -1 /etc/shadow
root:$6$9w5Td6lg$bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoomff9isV1PzdcXmixzhnMVhMxbvO:15775:0:99999:7:::1.用户名 同 /etc/passwd 文件的用户名有相同的含义。
2.加密密码 这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。 注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 "!"、"" 或 "x" 使密码暂时失效。 所有伪用户的密码都是 "!!" 或 "",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。
3.最后一次修改时间 此字段表示最后一次修改密码的时间,可是,为什么 root 用户显示的是 15775 呢? 这是因为,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 root 账号在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用户密码。 那么,到底 15775 代表的是哪一天呢?可以使用如下命令进行换算:
[root@localhost ~]# date -d "1970-01-01 15775 days"
2013年03月11日 星期一 00:00:00 CST4.最小修改时间间隔 最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。 此字段是为了针对某些人频繁更改账户密码而设计的。
5.密码有效期 经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。 该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
6.密码需要变更前的警告天数 与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。 该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。
7.密码过期后的宽限天数 也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。 比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
8.账号失效时间 同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用! 该字段通常被使用在具有收费服务的系统中。
9.保留 这个字段目前没有使用,等待新功能的加入。
添加用户账号
useradd
useradd 是 Linux 系统中用于创建新用户账户的核心工具,会同时更新以下文件:
/etc/passwd/etc/shadow/etc/group/etc/gshadow- 用户家目录(可选)
基本语法
useradd [选项] 用户名选项
| 选项 | 作用描述 |
|---|---|
-c "备注" | 设置用户备注信息(通常为全名) |
-d 目录 | 指定家目录路径(默认 /home/用户名) |
-e 日期 | 设置账户过期日期(格式:YYYY-MM-DD) |
-f 天数 | 密码过期后宽限天数(0=立即禁用,-1=禁用此功能) |
-g 主组 | 指定主用户组(GID或组名) |
-G 附加组 | 指定附加用户组(逗号分隔) |
-m | 自动创建家目录(配合 -k 可指定模板目录) |
-M | 不创建家目录(适用于服务账户) |
-N | 不创建与用户同名的用户组 |
-p 密码 | 设置加密后的密码(建议用 passwd 命令替代) |
-r | 创建系统账户(UID范围 1-999) |
-s shell | 指定登录shell(如 /bin/bash,/sbin/nologin 禁止登录) |
-u UID | 手动指定用户ID |
配置文件
/etc/default/useradd 定义默认参数:
GROUP=100 # 默认起始GID
HOME=/home # 家目录位置
INACTIVE=-1 # 密码过期宽限期。-1表示永久有效,0表示失效
EXPIRE= # 默认过期日期
SHELL=/bin/bash # 默认shell
SKEL=/etc/skel # 家目录模板注意事项
- 创建用户后必须用
passwd设置密码 - 使用
-p选项时需提供 已加密 的密码(可通过openssl passwd生成) - 生产环境中建议使用
-e设置服务账户过期时间 - 删除用户时如需移除家目录,应使用
userdel -r
用户账号的初始配置文件
文件来源
新建用户账号时,从/etc/skel/目录中复制而来
主要的用户初始配置文件:
- ~/.bash_profile:每次登录时执行
- ~/.bashrc:每次进入新 bash 环境时执行
- ~/.bash_logout:每次退出登录时执行
组账号管理
组账号概述
| 类型 | 作用 | 配置文件 | 关键命令 |
|---|---|---|---|
| 用户 | 系统使用者身份标识 | /etc/passwd | useradd, usermod, userdel |
| 组 | 用户集合,用于共享权限管理 | /etc/group | groupadd, groupmod, groupdel |
| 密码 | 认证凭据(加密存储) | /etc/shadow | passwd, chage |
| SELinux | 增强安全策略(可选) | /etc/selinux/config | semanage, chcon |
组类型
- 主组(Primary Group):用户创建文件时默认所属组
- 附加组(Supplementary Group):用于额外权限分配(如
sudo,docker)
组账号文件
- /etc/group:保存组账号基本信息
- /etc/gshadow:保存组账号的密码信息(较少使用)
