
前言刚学 Linux 是不是一摸到useradd、/etc/passwd就脑袋发懵 分不清 UID 和 GID、分不清主组附加组改完用户登录直接报错、权限乱套、家目录消失…… 别慌本篇结合课堂完整实操笔记全程大白话讲解 超多实操代码 红标高危坑点搭配趣味图解逻辑零基础看完就能独立完成服务器用户创建、权限分配、密码安全管控新手直接收藏当工具书一、灵魂提问Linux 用户和组到底是干嘛的1. 用户服务器里每个人的专属身份 IDLinux 里文件、程序、登录操作全部绑定用户身份人类看用户名系统内核只认一串数字 UID三类用户清晰对照表表格用户类型典型账号UID 区间核心特性适用场景至尊管理员 rootrootUID0服务器所有权限无限制想删啥删啥系统初始化、创建账号、修改核心配置文件后台服务专用用户nginx、postfix201~999禁止登录终端shell 固定/sbin/nologin运行网站、邮件等后台服务隔绝风险普通日常用户jhl、operator1000~60000权限受限仅能读写自家 /home 家目录日常开发、测试、普通运维登录冷知识彩蛋✨用户名只是给人看的 “外号”系统底层判断权限只认 UID 数字改用户名不影响权限2. 用户组批量分配权限的 “组队工具”组 一堆用户的集合给组开权限组内所有人自动共享权限不用逐个修改用户 分为主组主要组、附加组补充组两种区别一眼看懂主组 VS 附加组对比表表格分组类型硬性规则存储文件关键特点主组一个用户有且仅有 1 个/etc/passwd第四列 GID用户新建文件 / 文件夹默认归属自己的主组附加组一个用户能加入 N 个/etc/group最后一列成员列表临时赋予额外权限不会改变新建文件默认属组举个生活化例子 用户 operator1 主组 operator1额外加入 wheel 管理员附加组。平时写文件归属 operator1 组需要执行 sudo 管理员命令时依靠 wheel 组权限放行两全其美3. 两大核心配置文件存储全服务器用户 / 组数据 /etc/passwd所有用户基础信息库每行 7 段内容冒号:分割模板name:password:UID:GID:GECOS:directory:shell用户名:密码占位符x:UID:GID:备注信息:家目录:登录shell示例jhl:x:1000:1000:software admin:/home/jhl:/bin/bash逐段拆解jhl登录账号名x密码不存这里加密密码单独存/etc/shadow1000UID 用户数字编号1000GID 主组数字编号software admin用户备注姓名、岗位/home/jhl登录默认文件夹/bin/bash可交互登录终端服务用户统一为/sbin/nologin /etc/group全系统用户组信息库每行 4 段冒号分隔模板group_name:password:GID:user_list组名:占位符x:GID:组内附加用户示例wheel:x:10:jhl,operator1wheel管理员 sudo 专属组10GID 组编号jhl,operator1组内附加成员多用户用逗号隔开二、4 条入门查询命令✨先学会看用户再动手创建新手不要上来就创建账号先学会查看在线用户规避操作失误1. whoami查看当前终端是谁[rootcentos7 ~]# whoamiroot简单粗暴一眼确认当前操作身份避免误删文件2. who /w查看当前系统中所有终端上登录的用户以及用户登录的时间。# who 极简输出只显示用户、终端、登录时间 who # w 完整版附带登录IP、空闲时长、正在运行的程序 w3. users查看当前系统中所有终端上登录的用户名。4. id 万能查询命令排查权限神器一键输出用户 UID、主组、所有附加组排错必用语法id用户名三、本地用户全套管理增删改查实操 超多避坑预警1. useradd 创建用户# 用户1 自动生成同名主组、家目录/home/user01、可登录bash终端[rootcentos7 ~]# useradd user01[rootcentos7 ~]# grep user01 /etc/passwduser01:x:1003:1003::/home/user01:/bin/bash# 用户2[rootcentos7 ~]# useradd -u 8888 -d /opt/user02 -c user for software manage -g wheel -s /sbin/nologin user02# -u uid# -d 用户的家目录# -c 描述信息# -g 用户的主组# -s 用户shell程序[rootcentos7 ~]# grep user02 /etc/passwduser02:x:8888:10:userforsoftware manager:/opt/user02:/sbin/nologin[rootcentos7 ~]# ls -d /opt/user02//opt/user02/# 创建一个没有密码的账户该用户在图形化界面中可以直接登录[rootcentos7 ~]# useradd -p tom自定义参数创建企业运维标准写法参数速查表参数功能说明-u手动指定 UID 编号-d自定义家目录路径-c填写用户岗位 / 姓名备注-g指定用户主组-s修改登录 shell⚠️新手巨坑 1家目录模板来源 /etc/skel新建用户家目录里的.bashrc、.bash_profile等隐藏配置全部复制自/etc/skel模板文件夹 一旦误删/etc/skel新用户登录直接弹出bash-4.2$空白提示符体验直接崩盘新手巨坑 2复制目录不加斜杠疯狂嵌套文件夹手动恢复丢失家目录时千万不要写cp /etc/skel /home/zhangsan错误后果生成/home/zhangsan/skel嵌套文件夹配置全部藏在子目录里 ✅正确写法末尾必须带/cp -r /etc/skel/ /home/zhangsan2. usermod 修改用户全部属性场景 1修改 UID、迁移家目录# -m 参数自动迁移原有文件到新家目录缺一不可[rootcentos7 ~]# usermod user02 -u 1008 -md /home/user02 -s /bin/bash[rootcentos7 ~]# grep user02 /etc/passwduser02:x:1008:10:userforsoftware manager:/home/user02:/bin/bash[rootcentos7 ~]# ls -d /home/user02//home/user02/[rootcentos7 ~]# su - user02Last login: Mon Nov717:08:58 CST2022on pts/2[user02centos7 ~]$场景 2给用户添加附加组重中之重# -a append追加不加-a会直接清空原有所有附加组[rootcentos7 ~]# usermod -aG user01 user02[rootcentos7 ~]# id user02uid1008(user02)gid10(wheel)groups10(wheel),1003(user01)致命踩坑提醒去掉-a只写usermod -G用户原有附加组全部清空权限直接丢失场景 3锁定 / 解锁账号密码# 锁定账号正确密码也无法登录[rootcentos7 ~]# usermod -L laowang[jhlcentos7 ~]$su- laowang Password: su: Authentication failure# 解锁恢复密码登录权限[rootcentos7 ~]# usermod -U laowang# 输入正确的密码登录[jhlcentos7 ~]$su- laowang Password:[laowangcentos7 ~]$场景 4限定用户shell# 默认情况下root用户可以切换到任何用户而且不需要密码[rootcentos7 ~]# su - laowang上一次登录二7月1811:19:14 CST 2026tty1 上[laowangcentos7 ~]$ 登出# 更改用户shell为 /sbin/nologin 不可登录模式[rootcentos7 ~]# usermod -s /sbin/nologin laowang[rootcentos7 ~]# su - laowang上一次登录二7月1811:21:23 CST 2026pts/0 上 This account is currently not available.# 将用户shell改为/bin/bash[rootcentos7 ~]# usermod -s /bin/bash laowang场景 5更改用户密码# 更改jhl的密码与laowang一致[rootcentos7 ~]# grep laowang /etc/shadowlaowang:$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/:19304:0:99999:7:::[rootcentos7 ~]# usermod -p $6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/ jhl# 删除用户密码[rootcentos7 ~]# usermod -p jhl场景 6设置账户过期等效于passwd -e# 设置账户过期时间为过去的某一个日期[rootcentos7 ~]# usermod -e 2029-7-18 laowang# 或者[rootcentos7 ~]# chage -E 2029-7-18 laowang3. userdel 删除用户# 正常删除仅删除账号保留家目录文件推荐防止误删业务数据[rootcentos7 ~]# useradd user03[rootcentos7 ~]# userdel user03# -r 参数账号家目录邮件全部清空[rootcentos7 ~]# userdel -r user03# 强制删除[rootcentos7 ~]# userdel user02userdel: user user02 is currently used by process9071[rootcentos7 ~]# id user02uid1008(user02)gid10(wheel)groups10(wheel),1003(user01)# 尽量不要强制删除要找到无法删除的原因[rootcentos7 ~]# userdel -f user02userdel: user user02 is currently used by process9071[rootcentos7 ~]# id user02id: user02: no such user⚠️重要提醒用户正在登录、后台有进程运行时无法正常删除账号不要强行加-f强制删除先找到并关闭对应进程实操完整脚本可直接复制运行需求创建 operator1 用户完成全套配置验证# 1. 创建基础用户[rootcentos7 ~]useradd operator1# 2. 查看用户UID、所有组信息[rootcentos7 ~]id operator1# 3. 查看/etc/passwd内用户配置行[rootcentos7 ~]grep operator1 /etc/passwd# 4. 设置登录密码redhat[rootcentos7 ~]passwd operator1# 5. 修改用户UID为1088[rootcentos7 ~]usermod-u1088operator1# 6. 添加用户描述备注[rootcentos7 ~]usermod-cOperator Oneoperator1# 7. 加入wheel管理员附加组[rootcentos7 ~]usermod-aGwheel operator1# 8. 查看wheel组内所有成员[rootcentos7 ~]grep wheel /etc/group# 9. 删除用户并清理家目录[rootcentos7 ~]userdel-roperator1拓展知识点手动从零创建用户面试高频考点不使用 useradd 命令手动修改 4 个系统文件完整新建 zhangsan 账号编辑/etc/passwd末尾新增用户行编辑/etc/group新建同名主组编辑/etc/shadow粘贴加密密码字符串复制 skel 模板到家目录修改文件归属用户组# 1 添加账户[rootcentos7 ~]# vim /etc/passwd# 最后一行添加如下内容注意uid要在原有的基础上增加1zhangsan:x:1002:1002::/home/zhangsan:/bin/bash# 2 添加组[rootcentos7 ~]# vim /etc/group# 最后一行添加如下内容zhangsan:x:1002:# 3 添加密码[rootcentos7 ~]# vim /etc/shadow# 最后一行添加如下内容zhangsan:$6$FgUNKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::# 4 准备家目录[rootcentos7 ~]# cp -r /etc/skel/ /home/zhangsan# 修改zhangsan家目录所属有zhangsan用户和组[rootcentos7 ~]# chown -R zhangsan:zhangsan /home/zhangsan[rootcentos7 ~]# ll -d /home/zhangsandrwxr-xr-x.16zhangsan zhangsan40967月1914:00 zhangsan# 测试[rootcentos7 ~]# ssh zhangsanlocalhost三大登录故障一键修复方案故障 1登录只显示bash-4.2$无正常彩色提示符诱因系统全局配置/etc/bashrc丢失 / 改名 修复还原文件重新打开终端即可恢复正常提示符提示符如下bash-4.2$模拟[rootcentos7 ~]# mv /etc/bashrc{,.ori}[rootcentos7 ~]# bashbash-4.2#原因nologin shell打开的时候执行 /etc/bashrc 配置。恢复bash-4.2# mv /etc/bashrc{.ori,}bash-4.2# bash[rootcentos7 ~]#故障 2登录报错Could not chdir to home directory诱因用户家目录被误删 修复复制 skel 模板修改文件夹归属用户组故障[rootcentos7 ~]# ssh zhangsanlocalhostzhangsanlocalhosts password: Activate the web console with: systemctlenable--nowcockpit.socket Last login: Fri Jul1914:13:472024from ::1 Could not chdir to home directory /home/zhangsan: No suchfileor directory -bash-4.2$模拟[rootcentos7 ~]# rm -fr /home/zhangsan解决[rootcentos7 ~]# cp -r /etc/skel/ /home/zhangsan[rootcentos7 ~]# chown zhangsan:zhangsan /home/zhangsan故障 3切换用户提示Permission denied无法进入家目录诱因家目录权限过严用户无读写进入权限 修复命令chmod urwx /home/用户名 chown -R 用户:用户主组 /home/用户名故障Could not chdir to home directory /home/zhangsan: Permission denied -bash: /home/zhangsan/.bash_profile: 权限不够模拟[rootcentos7 ~]# chmod u- /home/zhangsan解决[rootcentos7 ~]# chown -R zhangsan:zhangsan /home/zhangsan[rootcentos7 ~]# chmod urwx /home/zhangsan[rootcentos7 ~]# ll -d /home/zhangsandrwx------.3zhangsan zhangsan787月1914:17 /home/zhangsan ------四、用户组全套管理增删改查完整实操1. groupadd 创建用户组# 创建名称为 admin 的组[rootcentos7 ~]# groupadd admin# 创建名称为sysadmin的组组id为2000[rootcentos7 ~]# groupadd sysadmin -g 2000# 验证[rootcentos7 ~]# grep admin /etc/groupprintadmin:x:997: admin:x:1002: sysadmin:x:2000:2. groupmod 修改组名称、GID# 修改组名称[rootcentos7 ~]# groupmod --new-name admins admin# 修改组id[rootcentos7 ~]# groupmod -g 2002 admins# 验证[rootcentos7 ~]# grep admins /etc/groupadmins:x:2002:3. groupdel 删除用户组[rootcentos7 ~]# groupdel sysadmin[rootcentos7 ~]# grep sysadmin /etc/group4. groupmems 精细化管理组内成员不用 usermod单独针对组增删用户适合批量运维[rootcentos7 ~]# groupmems --help用法groupmems[选项][动作]选项 -g,--groupgroupname 更改组 groupname而不是用户的组(只 root)-R,--rootCHROOT_DIRchroot到的目录 动作 -a,--addusername 将用户 username 添加到组成员中 -d,--deleteusername 从组的成员中删除用户 username -h,--help显示此帮助信息并推出 -p,--purge从组中移除所有成员 -l,--list列出组中的所有成员# 添加成员[rootcentos7 ~]# groupmems -g admins -a laowang[rootcentos7 ~]# groupmems -g admins -llaoma[rootcentos7 ~]# id laomauid1000(laoma)gid1000(laoma)组1000(laoma),10(wheel),2002(admins)# 删除成员[rootcentos7 ~]# groupmems -g admins -d laowang[rootcentos7 ~]# groupmems -g admins -l# 清空组中所有成员[rootcentos7 ~]# groupmems -g admins -a laoli[rootcentos7 ~]# groupmems -g admins -p组管理练习完整命令合集需求创建 developer 组修改参数、添加用户、最后删除# 1. 创建developer组指定GID2000groupadd-g2000developer# 2. 修改组名developersGID改为3000groupmod-g3000--new-name developers developer# 3. 创建developer1用户加入developers附加组useradddeveloper1usermod-aGdevelopers developer1# 4. 将developer1从developers组移除groupmems-gdevelopers-ddeveloper1# 5. 删除空组developersgroupdeldevelopers五、密码安全管控/etc/shadow 加密文件 chage 时效配置1. /etc/shadow 加密密码核心文件高危提醒该文件权限严格仅 root 管理员可读普通用户无任何查看权限存放所有用户加密登录密码每行包含一个登录用户信息以冒号分隔九个域。示例[rootcentos7 ~]# grep jhl /etc/shadowjhl:$6$m0OgWyIu$P2TF1pB8MO...J3LopEUdhmp/Ir/:19300:0:99999:7:::解释如下login name用户登录名。encrypted password加密的密码。date of last password change上一次密码更改日期以距离1970-1-1过去的天数表示。设置为0强制用户下次登录时更改密码。minimum password age最小密码生命周期。设置为0密码可以随时更改。maximum password age最大密码生命周期。password warning period密码过期前提前多少天告警。设置为0不提示过期。password inactivity period密码过期后非活跃天数在期间密码仍可以使用。account expiration date账户过期时间以距离1970-1-1过去的天数表示。reserved field保留域。2. chage 密码生命周期管理服务器安全加固必备# 查看用户密码信息[rootcentos7 ~]# chage -l jhl最近一次密码修改时间 7月18,2026密码过期时间 从不 密码失效时间 从不 帐户过期时间 从不 两次改变密码之间相距的最小天数 0 两次改变密码之间相距的最大天数 99999 在密码过期之前警告的天数 7# 修改用户密码要求,100天后密码自动过期[rootcentos7 ~]# chage -M 100 jhl[rootcentos7 ~]# chage -l jhl最近一次密码修改时间 7月18,2026密码过期时间 9月16,2026密码失效时间 从不 帐户过期时间 从不 两次改变密码之间相距的最小天数 0 两次改变密码之间相距的最大天数 100# 最少10天才能改密码[rootcentos7 ~]# chage -m 10 jhl[rootcentos7 ~]# chage -l jhl最近一次密码修改时间 7月18,2026密码过期时间 9月16,2026密码失效时间 从不 帐户过期时间 从不 两次改变密码之间相距的最小天数 10 两次改变密码之间相距的最大天数 100 在密码过期之前警告的天数 7# 用户下次登录强制重置密码[rootcentos7 ~]# chage -d 0 jhl# 验证[rootcentos7 ~]# ssh jhllocalhostjhllocalhosts password: You are required to change your password immediately(root enforced)Last login: Tue Nov1811:13:512026from localhost WARNING: Your password has expired. You must change your password now and login again!更改用户 jhl 的密码 。 为 jhl 更改 STRESS 密码。 当前UNIX 密码# 设置用户密码过期时间是过去的一个时间以便确保用户密码过期登录时强制用户更改密码# 设置为1确保密码很久未改动[rootcentos7 ~]# chage -d 1 jhl# 设置用户账户过期时间是过去的一个时间以便锁定用户账户[rootcentos7 ~]# chage -E 1970-1-1 jhl用户账号管控需求速查表业务需求对应命令正常设置登录密码passwd 用户名复制他人加密密码禁止使用 passwd 交互usermod -p “加密字符串” 用户名清空密码免密登录passwd -d 用户名锁定密码禁止登录usermod -L / passwd -l解锁锁定账号usermod -U / passwd -u永久禁止用户登录终端usermod -s /sbin/nologin用户登录强制修改密码chage -d 0高危拓展UID0 万能权限账号⚠️root 账号之所以拥有全服务器权限核心原因是 UID 固定为 0任意用户 UID 改为 0就能获得和 root 一模一样的最高权限两种实现方式手动编辑/etc/passwd修改用户 UID 字段为 0useradd 创建时添加参数-o -u 0生产环境严禁使用属于服务器高危后门运维红线增加一个 uid 为 0 的用户方法一[rootcentos7 ~]# vim /etc/passwd# 将自己的用户id该为0此时jhl用户可以行使root权限了jhl:x:0:1000:jhl:/home/jhl:/bin/bash方法二[rootcentos7 ~]# useradd -o -u 0 jhl[rootcentos7 ~]# id jhluid0(root)gid0(root)组0(root)jhl 和 root 账户是两个不同的账户但是jhl用户获得了root账户权限。六、新手 7 大致命踩坑清单收藏避坑添加附加组忘记-a参数原有附加组全部清空丢失权限复制 /etc/skel 模板末尾不加/生成嵌套文件夹配置失效userdel 删除用户不加-r残留家目录长期占用磁盘空间将用户 shell 改为/sbin/nologin后依旧尝试 su 切换登录PATH、PS1 环境变量仅临时生效重启终端全部重置未写入配置文件持久化创建用户后忘记修改家目录归属登录触发权限报错使用 chage 混淆密码过期、账号过期两个参数安全配置失效七、全文干货总结Linux 识别用户依靠 UID、识别组依靠 GID/etc/passwd存基础账号信息/etc/shadow存放加密密码权限严格管控用户分为 root 管理员、系统服务用户、普通用户三类每个用户仅有 1 个主组可加入多个附加组实现灵活权限分配用户管理核心命令useradd 创建、usermod 修改、userdel 删除组管理对应 groupadd/groupmod/groupdelchage 命令管控密码有效期、账号过期时间是企业服务器安全加固必备操作所有自定义环境变量、用户配置想要永久生效必须写入/etc/profile、/etc/bashrc、~/.bashrc等登录配置文件养成操作前用id、grep验证用户信息的习惯能规避 80% 登录、权限报错