如何设置只能启动shell脚本的受限用户?

如何设置只能启动shell脚本的受限用户?

如何创建一个本地用户,它可以通过 SSH 登录到 linux 机器,例如:SLES12,并且只能执行 SSH 登录后出现的 shell 脚本?

所以它不应该能够欺骗它会读取任何其他用户777文件或发出其他任何命令。

shellscript 将是一个基于菜单的小东西,它通过 sudo 执行命令,我可以处理,唯一的问题是用户的限制,它确实应该在登录时自动面对基于菜单的脚本,但不应该能够通过例如“ssh user@linuxmachine“somecmd””发出命令

答案1

您可以使用服务器端文件command=中的标志强制执行此操作。authorized_keysman sshd

command="command"

指定每当使用此密钥进行身份验证时都执行该命令。用户提供的命令(如果有)将被忽略。如果客户端请求 pty,则该命令在 pty 上运行;否则它会在没有 tty 的情况下运行。如果需要 8 位干净通道,则不得请求 pty 或应指定 no-pty。通过用反斜杠引用命令,可以将引号包含在命令中。

此选项可能有助于限制某些公钥仅执行特定操作。一个示例可能是允许远程备份但仅允许其他任何内容的密钥。请注意,客户端可以指定 TCP 和/或 X11 转发,除非明确禁止它们,例如使用限制密钥选项。

客户端最初提供的命令可在 SSH_ORIGINAL_COMMAND 环境变量中找到。请注意,此选项适用于 shell、命令或子系统执行。另请注意,此命令可能会被 sshd_config(5) ForceCommand 指令取代。

如果指定了命令并且强制命令嵌入在用于身份验证的证书中,则仅当两个命令相同时才会接受证书。

您会在有关设置 git、bzr 和朋友的 ssh 访问的教程中找到很多这方面的示例,您希望它们除了访问版本控制之外什么也不做。

请注意,还有一个sshd_config指令ForceCommand,它的作用基本相同(“强制执行由 ForceCommand 指定的命令,忽略客户端和 ~/.ssh/rc(如果存在)提供的任何命令。该命令是通过使用用户的登录名来调用的”带有 -c 选项的 shell。”),但如果您使用基于密码的登录,并且可以限制为某些源 IP,也可以使用。不过,它需要进入全局服务器配置,因此它不能很好地扩展。

答案2

您正在寻找的是受限制的外壳。研究 rbash 以及随之而来的安全问题。如果您设置正确,这可能对您有用。更好的选择是使用虚拟环境或监狱(如果您的操作系统支持的话)。

答案3

预期的威胁级别是多少?菜单系统能够承受意外误用和随意实验是否足够,或者是否可以保护可能吸引严重攻击的实际价值?

对于更随意的一端,这个老式的 Unix 技巧可能就足够了:

确保菜单脚本无需任何参数即可执行,将其添加到/etc/shells然后用于chsh将菜单脚本设置为该用户的 shell。

您需要确保用户无法从菜单脚本转入命令模式,但如果用户只是中断菜单脚本,则受限会话就会结束。

如果用户尝试执行其他命令(例如使用语法ssh <host> <command>),则将尝试使用菜单脚本代替常规 shell 来执行这些命令。如果菜单脚本在任何情况下都不带参数,则尝试将失败,并且用户无论如何都会进入菜单。

这适用于传统的基于密码的登录;如果可以强制使用专门的 SSH 密钥身份验证,则文件command=中的标志authorized_keys,如建议的乌尔里希·施瓦茨几乎处于同一水平。

相关内容