FChao
发布于 2026-03-31 / 10 阅读
0
0

RHCSA/HCIA④:用户管理

1、用户的分类

用户的分类依据:用户的UID号

UID是用户的身份标识符,系统识别用户是根据UID进行识别,而不是根据用户名,每一个用户都有一个用户ID,一个用户对应一个UID

通过id 用户名可以查看一个用户的UID

  • 超级管理员用户(特权用户):uid为0的用户才是超级管理员

  • 系统的内置用户(服务用户):uid 1 - 200,201 - 999 的用户是系统的服务用户,用于运行服务,通常不可登录

  • 人为创建的用户(普通用户):uid 1000 - 60000 是普通用户

  • 新建的用户的UID是当前的最大UID+1,当用户被删除时,如果刚好这个用户就是UID最大的用户,那么下个用户就会继续沿用这个UID,这会造成权限和日志的混乱,应当避免这种情况。

2、用户相关信息文件

/etc/login.defs

定义了 Linux 系统在创建用户时,用户 ID (UID) 的分配范围和规则

  • UID_MIN 1000: 普通用户起始 UID

  • UID_MAX 60000: 普通用户最大 UID

  • SYS_UID_MIN 201: 系统用户起始 UID

  • SYS_UID_MAX 999: 系统用户最大 UID

    • 1-200 通常预留给系统底层极其重要的预设账户

  • SUB UID指的是系统会给每个普通用户分配一大段(默认 65536 个)外部真实的 UID(从 100000 开始),然后容器里的 UID 会“映射”到这些高位 UID 上

/etc/passwd

用户的信息文件,保存UID和用户名之间一一对应的映射关系,每一行都是代表一个用户

root:x:0:0:root:/root:/bin/bash

  • root:用户名

  • x:密码占位符,占位符指的是,在该用户登录的时候是否需要验证密码,如果x不存在则不需要验证密码

  • 0:第一个0 表示的是该用户的UID,也就是user id

  • 0:第二个0 表示的是该用户的GID,也就是用户所属的组(指的是私有组)的group id

  • root:指的是用户的描述信息,通常在欢迎屏幕上显示

  • /root:指的是用户的家目录,也就是用户登录操作系统后所在的位置

  • /bin/bash:指的是用户登录操作系统后执行的第一个程序,通常是shell程序,因此也将该栏位称为登录shell,如果该项是/bin/bash 表示该用户可以登录;如果该项是/sbin/nologin 表示该用户不能登录

  • 用户不能登录不代表不能使用;该用户无法登录操作系统,可以作为服务的运行用户,例如vsftpd的服务,可以交给ftp的用户来运行,如果将来该服务发生缺陷导致被入侵攻击,攻击者也只会拿到ftp这个用户的权限,而不会得到root用户的权限;通过服务用户来运行服务,可以极大的保证服务器的安全

/etc/shadow

用户的密码文件

alice:$6$KS6Or9l/vox7QjUs$Yvv6TiAvvfzw7Ew1YIDAn39y0UYQsE0DVByGHWQRTkDWWCjTiw.XU1B.lukSLX2kQVnusqElfe30/hgAErQBV/:19918:0:99999:7:2:19998:

