添加只能远程执行脚本的用户

Han*_*ndy 14 ssh account-restrictions

我想创建一个只能做一件事的用户:通过 ssh 指定驻留在一个特定文件夹中的脚本(和脚本的命令行参数)(为了这个问题,让我们称之为/local/remote_only_scripts/foo)并让该脚本执行并返回它的输出。

澄清一些我不希望用户能够做的事情的例子:

  • 本地登录账号。登录应用程序是/bin/login. 它不是/local/remote_only_scripts/foo文件夹中的脚本,因此不应由用户调用。
  • 远程登录帐户。再次登录(是 ssh 调用的内容吗?)不是相关文件夹中的脚本。
  • 列出目录的内容。ls 在/bin/ls. 它不是相应目录中的脚本。
  • 编辑该目录中的文件。emacs、vi、gedit 大多数其他编辑器都不是该目录中的脚本。
  • 查看该目录中文件的内容。
  • 执行那个目录下他无权执行的文件。

请注意,这些示例还有许多其他我不希望用户能够执行的操作。在考虑一个动作时,问“这是由 中的脚本完成的/local/remote_only_scripts/foo吗?” 如果答案是否定的,用户就不能这样做。如果答案是肯定的,那么用户应该能够做到。

PS:让我澄清一下“添加用户”的意思。我的意思不是将用户添加到某个 ssh 子系统。相反,我的意思是将用户添加到计算机系统中。所以,例如,我有一个运行 debian stable 的系统,通过它的地址来调用它,www.hg.bar.com。我想添加一个用户(通过 kuser、users-admin 或 useradd 或类似的方式)称他为 hg_guest。hg_guest 无法在本地登录或执行上述列表中的任何操作。hg_guest 所能做的就是“远程”执行脚本。我说他应该可以通过ssh这样做,但现在想想,也许让他使用ssh可能会让他在本地登录,所以可能需要一些其他机制。

Cor*_*ren 12

在authorized_keys 文件中有一个命令选项。此选项似乎完全符合您的要求。

请注意,它不是 chroot 或受限制的 shell。它只允许通过 ssh 执行那些命令。以您的示例,它将是:

ssh somehost /local/remote_only_scripts/foo
Run Code Online (Sandbox Code Playgroud)

对于这个authorized_keys 文件:

command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key... 
Run Code Online (Sandbox Code Playgroud)

如果您不希望您的用户能够在本地登录,则有很多方法。你可以:

  • 只需将其外壳设置为/bin/false(也许您需要/bin/true因为 ssh 需要有效登录)
  • 锁定其密码,请参阅 passwd -l

编辑:添加了更多限制选项并阐明了如何删除本地访问。