当通过 限制用户只能使用单个命令时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