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相同,用户名不同的用户
当我们创建一个新用户的时候,以下六个文件都会发生变动
/etc/passwd用户 的UID与用户名映射关系文件/etc/shadow用户密码文件/etc/group用户组文件/etc/gshadow组的密码/home/username用户的家目录/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 用户组 查看用户组内的所有成员