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

Str*_*Bad 6 shell ssh account-restrictions

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

rsync --server --sender -lHogDtpre.iLs . //home/dummyuser/data/"
Run Code Online (Sandbox Code Playgroud)

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

小智 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
Run Code Online (Sandbox Code Playgroud)

编译新的 shell:

gcc -o /bin/rsyncshell /tmp/rsyncshell.c
Run Code Online (Sandbox Code Playgroud)

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