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

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

我想创建一个只能做一件事的用户:通过 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可能会让他在本地登录,所以可能需要一些其他机制。

答案1

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

请注意,它不是 chroot 或受限 shell。它只允许通过 ssh 执行这些命令。以你的例子来说,它将是:

ssh somehost /local/remote_only_scripts/foo

对于这个authorized_keys文件:

command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key... 

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

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

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

答案2

尝试将此作为用户的登录 shell:

#!/bin/sh
basedir=/local/remote_only_scripts
while read -p '$ ' prog args; do
    if [ ! -x "$basedir/$prog" ]; then
        echo "Invalid program: $prog"
    else
        case "$prog $args" in
            *\**|*\?*|*\^*|*\&*|*\<*|*\>*|*\|*|*\;*|*\`*|*\[*|*\]*)
                echo "Invalid character in command";;
            *)
                eval "$prog $args"
                echo;; # force a trailing newline after the program
        esac
    fi
done

您可能还希望将其authorized_keys明确地包含在文件中,如 Coren 的回答所示;但替换 '.../foo;与这里的程序。这将阻止来自 SSH 的命令,例如sftpscpssh hostname command

答案3

万一他们只需要访问一个脚本,这对我来说非常有效。添加用户并将其默认 shell 更改为脚本的路径。当他们通过 ssh 连接时,它将执行脚本并关闭会话。

server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest

server1:/ # grep hg_guest /etc/passwd

hg_guest:x:2002:100::/home/hg_guest:/local/remote_only_scripts/foo/script.sh

相关内容