如何为无法登录 RHEL 服务器的用户提供启动/停止应用程序或重新启动服务器的能力?

如何为无法登录 RHEL 服务器的用户提供启动/停止应用程序或重新启动服务器的能力?

我们正在构建一个安全平台,以便只有少数人有权通过 ssh 访问服务器,但我仍然需要支持人员能够启动或停止应用程序,并在需要时重新启动服务器,而无需通过 ssh 访问服务器。

答案1

如果实际要求是支持人员不能访问命令行,那么您可以编写一个脚本来显示支持人员允许的固定操作菜单,然后使用该chsh命令将该脚本设置为支持人员帐户的登录 shell

如果您想更加确定,您可以构建一个专用的二进制可执行文件来显示菜单,并将其用作登录 shell 而不是脚本。但在原型设计阶段使用脚本可能会更容易。

当菜单脚本/二进制文件用作用户的登录 shell 时,将无法通过中断菜单脚本/二进制文件来访问 shell:如果菜单脚本/二进制文件死亡出于任何原因,会话将立即结束,因为系统认为这是注销。

完成此操作后,每当支持帐户登录(本地登录和 SSH 登录)时,都会显示菜单。尝试退出菜单只会导致会话终止。


或者,sshd'sauthorized_keys文件可用于定义强制命令:当使用密钥身份验证启动 SSH 会话并且相关密钥具有与其关联的强制命令时,sshd将运行仅指定命令一旦结束,会话将终止。

基本上,您可以为用户创建一个 SSH 密钥对support(例如ssh-keygen -f rebootkey_ed25519 -t ed25519,将其公钥( 的内容rebootkey_ed25519.pub)以~support/.ssh/authorized_keys为前缀no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/bin/sudo /sbin/reboot",这样authorized_keys密钥的行将如下所示:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/bin/sudo /sbin/reboot" ssh-ed25519 <public_key_alphabet_soup_here> [optional comment]

然后使用visudo配置/etc/sudoers来允许用户support运行/sbin/reboot,无论是否有密码提示:

support ALL=(root) /sbin/reboot

或者

support ALL=(root) NOPASSWD: /sbin/reboot

然后您可以将私钥文件交给支持人员,并指示他们在服务器需要重新启动时rebootkey_ed25519运行。ssh -i rebootkey_ed25519 support@hostname_or_ip

现在,当rebootkey_ed25519使用私钥以 user 身份登录时supportsshd将忽略命令行上指定的任何远程命令,并以该用户身份ssh运行。根据所使用的配置版本,可能也可能不需要用户密码。一旦命令因任何原因终止,SSH 会话将结束。sudo rebootsupportsudosudosupportsudo reboot

您可以使用特定命令定义多个 SSH 密钥,每个要运行的命令都有一个唯一的 SSH 密钥。


如果支持人员根本不能使用 SSH,那么您可以设置一个能够运行 CGI 脚本的 Web 服务器,为您希望支持人员能够执行的每个操作编写一个脚本(根据需要使用 和 来sudo授权NOPASSWD:用户过去常常以 root 身份运行 CGI 脚本来运行必要的命令),并编写一个简单的网页,其中包含操作菜单作为相应脚本的链接。

如果您这样做,您绝对应该通过 IP 地址限制对该网页的访问和/或要求身份验证 + HTTPS。

相关内容