对于仅限于单个命令的 SSH 用户使用什么默认 shell

对于仅限于单个命令的 SSH 用户使用什么默认 shell

当通过 限制用户只能使用单个命令时ssh,应该为用户使用什么默认 shell?这是后续如何通过 SSH 来利用 shellshock?我有一台运行 ssh 服务器并有一个虚拟用户的机器。我通过command在文件中指定一个选项来限制这个虚拟用户通过 ssh 运行单个命令authorized_keys。我一直使用bash作为虚拟用户的默认 shell,但自从 shellshock bug 以来,我一直在想也许有一个更安全的 shell。虚拟用户只被允许运行一个rsync命令,所以我想象它会在大多数 shell 上运行。具体来说,允许用户运行的命令是:

rsync --server --sender -lHogDtpre.iLs . //home/dummyuser/data/"

我不是服务器的管理员,尽管我可以要求进行一些简单的更改,所以在文件中设置诸如 chroot 监狱之类的东西/etc/sshd/sshd_config是不可能的。理想情况下,我可以通过使用不受限制的密钥以虚拟用户身份登录来限制命令。

答案1

你可以编写这个 shell:

cat >/tmp/rsyncshell.c <<EOF
#include <unistd.h>
char *argv[] = (char *[]) {
        "/usr/bin/rsync", "--server", "--sender", 
        "-lHogDtpre.iLs", ".", "//home/dummyuser/data/" };
int main () { execv(argv[0], argv); }
EOF

编译新的 shell:

gcc -o /bin/rsyncshell /tmp/rsyncshell.c

然后将 dummyuser 解释器设置为/bin/rsyncshell

相关内容