权限提升阻止直接获取 root 权限

权限提升阻止直接获取 root 权限

我想这将是我在 StackExchange 方面的第一篇文章。但是,我知道这必须能够配置,因为我之前见过它的实现,但实际上我不知道它是如何实现的。

我想在 RedHat 7/8 或衍生版本上执行此操作...我怎样才能让用户执行以下权限升级:

<user> -> <user>.adm -> root

  • ssh_users 组中 IdM 的用户可以从网络中的任何位置通过 SSH 连接到服务器。
  • IdM 中的域管理员不能用于通过 SSH 连接到服务器,并且不在该组中。
  • 域管理员用户必须通过 SSH 连接到其标准用户sudo su - <user>.adm。他们无法直接获得 root 权限。
  • 拥有 root 访问权限的域管理员用户必须sudo su - <user>.admsudo su - root
  • 并非所有域管理员都有获得根权限升级的权限。

最终,域管理员是具有维护、故障排除和修复系统相关权限的系统管理员。系统工程师有权获得 root 权限,从而获得系统的全部权限。这也涉及到职责委派,其中只有审计帐户才<user>.isso有权删除 root 用户之外的日志。这最终导致了这一要求。

我真正寻找的是能够(因为我什么都想不出来)为我指明正确方向的文档,或者能够实现这种最小特权方法的 Ansible 角色/剧本。任何帮助都将不胜感激!

答案1

拥有 root 访问权限的域管理员用户必须sudo su - <user>.admsudo su - root

从概念上来说思考你应该想要并且需要实现的是:

所有管理员都有两个个人帐户:

  1. “普通”用户帐户
  2. 管理员帐户

要获得 Linux 服务器上的完全管理员权限:

  1. 管理员首先需要使用其常规用户帐户登录<user>

  2. 一旦登录服务器,他们就可以通过登录个人管理员账户来提升权限<user>.adm

    • sudo su - <user>.adm 请求帐户的密码<user>,然后使用 root 权限将用户替换为<user>.adm
    • ^^^ 在我看来,这是错误的做法
      您应该希望您的管理员使用su - <user>.adm
      这意味着您的管理员将需要输入他们的帐户密码<user>.adm(而不是帐户的密码<user>)才能以身份登录<user>.adm
      • 那么,只要您的管理员在其 adm 帐户上设置的密码与常规帐户上的密码不同,那么泄露的密码就不足以让您成为所有服务器上的 root 权限。成功!
      • sudo此外,他们的常规用户帐户无需任何政策<user>。赢了!
  3. 一旦使用个人管理员帐户登录,他们就可以执行所有需要root权限的操作。

    这需要制定sudo政策。关于这一点的信息已经足够多了。

    我倾向于使用#includedir /etc/sudoers.d大多数现代/etc/sudoers政策中包含的机制(#没有注释!)并删除一个文件(文件名中不包含.)并以这种方式设置政策。

    其中一种选择是制定个人保险政策,hbruijn.adm/etc/sudoers.d/hbruijn_adm

    # /etc/sudoers.d/hbruijn_adm 
    # sudo policy that allow HBruijn's admin account to perform all
    # as any user, without prompting for a password
    hbruijn.adm  ALL = NOPASSWD: ALL
    

    或者,当您让所有被允许在 Linux 系统上获得完全 root 权限的管理员帐户都属于特定组时,请设置一个基于组的策略。


这意味着您还可以阻止管理员直接登录到他们的 adm 帐户。

例如,可以通过DenyUsers在服务器中使用指令/etc/ssh/sshd_config来阻止特定用户或与模式匹配的用户登录,以实现 SSH 远程访问:

# /etc/ssh/sshd_config
#here go defaults for all connections/users
PasswordAuthentication no
PubkeyAuthentication no
...
DenyUsers *.adm 

或者使用类似的方法DenyGroups来设置基于组的策略。

相关内容