商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 怎样限制deluser命令的使用范围

怎样限制deluser命令的使用范围

  发布于2026-07-16 阅读(0)

扫一扫,手机访问

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

怎样限制deluser命令的使用范围

前置要点

deluser 在 Debian/Ubuntu 上执行时需 root 或 sudo 权限,默认不会删除用户的家目录和邮件目录,只有显式指定 --remove-home 等选项才会清除。此外,如果用户仍有登录会话或进程在运行,deluser 会拒绝删除,除非使用 --force 强制。因此,限制的核心在于:控制谁能执行、能删除哪些用户、能带哪些选项。这才是降低风险的关键。

推荐做法

使用 sudoers 精确授权

这一思路的核心是“最小权限原则”:只授予必要权限,禁止危险选项,并限制可操作的用户名范围。

常见做法是通过 /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。

环境与流程控制

除了技术层面的授权,流程上的管控同样重要:

  • 禁止 root 直接登录,所有操作统一通过 sudo 执行;将要执行删除操作的账号加入受控组(如 op),再在组内细化授权。
  • 开启审计与日志:确保 sudo 日志与系统审计(如 auditd)记录了关键操作,便于事后追溯。
  • 操作前强制备份与复核:删除前备份目标用户数据,执行时二次确认,降低误删风险。

快速最小示例

假设需求更具体:仅允许 op 组成员删除名称以 app- 开头的系统用户,同时禁止使用 --force--remove-home

步骤很简单:

  1. 编辑 sudoers:
    %op ALL=(root) /usr/sbin/deluser --system --quiet 'app-*'
  2. 验证:
    sudo -l -U op   # 查看 op 的可用权限
    sudo deluser --force app-foo   # 被拒绝(含 --force)
    sudo deluser app-bar           # 成功(匹配白名单且无非授权选项)
  3. 审计:
    grep deluser /var/log/auth.log

注意事项

删除用户前,务必确认其是否仍在登录或还有进程在运行。如果未使用 --forcedeluser 会拒绝删除,这其实是一种保护机制。而强制删除(--force)风险极高,应当被严格限制。

更重要的是,删除操作不可逆。务必要在删除前备份重要数据,并在变更窗口内执行,避免影响业务连续性。

本文转载于:https://www.yisu.com/ask/5545394.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注