Bash
rbash - 如何允許一些命令並修復自動完成?
我需要為某些使用者設置受限外殼。
這是通過以下方式實現的:
sudo ln -s /bin/bash /bin/rbash sudo useradd test1 -s /bin/rbash
新使用者很好,預設情況下它位於受限制的外殼上,但我發現
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。
首先,從
bash
5.0.3 版開始,rbash
它仍然不安全——它不會在執行.profile
or期間禁用 Ctrl/C,這意味著在預設值受到適當限制.bash_profile
之前,很可能會突破到 shell 提示符。$PATH
此時很容易執行(比如說)dash
然後bash
得到一個乾淨的外殼。該
cd
命令被設計拒絕。繼續閱讀rbash
(查看man bash
並蒐索rbash
)以查看完整的詳細資訊,但一個簡短的列表包括以下被拒絕操作的列表:
- 改變目錄
cd
- 設置或取消設置
SHELL
,PATH
,ENV
, 或BASH_ENV
- 指定包含“/”的命令名稱
- 使用
>
,>|
,<>
,>&
,&>
和>>
重定向運算符重定向輸出- 使用 set +r 或 set +o 限制關閉受限模式
不幸的是,自動完成在使用者的上下文中執行,並將某些命令的輸出重定向或嘗試重定向到
/dev/null
.其他 shell(例如
rsh
(sh
) )在執行期間正確實現了鎖定,.profile
以便暫時禁用 Ctrl/C,但cd
仍然存在限制。你說你需要
cd
工作。在這種情況下,您將無法使用受限外殼。當然,這取決於您的要求,使用 chroot 環境可能會更好。或者,也許執行必要任務的腳本就足夠了。如果可以將其放置到通過該目錄訪問的目錄中,$PATH
則使用者可以直接使用該腳本。