我想这将是我在 StackExchange 方面的第一篇文章。但是,我知道这必须能够配置,因为我之前见过它的实现,但实际上我不知道它是如何实现的。
我想在 RedHat 7/8 或衍生版本上执行此操作...我怎样才能让用户执行以下权限升级:
<user> -> <user>.adm -> root
- ssh_users 组中 IdM 的用户可以从网络中的任何位置通过 SSH 连接到服务器。
- IdM 中的域管理员不能用于通过 SSH 连接到服务器,并且不在该组中。
- 域管理员用户必须通过 SSH 连接到其标准用户
sudo su - <user>.adm
。他们无法直接获得 root 权限。 - 拥有 root 访问权限的域管理员用户必须
sudo su - <user>.adm
先sudo su - root
- 并非所有域管理员都有获得根权限升级的权限。
最终,域管理员是具有维护、故障排除和修复系统相关权限的系统管理员。系统工程师有权获得 root 权限,从而获得系统的全部权限。这也涉及到职责委派,其中只有审计帐户才<user>.isso
有权删除 root 用户之外的日志。这最终导致了这一要求。
我真正寻找的是能够(因为我什么都想不出来)为我指明正确方向的文档,或者能够实现这种最小特权方法的 Ansible 角色/剧本。任何帮助都将不胜感激!
答案1
拥有 root 访问权限的域管理员用户必须
sudo su - <user>.adm
先sudo su - root
从概念上来说思考你应该想要并且需要实现的是:
所有管理员都有两个个人帐户:
- “普通”用户帐户
- 管理员帐户
要获得 Linux 服务器上的完全管理员权限:
管理员首先需要使用其常规用户帐户登录
<user>
一旦登录服务器,他们就可以通过登录个人管理员账户来提升权限
<user>.adm
sudo su - <user>.adm
请求帐户的密码<user>
,然后使用 root 权限将用户替换为<user>.adm
。- ^^^ 在我看来,这是错误的做法
您应该希望您的管理员使用su - <user>.adm
这意味着您的管理员将需要输入他们的帐户密码<user>.adm
(而不是帐户的密码<user>
)才能以身份登录<user>.adm
。- 那么,只要您的管理员在其 adm 帐户上设置的密码与常规帐户上的密码不同,那么泄露的密码就不足以让您成为所有服务器上的 root 权限。成功!
sudo
此外,他们的常规用户帐户无需任何政策<user>
。赢了!
一旦使用个人管理员帐户登录,他们就可以执行所有需要
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
来设置基于组的策略。