CentOS 7系统服务账户的UID范围是1–999,其中1–499专用于基础系统服务,500–999留给自定义服务,且必须禁用交互式shell、禁止普通用户越界创建,并通过组映射和目录权限实现最小权限控制。

服务账号的 UID 范围控制,核心是把“谁运行什么服务”这件事从数字层面固化下来,避免权限泛滥或角色混淆。系统默认已划好边界,关键在守住它、用好它。
明确系统服务账号的 UID 区间
CentOS 7 及以后版本将 UID 1–999 预留为系统服务账号(如 daemon、systemd-network、nginx、mysql)。这个范围不是建议值,而是设计契约:
- 不新增普通用户到该区间——useradd -u 500 alice 属于违规操作;
- 新建服务账户必须显式指定 UID,且严格落在 1–499 或 500–999 内(推荐 1–499 专用于基础系统服务,500–999 留给自定义服务);
- /etc/login.defs 中的 UID_MIN 1000 必须保留,防止 useradd 默认越界分配。
禁止交互登录 + 锁定 Shell
服务账号只负责运行进程,不该有人直接登录。这是最基础但常被跳过的防线:
- 创建时加 -s /sbin/nologin 或 -s /usr/sbin/nologin;
- 已有账号可用 usermod -s /sbin/nologin nginx 补救;
- 检查 /etc/passwd 中 UID 在 1–999 区间的账号,第七字段不能是 /bin/bash 或 /bin/sh。
按 UID 范围绑定组与目录权限
Linux 不支持“按 UID 段自动授权”,但可通过组作为中间层实现策略落地:
- 创建专用组,如 svc-http(GID 501)、svc-db(GID 502);
- 把 UID 100–199 的 Web 类服务账户统一加入 svc-http;
- 对应网站根目录设为 chown root:svc-http /var/www,权限 750;
- 上传目录单独设为 770,属组仍是 svc-http,确保服务可写但不越权。
限制服务进程能执行的操作
即使账号本身权限受限,其启动的进程仍可能调用高危命令。需叠加运行时控制:
- 在 systemd service 文件中设置 NoNewPrivileges=yes 和 RestrictSUIDSGID=true;
- 用 sudoers 精确放行:比如只允许 nginx 用户执行 /usr/bin/systemctl reload nginx,禁用 shell 访问;
- 对数据库类服务,禁用其账号的 login 和 su 权限,仅保留 socket 或网络连接所需的最小能力。

















