如何限制用户通过 SSH 登录时只能使用 rbash

如何限制用户通过 SSH 登录时只能使用 rbash

我想限制服务器上的某些用户只能执行某些命令。为此,我发现最常见的方法是使用rbash

虽然我可以找到很多网站讨论 rbash,但我很难找到任何有关如何正确使用它的信息。我能找到的最常见方法是创建一个从 到/bin/rbash的符号链接/bin/bash,将受限用户的登录 shell 设置为,然后在用户主目录中/bin/rbash设置自定义的PATH~/.bash_profile

然而,我非常震惊地发现,在这种设置下,用户仍然可以使用 将文件复制到服务器scp,甚至可以使用 打开不受限制的 shell ssh user@host -t bash!似乎发生的情况是,SSH 服务器正在使用 将命令传递给服务器上的登录 shell -c,因此ssh user@host -t bash导致服务器运行/bin/rbash -c bash,这是可行的,因为.bash_profile尚未执行以限制路径。scp同样导致服务器运行/bin/rbash -c scp

现在我遇到了ForceCommandsshd 的指令。该指令基本上总是导致将配置的命令作为传递-c给登录 shell,而忽略客户端指定的任何命令。因此,如果ForceCommand设置为,则无论客户端是使用还是作为或其他方式调用的,都将始终在服务器上rbash执行命令。不幸的是,导致无法执行,因此我们最终得到一个受限制的 shell 和一个正常的,因此我们可以在那里调用以退出。/bin/rbash -c rbash-t bashscp/bin/rbash -c rbash.bash_profilePATHbash

我想要实现的目标:

  • 对于通过 SSH 连接的用户来说,应该没有办法避免受限的 shell
  • 理想情况下,仍然可以通过使用ssh user@server permitted_command
  • 配置不应该仅限于 SSH,因此例如在 TTY 上登录的用户也应该受到限制。

答案1

经过一段时间的试验,我发现问题的根源在于的安全性rbash取决于PATH设置,但大多数设置中PATH都设置了SSH 指定其自定义命令,而它需要指定

作为解决方案,我没有指定/bin/rbash(symlink to /bin/bash) 作为登录 shell,而是创建了一个 shell 脚本/usr/local/bin/rbash并将其用作登录 shell。该 shell 脚本具有以下内容:

#!/bin/bash -l
export PATH=/usr/local/rbin
exec /bin/bash -r "$@"

我也尝试了SetEnvsshd 的指令,并尝试在那里设置PATH。但是,我发现这个解决方案不太实用,因为它只为 SSH 设置配置,而且它在运行 时导致了很多错误/etc/profile,因为找不到那里使用的命令。此外,似乎存在一些风险,即其他一些 sshd 指令可能会允许客户端再次覆盖某些环境变量。

相关内容