Linux用户管理实战:userdel删除、passwd密码策略与su/sudo切换细节

发布时间:2026/9/9 20:20:09
Linux用户管理实战:userdel删除、passwd密码策略与su/sudo切换细节 刚接手一台 Linux 服务器或者正在准备运维面试的人几乎都会撞上同一个场景团队里有人离职了需要把他在服务器上的账号清掉或者你自己在本地虚拟机里建了一堆测试用户现在想把环境还原干净。这时候你敲下userdel系统却提示userdel: user xxx is currently used by process你切管理员账号执行su又碰到su: authentication failure。问题看似小事真正处理时却涉及用户删除的清理范围、密码策略、切换用户的各种细节牵扯出来的知识点并不少。这篇文章想讲透三件事Linux 删除用户时到底删了什么、没删什么用户密码如何安全地设置、修改和锁定su切换用户和直接登录之间有什么区别以及什么场景下更推荐用sudo。如果你之前只是背过userdel -r user1、passwd user1、su - root这几个命令却不太清楚每条命令背后的行为边界这篇文章值得读完再动手。1. 这篇文章真正要解决的问题Linux 用户管理是系统管理员的基本功也是面试里出现频率很高的一个模块。很多初学者对用户管理的理解停留在“会敲命令”这个层面但实际维护服务器时真正的难点往往出现在命令的副作用上。先说一个最常见的例子。执行userdel删除用户时如果你只是简单敲了userdel zhangsan那么这个用户的主目录、邮件池、临时文件可能仍然残留在系统里。第一次处理生产环境的人很容易因为“命令执行成功”就认为清理完毕结果是磁盘空间被历史文件慢慢占满或者后续新建同名用户时意外读到了上一个用户遗留的敏感文件。再看密码管理。passwd命令看起来简单但密码策略怎么设置、多久改一次、哪些用户不能登录但账号又必须保留这些问题如果没想清楚就会陷入“账号被锁自己也进不去”的尴尬局面。很多线上事故不是命令不会敲而是对密码过期、账号锁定这些状态缺乏预判。最后是切换用户。su和su -只差一个连字符行为却完全不同。前者切换用户后保留当前环境变量后者会加载目标用户的完整登录环境。如果你在一个脚本里用su切到别的用户执行任务却发现自己拿到的 PATH 还是原来的大概率就是少了这个连字符。这篇文章适合三类读者正在学 Linux 基础、准备考证或找运维岗的初学者。已经会在实体机或云服务器上建用户但不确定删除和清理边界的人。写自动化脚本时需要切换用户、设置密码、控制权限的开发者。读完这篇文章你应该能回答删除一个用户时哪些文件该删、哪些不该动忘记密码时如何用 root 重置su切换用户时环境变量发生了什么变化以及怎么设计一个相对安全的用户管理流程。2. 核心概念用户、主目录、密码状态与切换机制在写具体命令之前先把概念理清楚。Linux 里所谓的“用户”并不只是/etc/passwd文件里的一行记录。它至少包含几层数据数据项存储位置作用用户名与 UID/etc/passwd用户的基本映射关系用户密码信息/etc/shadow加密后的密码、过期时间、锁定状态用户组信息/etc/group主组和附加组主目录通常在/home/用户名用户的个人文件和环境配置邮件池/var/mail/用户名本地邮件存储定时任务/var/spool/cron或系统级目录用户自己的 crontab很多面试题喜欢问“/etc/passwd和/etc/shadow有什么区别”其实简单说就是/etc/passwd是所有用户可见的公开信息里面不存真正的密码而是放一个x占位真正的密码哈希和密码策略放在只有 root 和 shadow 组可读的/etc/shadow里。理解这一点你就明白为什么删除用户时不只要看某个文件而要看用户涉及的全部数据。2.1 用户的密码状态passwd命令修改的不只是“密码字符串”还包括密码的过期时间、最短修改间隔、警告时间、失效时间等信息。这些字段存在/etc/shadow中冒号分隔。Linux 密码状态有一个容易混淆的地方/etc/shadow密码字段里如果密码以!开头通常表示账号被锁定如果里是*通常表示该用户不能直接密码登录比如系统服务账号。很多初学者以为锁定账号是“改一下密码”其实usermod -L或passwd -l才是标准做法。2.2 su 与登录 Shell 的区别su是“切换用户”的缩写substitute user它允许你从当前用户切换到另一个用户前提是你知道目标用户的密码或者当前你是 root 不需要密码。su zhangsan的意思是“切换到 zhangsan但保留当前 Shell 的大部分环境变量”su - zhangsan的意思是“模拟 zhangsan 登录系统”会重新加载/etc/profile、~/.bash_profile、~/.bashrc等登录环境文件。从运维实践来看绝大多数场景下应该优先使用su -因为环境变量干净能避免很多“命令找不到”或“执行环境不对”的问题。这个细节后面会专门演示。3. 环境准备与前置条件本文所有命令都在 Linux 系统上验证操作系统发行版不限制。实际验证时不推荐直接在只有一份环境的服务器上反复练习删除用户和切换用户最容易出问题。安全提醒所有命令都应在自己有管理权限的测试环境或云服务器测试机上执行。不要在没有授权的情况下对他人系统执行用户操作。我的建议是准备一台最小化的虚拟机或者使用普通数据盘上的临时目录做演示保证操作前有快照或备份。如果使用云服务器可以提前创建快照。开一台 2C4G 的临时云主机装 CentOS Stream 9 或 Ubuntu 22.04 LTS 都行这套思路和命令在两套系统上的差异并不大。需要准备的权限操作所需权限查看用户信息普通用户可查看部分修改自己的密码普通用户可用passwd修改自己密码修改其他用户密码需要 root 权限删除用户需要 root 权限切换用户需要知道目标用户密码root 切任意用户不需要密码测试时建议使用 Trainee 账号不要用 root 直接反复测试删除操作避免误操作后系统状态不可逆。4. 用户密码管理从修改到策略控制4.1 使用 passwd 修改用户密码Linux 里修改用户密码最常用的是passwd命令。# 修改当前登录用户自己的密码 passwd # 修改指定用户的密码需要 root 权限 sudo passwd zhangsan修改指定用户密码时系统会提示输入新密码两次默认要求密码有一定强度比如不能太短、不能与用户名过于相似。若在脚本里需要非交互式设置密码可以用chpasswd或管道方式。# 非交互设置用户密码适用脚本场景 echo zhangsan:NewPass123 | sudo chpasswd执行chpasswd时它的输入格式是用户名:密码密码会经过加密处理后写入/etc/shadow。这种方式要注意的是命令本身可能出现在 Shell 历史记录中生产环境不建议直接在历史里暴露密码更好的方法是把密码写入权限受限的文件中再用重定向读取。4.2 查看密码状态查看用户密码的详细状态可以执行sudo passwd -S zhangsan输出结果类似于zhangsan P 01/01/2027 0 99999 7 -1字段含义分别为用户名、密码状态P 表示有可用密码L 表示锁定NP 表示无密码、最近修改日期、最少修改天数、最大修改天数、警告天数、不活跃天数。如果想看/etc/shadow文件中的原始结构可以执行sudo cat /etc/shadow | grep zhangsanshadow 文件每一行由 9 个字段组成用户名:密码哈希:最近修改时间:最小修改天数:最大修改天数:警告天数:失效宽限天数:账号过期时间:保留字段4.3 锁定与解锁用户有些时候用户密码不需要删除只需要临时禁止登录。这种情况适合用锁定而不是删除用户。# 锁定用户 sudo passwd -l zhangsan # 解锁用户 sudo passwd -u zhangsan锁定用户也会修改/etc/shadow中密码字段的结构通常是在原有密码哈希前加!。这意味着锁定的本质不是把密码删除而是让密码无法匹配。4.4 强制用户下次登录时修改密码新员工入职时管理员可以先设置一个初始密码然后强制员工首次登录后修改sudo chage -d 0 zhangsanchage -d 0的意思是“将最近一次修改密码的时间设置为 1970 年”这样系统会认为密码已经过期强制用户下次登录时修改密码。查看密码有效期sudo chage -l zhangsan输出内容里会看到“密码过期时间”“密码失效时间”“帐户过期时间”等字段。管理密码不能只靠记命令更要结合公司安全策略设置合理密码周期。5. 删除用户userdel 的完整行为边界删除用户看起来是一个命令的事但它清理数据的方式对系统后续影响很大。5.1 基础删除仅删除用户记录sudo userdel zhangsan这个命令会删除/etc/passwd中的用户记录/etc/shadow中的密码记录/etc/group中只包含该用户的主组记录但它不会删除用户的主目录/home/zhangsan用户的邮件池/var/mail/zhangsan用户的 crontab 定时任务用户在其他目录下拥有的文件这里就是很多初学者最容易踩的坑。命令执行成功后你觉得用户没了但/home/zhangsan目录可能还带着大量项目文件如果后续有新人入职并被赋予zhangsan这个用户名就会直接看到上一任用户遗留的数据。5.2 删除用户并清理主目录和邮件池sudo userdel -r zhangsan-r参数会同时删除用户的主目录和邮件池。这个参数在测试环境很方便但在生产环境必须非常谨慎。如果用户主目录下存在未备份的资料删除后基本无法找回。从稳健性考虑推荐使用以下流程先备份用户主目录和重要数据。再检查该用户是否还有进程在运行。确认无风险后执行userdel -r。5.3 处理“用户正在使用中”的错误删除用户时如果该用户有进程仍在运行系统会提示userdel: user zhangsan is currently used by process 1234这种情况不能强制删除后不管正确的做法是先查看该用户的进程ps -u zhangsan或者pgrep -u zhangsan如果确认这些进程确实需要终止可以执行kill然后重新尝试userdel。sudo pkill -u zhangsan sudo userdel -r zhangsan注意pkill -u zhangsan会杀掉该用户的所有进程操作前必须先确认这些进程不是核心业务进程否则可能造成服务中断。5.4 删除用户前需要检查的几项检查项命令目的用户是否在线who | grep zhangsan避免踢掉正在操作的人用户是否有运行进程ps -u zhangsan避免强制杀进程造成数据损坏用户是否拥有其他目录文件find / -user zhangsan 2/dev/null找出散落在各处的文件用户是否配置了定时任务crontab -l -u zhangsan删除用户后任务会失效提前备份用户是否加入其他附加组groups zhangsan判断是否影响其他组权限这些检查听起来繁琐但真实线上操作比这更麻烦的情况很常见。比如一个用户因为写了个守护进程即使执行了userdel进程还在后台继续运行直到重启系统后才发现文件被再次写入异常路径。提前检查总比事后排查更划算。5.5 扩展对比userdel 与 deluserDebian/Ubuntu 系提供了deluser命令它是一个更面向用户的命令相比userdel有更友好的交互提示。如果服务器是 Ubuntu可以用sudo deluser --remove-home zhangsan--remove-home等价于userdel -r中的清理主目录行为。CentOS/RHEL 系默认不带deluser建议把userdel和deluser的区别记清楚面试时也经常被问到。6. 完整示例从创建到删除的用户生命周期管理前面的知识点比较分散这一节用一个完整的场景串起来展示一个用户从创建、设密码、临时禁用、到最终删除的完整流程。这也是很多运维面试里“如何下线一台服务器上的员工账号”的标准回答模板。6.1 场景设计假设团队来了一名新同事操作系统是 CentOS Stream我们需要为它创建账号、初始化密码并强制首次登录修改密码。三个月后该同事离职我们需要安全地删除这个账号。6.2 创建用户并设置密码示例账号zhangsan。# 创建用户并创建主目录 sudo useradd -m zhangsan # 初始化密码密码先写在 pwd.txt 中避免直接暴露在历史记录 echo InitPass123 /tmp/pwd.txt sudo passwd --stdin zhangsan /tmp/pwd.txtpasswd --stdin可以从不标准输入中读取密码适合脚本环境。CentOS 自带支持Ubuntu 默认不带需要手动扩展或用chpasswd。所以更通用的写法是echo zhangsan:InitPass123 | sudo chpasswd强制首次登录修改密码sudo chage -d 0 zhangsan验证用户可正常登录su - zhangsan此时系统会提示You are required to change your password immediately输入新密码后切换到正常环境。6.3 临时禁用与恢复员工休假或账号被怀疑异常时不删用户直接锁定sudo usermod -L zhangsan验证锁定效果su - zhangsan执行后即使输入正确密码也会提示认证失败。恢复账号sudo usermod -U zhangsan6.4 安全删除账号员工离职确认后先检查进程和文件再删除。# 检查用户运行中的进程 ps -u zhangsan # 检查用户主目录大小 du -sh /home/zhangsan # 备份主目录到指定备份路径 sudo tar -czf /backup/zhangsan_home_$(date %F).tar.gz /home/zhangsan # 终止该用户所有进程确认业务影响后执行 sudo pkill -u zhangsan # 删除用户并清理主目录 sudo userdel -r zhangsan删除后建议再确认一下系统中没有残留的 zhangsan 相关文件find / -user zhangsan 2/dev/null如果没有任何输出说明该用户的数据基本清理干净。6.5 deluser 路径的做法如果运行的是 Ubuntu可以把删除步骤写成sudo deluser --remove-home --backup-to /backup zhangsan--backup-to参数会在删除前把主目录备份到指定目录。这个设计比裸敲userdel -r安全得多。7. su 切换用户环境差异与实战细节很多人一开始接触 Linux 就觉得su只是“切换 root”的工具实际上它也可以切换到任意用户。真正需要注意的是环境变量的变化。7.1 su 与 su - 的区别# 切换到 root但保留当前用户的环境变量 su # 切换到 root并重新加载 root 的登录环境 su -听起来有点抽象我们用实际场景来验证。假设当前是普通用户zhangsanPATH 变量是普通用户路径。执行su切换到 root 后运行which systemctl可能还会找到普通用户目录下的命令。执行su -后系统会加载 root 的/root/.bash_profilePATH 变成 root 环境的完整路径。从实际经验看在脚本中或临时执行管理命令时优先使用su -而不是su。否则你可能会遇到“明明切到 root 了为什么 systemctl 找不到”这种奇怪问题。7.2 su 切换指定用户# 切换到指定用户不加载完整环境 su zhangsan # 切换到指定用户加载完整环境 su - zhangsan切换普通用户时需要输入目标用户的密码如果当前用户是 root切换时不需要密码。7.3 su 的执行与错误分析执行su - zhangsan时常见的错误错误信息原因解决方案su: user zhangsan does not exist用户不存在检查用户是否存在su: authentication failure密码错误或账号锁定用 root 重置密码或解锁su: cannot open sessionPAM 配置问题或磁盘满查看系统日志检查磁盘空间bash: /root/.bashrc: Permission denied用户对目标 Shell 配置文件没有读取权限检查文件权限7.4 从 su 到 sudo 的选择再补充一个运维场景中常遇到的问题什么时候用su什么时候用sudosu的问题是普通用户一旦知道了 root 密码就可以直接用 root 身份执行全部操作这种方式权限边界模糊不利于审计。sudo则允许管理员为不同用户配置精确的命令白名单。# 允许 zhangsan 只执行系统服务管理命令 echo zhangsan ALL(root) /usr/bin/systemctl | sudo tee /etc/sudoers.d/zhangsan相比之下多管理员服务器更推荐配置sudo而不是把 root 密码告诉所有人。su作为临时手动切换、救援环境、脚本内切换用户等场景仍然很有价值但权限控制上需要谨慎。8. 运行结果与效果验证命令执行后怎么判断结果是否符合预期简单列几个验证方法。8.1 验证用户是否已删除# 查看用户是否还存在 id zhangsan如果输出id: ‘zhangsan’: no such user说明用户记录已经删除。再检查 shadow 文件sudo getent shadow zhangsan无输出说明密码记录也已清理。8.2 验证密码修改是否生效# 查看密码状态 sudo passwd -S zhangsan执行后出现P表示密码可用出现L表示锁定NP表示无密码。也可以实际测试登录su - zhangsan输入新密码能登录说明密码修改成功提示认证失败说明锁定生效或密码错误。8.3 验证 su 切换是否加载了目标用户环境su - zhangsan echo $HOME whoami如果输出/home/zhangsan zhangsan说明切换成功且环境变量正确加载。如果$HOME没有变化说明没有使用su -或者目标用户的主目录配置有问题。9. 常见问题与排查思路问题现象可能原因排查方式解决方案userdel提示用户正在使用用户还有进程在运行ps -u 用户名查看进程确认业务影响后终止进程再执行删除删除用户后主目录还在没用-r参数ls -ld /home/用户名手动删除或重新执行userdel -rsu切换失败提示认证失败密码错误、账号锁定或 PAM 异常passwd -S 用户名查看状态用 root 重置密码或解锁账号su与su -环境不一致少了连接符echo $HOME对比使用su -加载完整登录环境修改密码有弱口令提示密码强度不符合系统策略chage -l 用户名查看策略使用更复杂的密码或调整 PAM 配置用户删不掉提示文件系统只读磁盘挂载为只读mount查看挂载选项重新挂载为读写root 密码忘了无法直接登录重启进入单用户模式或救援模式通过恢复模式重置 root 密码锁定用户后进程还在锁定只禁止登录不终止进程ps -u 用户名单独处理进程必要时 kill10. 最佳实践与工程建议Linux 用户管理做得好不好不在于会不会背命令而在于有没有一套可重复、可回滚、可审计的操作流程。10.1 删除用户之前先做数据备份在任何生产环境执行userdel -r前先把用户主目录打包备份。备份不仅仅是为了防止误删也是为了后续审计时可以追查离职员工负责的数据和配置。建议备份命令sudo tar -czf /backup/users/zhangsan_$(date %Y%m%d_%H%M%S).tar.gz /home/zhangsan备份文件和删除操作的时间点最好能够对上方便事后追溯。10.2 密码策略要结合安全基线创建用户时别只设置一个临时密码还要用chage设置密码有效期。常见做法是初始密码必须立即修改。普通用户密码最长有效期 90 天。连续失败登录超过 5 次锁定账号。这些配置可以通过/etc/login.defs和/etc/security/pwquality.conf调整。10.3 不要把 root 密码到处传播多管理员协作时优先使用sudo而不是su。具体做法是在/etc/sudoers.d/目录下创建独立配置文件为不同管理员分配不同命令权限。这样即使某管理员的操作出了问题审计日志也能清晰记录是谁执行的。10.4 用户命名与回收周期要有规范团队内部可以约定用户名统一使用拼音全称比如zhangsan、lisi。离职账号在 3 天内完成备份和回收。删除用户前必须在工单系统记录确认信息。同一用户名在回收后的一段时间内不得重新分配防止历史数据残留引发权限混淆。10.5 注意用户资源占用一个用户可能持有大量文件、进程和定时任务。删除用户之前建议用脚本统计一下用户拥有的文件数量、总大小和进程占用避免删除后才发现还有数据残留。这个检查步骤在云服务器磁盘空间管理上尤其重要。10.6 使用 PAM 控制本地登录如果服务器有多个普通用户可以通过 PAM 配置限制哪些用户能通过 SSH 登录、哪些只能本地登录。比如设置/etc/security/access.conf控制用户来源能在账号阶段就减少一部分安全风险。11. 适合放脚本里的自动化处理思路如果在多台服务器上同时处理一批离职账号手动逐台敲命令效率太低可以写一个清理脚本。下面是一个精简示例仅供参考。#!/bin/bash # 文件路径/usr/local/sbin/cleanup_user.sh # 用法sudo ./cleanup_user.sh 用户名 USER_NAME$1 BACKUP_DIR/backup/users if [ -z $USER_NAME ]; then echo Usage: $0 username exit 1 fi if ! id $USER_NAME /dev/null; then echo User $USER_NAME does not exist exit 1 fi mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/${USER_NAME}_$(date %F).tar.gz /home/$USER_NAME 2/dev/null pkill -u $USER_NAME 2/dev/null userdel -r $USER_NAME echo Cleanup $USER_NAME completed.这个脚本没有做非常复杂的确认实际使用时应该再增加二次确认和日志记录。12. 总结与后续学习方向Linux 用户管理的核心不在于单个命令而在于理解每个操作背后的边界。删除用户时要考虑主目录、进程、定时任务、邮件池和散落的文件设置密码时要掌握密码状态、有效期和锁定机制切换用户时要清楚su与su -的环境差异。这三个操作看似独立实际上构成了一个完整的账号生命周期管理闭环。建议下一步动手做什么呢拿起一台测试机器按顺序练一遍用useradd -m创建用户用chpasswd设置初始密码用chage -d 0强制首次登录改密用su -切换验证再练习锁定、解锁、最终安全删除整个流程。把这一套流程跑熟之后再去看/etc/passwd、/etc/shadow、/etc/group的文件内容很多疑问会自然解开。再深入一点可以学习用户权限管理中的sudo规则、PAM 认证流程、ACL 访问控制列表。用户管理只是入口权限体系才是 Linux 安全的核心。后续遇到“普通用户执行特定命令”或“某用户不能登录但服务正常使用”这类需求就会意识到这些基础操作背后的坑到底有多深。建议把本文提到的命令和排查思路收藏备用实际服务器操作时先备份、再验证、最后清理的顺序一定不要乱。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询