You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RedHat 7/8及衍生系统中限制直接提权至root的权限分级配置方案咨询

RedHat 7/8及衍生系统中限制直接提权至root的权限分级配置方案咨询

嗨,针对你提出的这种分级提权+最小权限管控的需求,在RedHat 7/8及衍生系统上完全可以通过sudo配置结合IdM(FreeIPA)的用户组管理来实现,我帮你梳理下具体的实现思路和配置方向:

一、先搞定IdM侧的用户组与账号规划

首先在IdM里做好基础的用户和组划分,确保权限边界清晰:

  • 创建ssh_users组:所有允许直接SSH登录服务器的普通用户都加入这个组
  • 创建domain_admins组:域管理员用户加入此组,不要把这个组加入ssh_users,确保他们无法直接SSH登录
  • 创建sys_engineers_adm组:给那些需要最终提权到root的系统工程师对应的<user>.adm账号加入此组
  • 创建audit_users组:把<user>.isso这类审计账号加入此组
  • 给每个Domain Admin用户关联对应的<user>.adm账号(比如用户jdoe对应jdoe.adm),并将普通用户jdoe加入ssh_users组

二、限制SSH登录权限

修改SSH配置,确保只有ssh_users组的用户能登录服务器:

  1. 编辑/etc/ssh/sshd_config,添加或修改以下行:
    AllowGroups ssh_users
    
  2. 重启sshd服务生效:
    systemctl restart sshd
    

这样Domain Admins组的用户直接SSH会被拒绝,必须先登录自己的普通用户账号。

三、核心:sudoers分级提权规则配置

建议不要直接修改主/etc/sudoers文件,而是在/etc/sudoers.d/目录下创建单独的配置文件(权限设为0440),这样更便于管理和排查。

1. 允许普通用户切换到自身对应的<user>.adm账号

创建/etc/sudoers.d/01-ssh-users-to-adm,内容如下:

# 允许ssh_users组的用户仅切换到自己对应的.adm账号
Defaults!/bin/su - *.adm !requiretty
%ssh_users ALL=(ALL) NOPASSWD: /bin/su - ${USER}.adm

这里用${USER}变量实现精准匹配,确保用户jdoe只能切换到jdoe.adm,避免越权。

2. 控制<user>.adm账号的root提权权限

创建/etc/sudoers.d/02-adm-to-root:

# 拒绝非系统工程师的adm用户提权到root
%adm_users ALL=!/bin/su - root,!/usr/bin/sudo -i,!/usr/bin/sudo su - root

# 允许系统工程师的adm用户提权到root
%sys_engineers_adm ALL=(root) NOPASSWD: /bin/su - root,/usr/bin/sudo -i

这里%adm_users是你在IdM中创建的所有<user>.adm账号所属的组,通过黑名单规则限制普通域管理员的adm账号无法直接提root,仅开放给系统工程师组的adm账号。

四、审计账号的特殊日志权限配置

创建/etc/sudoers.d/03-audit-log-permissions,给<user>.isso这类审计账号配置日志删除权限,同时限制其他用户(除root外)无法删除日志:

# 允许审计用户删除指定路径的日志文件
%audit_users ALL=(root) NOPASSWD: /bin/rm -rf /var/log/*,/var/log/**/*

# 拒绝其他用户删除日志(root不受此限制)
ALL ALL=!/bin/rm -rf /var/log/*,!/bin/rm -rf /var/log/**/*

注意:这里的日志路径可以根据你的实际环境调整,确保只开放必要的日志目录权限,避免误删其他系统文件。

五、Ansible自动化实现思路

如果要批量在多台服务器上部署这套配置,推荐用Ansible编写角色来自动化:

  • 编写一个Ansible角色,包含以下核心任务:
    • 配置sshd_config的AllowGroups规则,确保只有ssh_users能登录
    • 复制上述三个sudoers配置文件到目标服务器的/etc/sudoers.d/目录,并用visudo -cf验证配置语法正确性
    • 同步IdM的用户组信息(可以用Ansible的freeipa模块或调用ipa命令)
    • 触发sshd和sudo服务重启(如果配置有变更)
  • 示例Playbook片段:
- name: 配置分级提权权限
  hosts: all
  roles:
    - role: privilege-escalation-tiering
  tasks:
    - name: 确保sshd配置正确
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^AllowGroups'
        line: 'AllowGroups ssh_users'
        validate: '/usr/sbin/sshd -t -f %s'
      notify: restart sshd

    - name: 部署sudoers配置文件
      copy:
        src: "{{ item.src }}"
        dest: "/etc/sudoers.d/{{ item.dest }}"
        mode: 0440
        validate: 'visudo -cf %s'
      loop:
        - { src: 'files/01-ssh-users-to-adm', dest: '01-ssh-users-to-adm' }
        - { src: 'files/02-adm-to-root', dest: '02-adm-to-root' }
        - { src: 'files/03-audit-log-permissions', dest: '03-audit-log-permissions' }
      notify: restart sudo

  handlers:
    - name: restart sshd
      service:
        name: sshd
        state: restarted

    - name: restart sudo
      service:
        name: sudo
        state: restarted

参考方向

你可以参考RedHat官方文档里的以下内容:

  • Sudo配置指南:里面详细讲解了sudo的规则语法、变量使用和权限控制
  • IdM(FreeIPA)用户组管理文档:学习如何将IdM组与sudo规则集成
  • RedHat安全加固指南:里面有最小权限配置的最佳实践

备注:内容来源于stack exchange,提问作者Maxs728

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:13:01