当忘记Linux系统的用户名和密码时,若需要删除目标用户,核心思路是通过系统启动时的权限提升(如进入救援模式或单用户模式)获取root权限,再执行用户删除操作,以下是详细步骤、注意事项及不同场景的应对方法,操作前建议确认有物理服务器访问权限或云服务器控制台权限,避免因误操作导致系统无法启动。

操作前准备工作
- 确认系统环境
 明确Linux发行版(如Ubuntu/Debian、CentOS/RHEL等),不同系统的GRUB引导界面和救援模式入口可能略有差异,可通过登录界面信息或执行cat /etc/os-release查看(若能登录时)。
- 备份重要数据
 若目标用户有重要文件,建议提前备份(若无法登录,需在救援模式下操作)。
- 准备启动介质
 若系统无法直接进入GRUB,可能需要准备系统安装U盘/光盘,通过“救援模式”启动(部分云服务器需通过控制台选择“救援镜像”)。
详细操作步骤
(一)进入GRUB引导菜单并修改启动参数
- 触发GRUB菜单
 重启服务器,在开机自检阶段(通常看到主板LOGO时)连续按下Shift(Ubuntu/Debian)或Esc(CentOS/RHEL),部分系统可能需要长按Shift或F12(启动菜单键),若未成功,可尝试在GRUB超时前(默认5秒)按住方向键上/下中断启动流程。
- 选择内核并编辑参数
 进入GRUB菜单后,通过方向键选择“Advanced options for Ubuntu”或“CentOS Linux (with Linux x.x.x-x-generic)”等带内核版本的选项,按e进入编辑模式。
 定位以linux或linux16/linuxefi开头的行(通常为倒数第二行),在行尾添加以下参数(根据系统类型选择):- systemd系统(Ubuntu 16.04+、CentOS 7+):添加systemd.unit=rescue.target或systemd.unit=emergency.target(后者为紧急模式,权限更受限)。
- 旧版init系统(CentOS 6、Ubuntu 14.04等):添加single或init=/bin/bash(直接进入bash单用户模式)。
 示例:原行末尾可能为ro quiet splash,修改为ro quiet splash systemd.unit=rescue.target。
 
- systemd系统(Ubuntu 16.04+、CentOS 7+):添加
(二)进入救援模式并获取root权限
- 启动救援模式
 按Ctrl+X或F10应用修改,系统会以修改后的参数启动,若参数正确,将进入救援模式(emergency.target)或单用户模式(single)。
- 挂载根分区为读写
 救援模式下,根分区通常以只读方式挂载在/sysroot,需重新挂载为读写:mount -o remount,rw /sysroot 若提示“未找到设备”,需先通过 lsblk或fdisk -l确认根分区设备名(如/dev/sda1、/dev/nvme0n1p2),再执行:mount -o remount,rw /dev/sda1 /sysroot # 替换为实际分区名 
(三)切换到系统环境并删除用户
- 切换到真实系统环境
 执行以下命令,进入系统的目录(而非救援模式的/sysroot):chroot /sysroot 此时命令行提示符会变为 sh-5.1#或root@xxx:/#,表示已切换到系统的root环境。
- 列出所有用户
 若忘记用户名,需先查看/etc/passwd文件(存储用户信息):cat /etc/passwd | cut -d: -f1 # 只显示用户名列 或使用 awk过滤:awk -F: '{print $1}' /etc/passwd输出示例: root daemon bin sys sync ... username,其中username为目标用户。 
- 删除目标用户
 使用userdel命令删除用户,-r选项会同时删除用户主目录和邮件队列(避免残留文件):userdel -r username # 替换为实际用户名 若提示“用户未登录”,可忽略;若提示“进程正在使用该用户”,需先终止相关进程(见后文“注意事项”)。 
(四)清理残留配置(可选)
- 检查sudo权限
 若目标用户有sudo权限,需从/etc/sudoers中删除其配置(避免残留权限):visudo # 编辑sudoers文件(语法检查) 找到类似 username ALL=(ALL:ALL) ALL的行,删除或注释(行首加)。
- 检查cron任务
 查看该用户的定时任务(若存在):crontab -u username -l # 需先确认用户是否存在,若已删除则忽略 或直接检查 /var/spool/cron/crontabs/username(CentOS)或/var/spool/cron/crontabs/username(Ubuntu),删除对应文件。
- 检查系统日志
 查看用户相关的日志文件(如/var/log/wtmp、/var/log/lastlog),可通过last命令查看登录记录,确认用户是否已完全删除。
(五)重启系统
完成操作后,退出chroot环境并重启:

exit # 退出chroot reboot -f # 强制重启(避免救援模式残留)
不同发行版操作对比(表格)
| 操作环节 | Ubuntu/Debian | CentOS/RHEL 7+ | CentOS/RHEL 6及旧版 | 
|---|---|---|---|
| 进入GRUB按键 | Shift(或Esc) | Esc(或F12) | Esc(或任意方向键) | 
| 启动参数修改 | 添加 systemd.unit=rescue.target | 添加 systemd.unit=rescue.target | 添加 single或init=/bin/bash | 
| 根目录挂载点 | /sysroot | /sysroot | /sysroot或(旧版可能直接挂载) | 
| 切换系统命令 | chroot /sysroot | chroot /sysroot | chroot /sysroot或switch_root | 
| 用户删除命令 | userdel -r username | userdel -r username | userdel -r username | 
注意事项
- 避免误删系统用户
 切勿删除root、daemon、bin等系统关键用户(UID小于1000的用户通常为系统用户),否则可能导致系统崩溃。
- 处理用户进程冲突
 若删除时提示“用户正在登录”,可通过ps aux | grep username查看该用户进程,用kill -9 PID强制终止(PID为进程号)。
- 加密分区处理
 若系统使用LUKS加密分区,需先在GRUB参数中添加rd.luks.uuid=加密分区UUID(通过blkid查看UUID),解密后再挂载。
- 云服务器特殊场景
 云服务器(如阿里云、AWS)需通过控制台选择“救援模式”(VNC登录),部分系统会自动挂载根分区,无需手动执行mount和chroot。
相关问答FAQs
Q1:如果删除用户后系统无法启动,如何修复?
A:通常因误删系统用户或配置文件导致,可再次进入救援模式,检查/etc/passwd语法是否正确(确保root用户存在),或通过rpm -qf /etc/passwd(CentOS)检查文件完整性,若文件损坏,可从安装介质恢复:  
- 挂载安装U盘:mount /dev/sr0 /mnt
- 恢复文件:rpm --root /sysroot --rebuilddb(CentOS)或dpkg --root=/sysroot -i /mnt/pool/main/e/eglibc/libc6_*.deb(Ubuntu)
- 重启后若仍异常,需重新安装系统。
Q2:是否可以删除一个正在登录的用户?
A:理论上可以,但需先终止其所有进程,否则删除后残留进程可能导致系统不稳定,步骤如下:  
- 查看用户进程:ps -ef | grep username
- 强制终止进程:kill -9 <PID>(逐个终止,或通过pkill -u username批量终止)
- 确认用户无进程后,执行userdel -r username
 注意:若用户正在执行关键操作(如数据库写入),强制终止可能导致数据丢失,建议先通知用户下线。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23446.html
 
                