详解:

  • alice 用户名

  • $6$KS6 用户的密码(密文)

    • $6$ 表示密码使用sha512 算法进行加密(主流发行版本,默认使用该方式)

    • openssl passwd -6 密码 对密码进行sha512加密

    • $5$ 表示密码使用sha256算法进行加密

    • $1$ 使用md5加密

    • $y$ 使用sm3进行加密

    • !/* 表示用户从来没有设置过密码

    • 如果密码的前面有!则表示该用户已经被锁定

    • 在Linux中所谓的锁定用户就是将用户的加密密码字符串前加上了感叹号,加密算法无法识别以 ! 开头的哈希值,因此用户不能登录成功;可以使用root 切换到这个用户

  • 19918: 用户上一次修改密码的时间,表示的是从1970-01-01经过19918天是那一年那一月那一日?

    • date +%F -d '1970-01-01 19918days' 计算从 1970-01-01 开始往后数 19918 天的日期

  • 0:密码的最短有效期,密码修改后​​必须经过多少天才能再次修改,​​0表示没有限制

  • 99999: 密码的最长有效期,99999表示没有限制也就是一直可以使用

  • 7:表示密码到期前的提醒天数(警告天数)

  • 2:密码到期后,还可以登录的宽限天数

  • 19998: 密码的失效时间,指的也是从1970-01-01 经过19998天的日期

3、用户组和信息文件

在Linux中,用户组分为两类:

  • 私有组(属组),在创建一个用户的时候,如果没有指定组,会同时创建一个同名的私有组作为它的主组,每个用户在任何时候,一定有且只有一个“主组”,这个唯一的“主组”可以是一个私有组,也可以是一个公共组

  • 附加组(公共组),用户可以不加入或加入多个附加组以获得权限

/etc/group

test:x:1006:ituser

  • test:用户组名

  • x:表示用户组的密码占位符(有x表示登录用户组需要密码;gpasswd创建组密码,newgrp登录用户组,同样使用exit退出)

  • 1006:用户组的ID,GID

  • ituser:可添加,使用逗号分隔,表示这个用户是test组内的成员(test组是ituser用户的附加组),如果这个组是某个用户的私有组,那么这个成员不会显示

比如root用户的私有组是root组,那么在/etc/group文件中root组后面不会有root用户

/etc/gshadow

ituser:$6$a9YJYMaL2/Fe/sev$wMq6gtdKr9J8yPjx57Mvm9NPqZRdYCpivUBVgEaoYKMhsGf.JQ2Wmjr2EMIvVsAuiUwte2n8tv0S/Z082e7FY0:test:user03

1.第一列 用户组名字

2.第二列 组的加密后的密码,!代表无密码。组密码一般给用户临时加入组使用。

3.第三列 组的管理员,可对这个组进行添加成员和删除成员

4.第四列 组内的成员

4、用户管理命令

useradd 创建用户

useradd [选项] 用户名

-u 指定UID

-g 指定GID

-G 设置附加组

-c 指定描述信息

-d 指定用户的家目录,一般自动创建而不是手动指定

-s 指定登录的shell

-o 允许再创建一个uid相同,用户名不同的用户

当我们创建一个新用户的时候,以下六个文件都会发生变动

  1. /etc/passwd 用户 的UID与用户名映射关系文件

  2. /etc/shadow 用户密码文件

  3. /etc/group 用户组文件

  4. /etc/gshadow 组的密码

  5. /home/username 用户的家目录

  6. /var/spool/mail/username 用户的邮箱文件

userdel 删除用户

userdel 用户名

系统会删除 /etc/passwd、/etc/shadow、/etc/group 和 /etc/gshadow 文件中关于该用户的所有条目。从此系统不再认识这个用户名。

userdel -r 用户名

除了删除账号信息外,系统还会递归地删除该用户的家目录以及邮件存储目录(/var/mail/用户名)

usermod 修改用户

usermod [选项] 用户名

-c -d -s -u -g -G 的含义与useradd相对应

-c <备注>:修改用户账号的备注信息。

-d <家目录>:修改用户的家目录。

-e <日期>:修改账户的有效期限(格式:YYYY-MM-DD)。

-g <用户组>:修改用户所属的主用户组。

-aG <用户组>:添加一个附加组(append Group)

-G <用户组列表>:修改用户所属的附加用户组(多个组用逗号分隔)。

-l <新用户名>:修改用户的登录名,只修改/etc/passwd等信息文件,不修改家目录等其它内容

-L:锁定用户账户,也就是在/etc/shadow文件中的密码处加上一个!

-m:配合 -d 选项使用,将原家目录的内容移动到新的家目录。

-s <Shell>:修改用户登录使用的 Shell。

-u <UID>:修改用户的 UID。

-U:解锁用户账户,也就是在/etc/shadow文件中将新添加的!进行删除

chage 修改密码属性

相当于修改 /etc/shadow 文件

chage [选项] 用户名

-l (list) 查看用户的密码过期详细信息(最常用)

-d (lastday) 修改最近一次修改密码的时间(设置为 0 可强制下次登录改密)

-m (mindays) 密码最短使用天数(在此期间内不能改密)

-M (maxdays) 密码最长有效天数(过期后必须改密)

-W (warndays) 密码过期前的警告天数

-I (inactive) 密码过期后的宽限期(非活动天数,过期多久后账号被锁)

-E (expiredate) 账号失效日期(无论密码是否过期,账号都不能用)

例:

chage -d 0 test 强制下一次登录账号的时候更新密码,0代表天数0即立即修改

chage -E ’2025-12-01‘ test test账号在2025 12 01过期

chage -m 3 -M 7 -W 1 -E ’2025-12-01‘ 修改test用户,修改密码最短期限为3天,密码最长期限为7天,到期前1天警告,2025-12-01 失效

5、用户组管理命令

newgrp 登录组

在当前终端会话中开启了一个新的子 Shell,临时切换“主组”

当输入 exit 退出时,回到原来的主组身份

groupadd 创建用户组

groupadd 组名

-g 指定组的GID,在不指定时同样按照gid最大值增加

groupdel 删除用户组

groupdel 组名

无法删除私有组,只能够用userdel 去删除

groupdel -f 组名

强制删除一个组,会导致没有主组的用户出现权限问题,不建议使用

groupmod 修改组本身属性

-g 指定gid

-n 修改新的组名

-p 设置组的密码,需要使用密文

gpasswd 修改组密码/管理组成员

普通用户也可以使用 gpasswd,他们只能管理自己拥有管理员权限的组

gpasswd -M user2,user3,user4,user5 itgroup 同时添加多个用户

gpasswd 组名 修改组的密码

-a 添加单个用户到组,gpasswd -a 用户 用户组

-d 删除用户,gpasswd -d 用户 用户组

-A 设置组的管理员 (组的管理员可以将用户加入到组)

-r 删除组的密码

groupmems 管理组成员

默认情况下只能root用户执行

-g 对哪个用户组操作

-a 添加用户

-d 删除用户

-l 列出组内的成员

-p 一次性删除组内的所有成员

例:

groupmems -a 用户 -g 用户组 将用户添加到组内

groupmems -d 用户 -g 用户组 从组内删除用户

groupmems -p -g 用户组 将用户组的所有成员都清空掉

groupmems -l -g 用户组 查看用户组内的所有成员


评论