近年來,Rust 重構的熱潮席捲整個開發圈,Rust 在安全性、高效性和可維護性等方面都有一定優勢,包括 Windows、Linux 內核也帶來了 Rust 支持。

統信軟件今日宣佈,統信 UOS 服務器版將於不久後推出 Rust 版 Bash,名為 utshell,旨在突破傳統 Shell 所面臨的安全/侷限。

統信 UOS 將推 Rust 版 Bash 命令行工具 utshell(附下載地址)_Bash

注:Bash 是一種廣泛應用於各種 Unix 和 Linux 系統的 Shell 程序,是 Bourne shell 的後繼兼容版本與開放源代碼版本。

統信軟件表示,在 Bash 中,有一些命令沒有對參數進行防篡改檢查,因而給系統帶來了安全風險。

例如,alias 命令允許用户為其他命令或命令序列創建別名,然而它並未對參數進行防篡改檢查,進而導致未經檢查的參數可能會被利用來執行惡意程序或進行未經授權的操作。

統信 UOS 將推 Rust 版 Bash 命令行工具 utshell(附下載地址)_Rust_02

為了應對上述問題,utshell 對 alias 命令的規則進行了明確界定,目的在於確保使用的便捷性,並且能夠有效地防止命令被惡意篡改,從而限制惡意行為或誤操作的發生。

當別名和 $PATH 下可執行文件重名時,只允許別名和可執行文件一致。例如,如果我們想要創建一個別名“ls”,那麼與之對應的可執行命令也必須是“ls”,且允許在命令中添加參數,以便用户可以根據自己的需求對命令進行個性化制定。

別名不能與其他別名、函數名稱發生重名,以避免在使用別名時出現二義性,進而更好地確保操作系統能夠正確理解用户的指令,避免混淆和誤解。

不僅僅限於 alias 命令,utshell 還對所有命令進行了檢查,並對那些可能受到惡意篡改威脅的命令進行了規則的優化處理,如 hash 和 function 命令等。

在 Bash 中,mapfile 命令是用於對數組進行賦值的工具,但它並沒有對數組的越界情況進行有效的檢查和控制。當用户輸入的參數數量超過數組容量時,溢出部分可能會被誤當作命令來執行,從而引發潛在的安全隱患。

統信 UOS 將推 Rust 版 Bash 命令行工具 utshell(附下載地址)_Bash_03

為了避免上述情況的發生,utshell 採取了對數組邊界的判斷措施。例如,當傳入的參數過多時,自動截斷或給出警示等,從而保證只有合法、預期的參數才能被傳遞給 mapfile 命令。

此外,通過使用 Rust 重構 Bash,utshell 不僅能繼承 Rust 的“源生”安全性,還能在代碼層面實現更高的自主可控性,從而提升系統的安全性和可靠性。

6 月初,統信 UOS 服務器版 V20(1060)已集成了 utshell 的部分功能,為即將發佈的完整版 utshell 提供了初步體驗。

附下載地址:

deepin 社區地址:

https://github.com/linuxdeepin/utshell

歐拉社區地址:

https://gitee.com/openeuler/utshell

龍蜥社區地址:

https://gitee.com/anolis/utshell