rbash - 如何允许某些命令并修复自动完成?

rbash - 如何允许某些命令并修复自动完成?

我需要为某些用户提供受限的 shell。

这是通过以下方式实现的:

sudo ln -s /bin/bash /bin/rbash
sudo useradd test1 -s /bin/rbash

新用户很好,默认情况下它会登陆受限制的 shell,但我发现cd不允许的情况很烦人,自动完成功能不起作用,例如:

test1@hostone [ ~ ]$ cd /
-rbash: cd: restricted
test1@hostone [ ~ ]$ sudo cd /con<TAB pressed here>-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a3': invalid number specifier
-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a0': invalid number specifier
^C
test1@hostone [ ~ ]$ sudo cd /config
sudo: cd: command not found
test1@hostone [ ~ ]$ docker logs ag<TAB pressed here>-rbash: /dev/null: restricted: cannot redirect output
-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a3': invalid number specifier
-rbash: /dev/null: restricted: cannot redirect output
bash: _upvars: `-a0': invalid number specifier
^C
test1@hostone [ ~ ]$ 

如何允许单独的命令,例如cd?我应该如何修复自动完成功能?

如果您想知道操作系统是 Photon OS。

答案1

首先,从bash版本 5.0.3 开始,rbash仍然不安全 - 它不会在执行.profile或期间禁用 Ctrl/C,这意味着在默认值受到适当限制.bash_profile之前,很可能会进入 shell 提示符。$PATH此时很容易执行(比如说)dash,然后bash获得一个干净的 shell。

cd命令在设计上被拒绝。阅读rbash(请参阅man bash并搜索rbash)以查看完整的详细信息,但简短的列表包括以下被拒绝操作的列表:

  • 更改目录cd
  • SHELL设置或取消设置、PATHENV或的值BASH_ENV
  • 指定包含“/”的命令名称
  • 使用>>|<>>&&>>>重定向运算符重定向输出
  • 使用 set +r 或 set +o strict 关闭限制模式

不幸的是,自动完成在用户上下文中运行,并将某些命令的输出重定向(或尝试重定向)到/dev/null.

其他 shell(例如rsh( sh))在 执行期间正确实现锁定,.profile以便暂时禁用 Ctrl/C,但对 的限制cd仍然存在。

你说你需要cd工作。在这种情况下,您将无法使用受限 shell。当然,根据您的要求,使用 chroot 环境可能会更好。或者,也许执行必要任务的脚本就足够了。如果可以将其放入可访问的目录中,$PATH则用户可以直接使用该脚本。

相关内容