必须为每个运维人员创建独立账号,禁用共用root;root uid为0,普通用户不得设为uid 0;生产环境禁用root直接登录,应通过sudo+普通用户操作;按职能划分dbadmins、webdeploy等辅助组,主组设users,附加组不超过5个;sudo权限须命令级控制,配置于/etc/sudoers.d/下,禁止shell类提权命令,关键文件需严格设权如/etc/shadow 600、/etc/sudoers 440,日志目录启用chattr +a防护。

创建独立运维账号,禁用共用 root
每个真实运维人员必须拥有唯一账号,不能多人共享 root 或同一普通账号。系统通过 UID 识别身份,root 的 UID 是 0,一旦普通用户被误设为 UID 0,就等同于获得全部系统控制权。生产环境应严格禁止直接使用 root 登录,SSH 配置中建议关闭 PermitRootLogin yes,改用普通用户 + sudo 方式操作。
按角色划分辅助组,避免权限泛滥
组是批量授权的核心载体。不要把所有用户塞进一个大组(如 wheel 或 sudo),而应按职能分层设计:
- 功能组:如 dbadmins(仅允许操作数据库服务)、webdeploy(仅允许重启 nginx、部署静态文件)
- 项目组:如 project-alpha(只对 /srv/project-alpha 下资源有读写权)
- 审计组:如 auditors(仅可读取 /var/log/secure 和 /var/log/auth.log)
用户主组通常设为 users,附加组不超过 5 个,用 usermod -aG group1,group2 user 追加,避免覆盖原有组关系。
用 sudoers 实现命令级权限控制
sudo 不是“给 root 权限”,而是“授权执行特定命令”。配置需写入 /etc/sudoers.d/ 下独立文件(用 visudo -f /etc/sudoers.d/deployer 编辑),示例:
- %webdeploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx, /usr/bin/rsync
- alice ALL=(postgres) /usr/bin/psql -U appdb -c "SELECT * FROM logs LIMIT 10;"
- 禁止危险组合:! /bin/sh, ! /usr/bin/bash, ! /usr/bin/python*(防止提权逃逸)
每条规则后建议加 Defaults logfile="/var/log/sudo-deploy.log",便于定向审计。
关键文件与目录的归属和默认权限加固
权限失控常始于初始设置不当。新用户家目录应为 700,敏感配置文件如 /etc/passwd(644)、/etc/shadow(600)、/etc/sudoers(440)必须严格限制写入。用以下命令检查并修正:
- chmod 600 /etc/shadow
- chown root:root /etc/sudoers /etc/sudoers.d/*
- chmod 440 /etc/sudoers;子配置文件也设为 440
- 对日志目录启用 chattr +a /var/log/,防止误删或覆盖
日常新建文件默认权限由 umask 控制,建议运维账号统一设为 umask 027(目录 750,文件 640),在 ~/.bashrc 中追加生效。











