Linux userdel 命令 - 删除用户账户及关联的系统文件
userdel 是类 Unix 系统(Linux、FreeBSD等)中的一款用于删除用户账户及关联系统文件的命令工具。userdel 命令在删除用户时会同步修改与系统账户相关的文件(如 /etc/passwd、/etc/group、/etc/shadow 等),删除这些文件中有关该用户的信息,同时也可以选择是否清理用户的根目录、邮件池等关联文件。不同系统对其支持和使用略有差异。
[!TIP]
userdel需要以 root 权限或者 sudo 权限执行。Debian 系发行版推荐使用封装后的deluser工具删除用户。
userdel 命令语法结构
userdel 命令的语法结构非常的简单,如下给出其基本语法结构:
userdel [选项] LOGIN
语法结构中各部分解释说明:
[选项]: 可选的选项,用于自定义删除的具体行为LOGIN: 需要删除用户的登录名,即/etc/passwd配置文件中对应的用户名
userdel 命令使用示例
基础删除用户
不使用任何选项,直接运行 userdel 命令删除用户:
sudo userdel testuser
[!NOTE]
该种方式只删除系统中
testuser账户,及相关配置文件中的该用户的信息,不会删除用户的根目录、邮件池文件
删除用户并清理根目录与邮件池
使用 -r或 --remove 选项,在删除用户的同时,删除用户的根目录和邮件池文件:
sudo userdel -r testuser
[!NOTE]
邮件池的目录位置由
/etc/login.defs文件中的MAIL_DIR变量定义,通常在/var/mail/中与用户同名的目录中。
强制删除用户
使用 -f或 --force)选项,会跳过用户登录状态、关联进程等安全检查,直接删除用户:
sudo userdel -f testuser
userdel 命令选项详解
如下给出 userdel 命令的选项的详细的解释说明:
| 选项 | 解释说明 |
|---|---|
-f, --force | 跳过用户登录状态、是否存在进程等安全检查,强制删除用户 |
-h, --help | 显示命令的帮助信息并退出 |
-r, --remove | 删除用户账户的同时,同步删除其根目录、邮件池 |
-R, --root CHROOT_DIR | 在指定的 chroot 目录中执行删除用户的操作,同时使用 CHROOT_DIR 目录下的系统配置文件 |
-P, --prefix PREFIX_DIR | 在指定的 PREFIX_DIR 目录中修改用户账户文件 |
-Z, --selinux-user | 删除用户账户时,同步移除与其对应的 SELinux 用户的映射关系 |
userdel 配置与文件说明
核心配置文件
userdel 命令的删除用户的行为受 /etc/login.defs 配置文件的制约,关键配置项如下:
MAIL_DIR: 定义用户邮件池的存储目录,/etc/default/useradd文件中的CREATE_MAIL_SPOOL变量,控制是否自动创建用户邮件池,userdel删除用户时会根据该配置判断邮件池是否存在。USERGROUPS_ENAB: 其值为布尔值(yes/no),如果值为yes,userdel会删除与用户同名的主组(如果主组中没有其他的成员);如果为no,不会自动删除用户的主组。MAX_MEMBERS_PER_GROUP: 定义组文件中每行的最大成员数,为了避免组文件行过长。USERDEL_CMD: 自定义脚本路径,如果定义该变量,userdel删除用户时会执行该脚本,用于清理用户的 cron、打印任务等关联作业。
关联系统文件
userdel 命令删除用户时会删除相关配置文件中的用户信息,相关的配置文件有:
| 文件路径 | 作用 | userdel 操作影响 |
|---|---|---|
/etc/passwd | 存储系统所有用户的基础信息,如:登录名、UID、GID、家目录、Shell 等 | 删除用户对应条目 |
/etc/group | 存储系统所有组的信息,包含用户所属组 | 如何 USERGROUPS_ENAB 值为 yes,则删除用户的同名主组 |
/etc/shadow | 存储用户的加密后的密码、密码有效期等敏感信息 | 删除用户对应条目 |
/etc/subuid, /etc/subgid | 存储用户的从属 UID / GID 信息 | 删除用户对应条目 |
/var/mail/[LOGIN] | 用户邮件池存储目录,由 MAIL_DIR 变量定义其具体值 | 使用 -r 选项时会删除该文件或目录 |
/home/[LOGIN] | 用户的默认根目录 | -r 选项时删除该目录 |
/etc/shadow-maint/userdel-pre.d/ | 删除用户前需要执行的脚本的目录 | 执行目录内所有可执行的脚本 |
/etc/shadow-maint/userdel-post.d/ | 删除用户后需要执行的脚本的目录 | 执行目录内所有可执行的脚本 |
userdel 命令的退出状态码
userdel 命令执行完成后会返回一个状态码,根据其返回的值,可以判断其执行所处的状态:
| 状态码 | 含义 | 可能的原因说明 |
|---|---|---|
| 0 | 执行成功 | 删除用户账户的操作正常完成,无任何错误 |
| 1 | 无法更新密码文件 | 可能是权限不足、/etc/passwd 文件只读等,导致无法正常修改用户的信息 |
| 2 | 命令语法无效 | 可能是选项拼写错误、缺少必选参数(LOGIN)等,而导致语法解析失败 |
| 6 | 指定用户不存在 | 输入的 LOGIN 对应的登录名在系统中不存在 |
| 8 | 用户当前已登录 | 需要删除的用户处于登录状态,或者由正在运行的进程,默认会拒绝删除 |
| 10 | 无法更新组文件 | 可能是由于权限不足、/etc/group 只读等,导致无法正确修改组信息 |
| 12 | 无法删除根目录 | 可能是因为根目录权限不足、文件被占用等,-r 选项删除根目录时,删除失败 |
结语
userdel 作为类 Unix 系统(Linux、FreeBSD等)中核心的删除用户的工具,是系统运维中必须要掌握的一个命令,同时删除不必要的用户,也可以保障系统的运行安全。但是使用的过程中要谨慎。
掌握 userdel 的语法、选项及其使用示例,再结合 useradd、usermod、passwd 等命令,即可有效的管理系统的账户。