发布于2026-07-16 阅读(0)
扫一扫,手机访问
在 Linux 系统管理中,deluser 命令虽然好用,但也属于典型的高危操作——毕竟它直接操作的是用户账户,一旦误删就可能引发权限混乱甚至业务中断。所以问题来了:能否在不彻底禁止该命令的前提下,精准限制它的使用范围?换句话说,怎么让人“能删但删不了不该删的”?

deluser 在 Debian/Ubuntu 上执行时需 root 或 sudo 权限,默认不会删除用户的家目录和邮件目录,只有显式指定 --remove-home 等选项才会清除。此外,如果用户仍有登录会话或进程在运行,deluser 会拒绝删除,除非使用 --force 强制。因此,限制的核心在于:控制谁能执行、能删除哪些用户、能带哪些选项。这才是降低风险的关键。
这一思路的核心是“最小权限原则”:只授予必要权限,禁止危险选项,并限制可操作的用户名范围。
常见做法是通过 /etc/sudoers 或 /etc/sudoers.d/ 下的自定义文件来配置。举个例子:
# 仅允许 op 组在 test 子系统中删除“test-”前缀的账户,且禁止危险选项
%op ALL=(root) /usr/sbin/deluser --system --quiet 'test-*'
# 仅允许 alice 删除用户 bob(精确匹配),且不允许任何额外选项
alice ALL=(root) /usr/sbin/deluser bob
# 允许 devops 删除除 root、admin、ubuntu 之外的任意用户(黑名单方式)
%devops ALL=(root) /usr/sbin/deluser --system --quiet \
'!/usr/sbin/deluser --system --quiet root' \
'!/usr/sbin/deluser --system --quiet admin' \
'!/usr/sbin/deluser --system --quiet ubuntu' \
ALL
这里有几个要点:
which deluser 的输出(常见为 /usr/sbin/deluser)。--force、--remove-home 等危险开关。这种方式更灵活,也更容易集成审计和二次确认。思路是:禁止直接调用 deluser,统一走受控脚本,脚本内部处理所有校验逻辑。
下面是一个脚本示例(/usr/local/bin/safe-deluser):
#!/usr/bin/env bash
set -euo pipefail
LOG="/var/log/safe-deluser.log"
ALLOWED_USERS=(alice bob)
BANNED_USERS=(root admin ubuntu)
if [[ " ${ALLOWED_USERS[*]} " != *" $SUDO_USER "* ]]; then
echo "ERROR: $SUDO_USER not allowed" | tee -a "$LOG"
exit 1
fi
if [[ " ${BANNED_USERS[*]} " == *" $1 "* ]]; then
echo "ERROR: deleting $1 is forbidden" | tee -a "$LOG"
exit 1
fi
# 禁止危险选项
for arg in "$@"; do
case "$arg" in
--force|--remove-home|--purge-home|--remove-all-files)
echo "ERROR: dangerous option $arg is not allowed" | tee -a "$LOG"
exit 1
;;
esac
done
echo "$(date -u) $SUDO_USER deleting $*" >> "$LOG"
exec /usr/sbin/deluser --system --quiet "$@"
授权方式也很直接:
%op ALL=(root) /usr/local/bin/safe-deluser *
这种方式的好处是:权限控制和业务逻辑解耦,审计日志直接集成在脚本中,未来修改规则只需改动脚本本身,无需调整 sudoers。
除了技术层面的授权,流程上的管控同样重要:
op),再在组内细化授权。假设需求更具体:仅允许 op 组成员删除名称以 app- 开头的系统用户,同时禁止使用 --force 和 --remove-home。
步骤很简单:
%op ALL=(root) /usr/sbin/deluser --system --quiet 'app-*'sudo -l -U op # 查看 op 的可用权限
sudo deluser --force app-foo # 被拒绝(含 --force)
sudo deluser app-bar # 成功(匹配白名单且无非授权选项)grep deluser /var/log/auth.log删除用户前,务必确认其是否仍在登录或还有进程在运行。如果未使用 --force,deluser 会拒绝删除,这其实是一种保护机制。而强制删除(--force)风险极高,应当被严格限制。
更重要的是,删除操作不可逆。务必要在删除前备份重要数据,并在变更窗口内执行,避免影响业务连续性。
上一篇:如何使用deluser修改用户组
下一篇:cobbler如何实现远程管理
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8