0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

首個(gè)Rust版sudo發(fā)布!

Linux愛(ài)好者 ? 來(lái)源:51CTO技術(shù)棧 ? 2023-09-01 15:59 ? 次閱讀

大家對(duì)于sudo命令太熟悉了,這個(gè)實(shí)用又危險(xiǎn)的命令,甚至衍生出了“sudo rm -rf”類(lèi)似的Linux圈的流行梗。近年來(lái),sudo命令已經(jīng)被一些開(kāi)發(fā)組織盯上,開(kāi)始了安全重構(gòu)?,F(xiàn)在,已經(jīng)有Linux發(fā)行版本開(kāi)始用上了諸如Rust等內(nèi)存安全的語(yǔ)言重寫(xiě)過(guò)的sudo命令。

好消息是,就在今天,Rust版本的sudo出道了!互聯(lián)網(wǎng)安全研究小組(ISRG)的Prossimo項(xiàng)目剛剛宣布了sudo-rs的第一個(gè)穩(wěn)定版本。

用Rust重寫(xiě)的sudo到底有什么不同?目前進(jìn)展如何?本文這就帶領(lǐng)諸君一覽首個(gè)用Rust重構(gòu)的內(nèi)存安全版的sudo -rs項(xiàng)目。

內(nèi)存安全的sudo首個(gè)穩(wěn)定版本 近兩年,“內(nèi)存安全軟件”已經(jīng)被美國(guó)政府機(jī)構(gòu)提上了安全議程。而早在今年5月,就有報(bào)道稱Prossimo正計(jì)劃將sudo從C移植到Rust的說(shuō)法。 在無(wú)處不在的 Linux 操作系統(tǒng)中,sudo 實(shí)用程序是工程師跨越用戶和管理帳戶之間隱私邊界的最常用方法之一。因此,其安全性至關(guān)重要。 sudo-rs項(xiàng)目則是用 Rust 編寫(xiě)的 sudo 和 su 的、面向安全和內(nèi)存安全的實(shí)現(xiàn)。官網(wǎng)聲明中顯示,sudo-rs 目前僅針對(duì)基于 Linux 的操作系統(tǒng);運(yùn)行 sudo-rs 需要 Linux 內(nèi)核 5.9 或更高版本。

3677427a-487b-11ee-97a6-92fbcf53809c.png

sudo-rs 是用 Rust 編寫(xiě)的。所需的最低 Rust 版本是 1.70。如果所用的Linux 發(fā)行版未打包該版本(或更高版本),可以通過(guò)rustup安裝最新版本。此外,開(kāi)發(fā)者還需要 PAM 的 C 開(kāi)發(fā)文件(比如在 Debian上的libpam0g-dev、Fedora上的pam-devel等)。

安裝依賴項(xiàng)后,構(gòu)建 sudo-rs 就變得簡(jiǎn)單了:

cargo build --release

這會(huì)產(chǎn)生一個(gè)二進(jìn)制文件target/release/sudo。但是,此二進(jìn)制文件必須設(shè)置 setuid 標(biāo)志,并且必須由 root 用戶擁有,才能提供任何有用的功能。同時(shí),sudo-rs 需要 sudoers 配置文件。如果sudoers 配置文件存在,則將從該文件加載,否則將使用/etc/sudoers-rs原始位置。

與C版sudo有何不同?

sudo-rs 支持的功能比 sudo 少。其中一些是設(shè)計(jì)使然。在大多數(shù)情況下,如果你嘗試不支持的操作(例如,使用未實(shí)現(xiàn)的配置標(biāo)志或命令行選項(xiàng)),你將收到明顯的錯(cuò)誤。除上述情況外,用戶配置/etc/sudoers需要注意:

(1)use_pty默認(rèn)情況下啟用,可禁用。

(2)env_reset被忽略——這總是啟用的。

(3)visiblepw被忽略——這始終被禁用。

(4)verifypw目前被忽略;始終需要密碼sudo -v。

(5)mail_badpass、always_set_home、always_query_group_plugin和 match_group_by_gid不適用于該版本的實(shí)現(xiàn),但出于兼容性原因而被忽略。

其他一些需要注意的顯著的限制:

(1)部分功能尚不支持,特別是使用和sudoedit,以及防止 shell 逃逸時(shí)的NOEXEC和NOINTERCEPT。

(2)Defaults(尚)不支持用于更細(xì)粒度控制的每用戶、每命令、每主機(jī)sudoers 條目。

(3)此時(shí) sudo-rs 始終使用 PAM 進(jìn)行身份驗(yàn)證,你的系統(tǒng)必須設(shè)置為 PAM。

(4)sudo-rs 將使用sudo服務(wù)配置。這也意味著資源限制、umask 等必須通過(guò) PAM 配置,而不是通過(guò) sudoers 文件。

sudo-rs 將不包括原始 sudo 的 sendmail 支持。sudoers 文件必須是有效的 UTF-8。如果你發(fā)現(xiàn)缺少原始 sudo 的常見(jiàn)用例,請(qǐng)?jiān)谖覀兊膯?wèn)題跟蹤器中為其創(chuàng)建功能請(qǐng)求。

為什么要重寫(xiě)sudo?

其實(shí),原始的sudo已經(jīng)變得相對(duì)不安全了。最早的sudo開(kāi)發(fā)始于 1980 年代(早于GNU/Linux的發(fā)布),幾十年來(lái),它已經(jīng)成為在執(zhí)行更改的同時(shí)將操作系統(tǒng)的風(fēng)險(xiǎn)降到最低的一個(gè)基本的命令工具。但因?yàn)樗?C 語(yǔ)言編寫(xiě)的,近些年來(lái)時(shí)不時(shí)就會(huì)曝出一些錯(cuò)誤或漏洞,而這其中有專業(yè)分析估計(jì)有三分之一的安全錯(cuò)誤都是內(nèi)存管理問(wèn)題。

另外,sudo有許多不常用的功能,也會(huì)為安全風(fēng)險(xiǎn)帶來(lái)更多的攻擊面。為此,使用Rust重寫(xiě)后的sudo -rs項(xiàng)目則大大提高了原始sudo的安全性:

(1)使用內(nèi)存安全語(yǔ)言 (Rust),解決因內(nèi)存管理而產(chǎn)生的的內(nèi)存方面的安全錯(cuò)誤問(wèn)題;

(2)省略不常用的功能以減少攻擊面;

(3)開(kāi)發(fā)一個(gè)廣泛的測(cè)試套件,甚至設(shè)法找到原始 sudo 中的錯(cuò)誤。

已經(jīng)有Linux發(fā)版采用了!

早在今年1月,就有企業(yè)宣布推出了內(nèi)存安全版的Linux系統(tǒng):Wolfi Linux,宣稱能從根本上杜絕大量已知軟件漏洞。而有意思的是,這家企業(yè):Chainguard 的首席執(zhí)行官 Dan Lorenc 表示,并不是完全由內(nèi)存安全語(yǔ)言編寫(xiě)的,而是一個(gè)組合——“Wolfi 是使用以內(nèi)存安全語(yǔ)言編寫(xiě)的新庫(kù)和不安全語(yǔ)言編寫(xiě)的庫(kù)的組合開(kāi)發(fā)的,是內(nèi)存安全的系統(tǒng)級(jí)實(shí)現(xiàn)。”

此外,Chainguard 還與互聯(lián)網(wǎng)安全研究小組 (ISRG) 合作,為 Wolfi 創(chuàng)建了一個(gè) Rustls TLS 庫(kù),可用作 libcurl 中的默認(rèn)后端。所有 curl 鏡像或任何其他依賴于 curl 的鏡像都能夠利用 Wolfi 的內(nèi)存安全屬性。

sudo -rs的初衷與Wolfi Linux所致力的內(nèi)存安全方向完全一致,因此,Wolfi Linux系統(tǒng)已經(jīng)可以使用 sudo -rs命令。Dan Lorenc 表示:“當(dāng)我們第一次著手構(gòu)建 Wolfi 時(shí),確保內(nèi)存安全始終是首要任務(wù)。”

相信之后也會(huì)有不少打算與Rust兼容的發(fā)行版也會(huì)漸漸采用sudo -rs。

開(kāi)發(fā)團(tuán)隊(duì)的陣容也相當(dāng)硬核

首先,該項(xiàng)目是互聯(lián)網(wǎng)安全研究小組 (ISRG) 的 Prossimo 項(xiàng)目發(fā)起的,目的是為了保護(hù)關(guān)鍵軟件的內(nèi)存安全性。當(dāng)時(shí)選擇Rust來(lái)“保護(hù)”Sudo,也是因?yàn)閟udo完美地契合以下四個(gè)條件:

(1)使用非常廣泛(幾乎每個(gè)服務(wù)器 / 客戶端都在使用)

(2)被應(yīng)用于重要的安全邊界

(3)執(zhí)行關(guān)鍵功能

(4)是否使用了內(nèi)存不安全的語(yǔ)言編寫(xiě)(例如 C、C++、asm)

其次,其實(shí)這個(gè)項(xiàng)目早在今年5月份就有報(bào)道,F(xiàn)errous Systems 和 Tweede Golf 都是致力于軟件安全的公司,前者有著非常豐富經(jīng)驗(yàn)的Rust大神坐鎮(zhèn),服務(wù)了諸如mozilla、安卓等全球知名的項(xiàng)目;后者公司的大佬則開(kāi)發(fā)過(guò)許多的開(kāi)源工具包,諸如Node.js、Rust&Embedded Rust、Go、React、Symfony和Flutter,以及操作端的Docker、Ansible和Kubernetes等等??芍^實(shí)力不俗。

368c258c-487b-11ee-97a6-92fbcf53809c.png

最后,我們從項(xiàng)目的官網(wǎng)上也可以看到,亞馬遜為這個(gè)項(xiàng)目提供了資金支持,并表示支持想內(nèi)存安全軟件的過(guò)渡。

值得一提的是,就連最初的基于 C 的 sudo 實(shí)用程序的維護(hù)者Todd C. Miller也參與了進(jìn)來(lái), Todd 也抽出時(shí)間為該項(xiàng)目提供了有關(guān)實(shí)施 sudo-rs 方面的中肯建議。

接下來(lái)計(jì)劃:增加企業(yè)功能、更多發(fā)版支持

但啟動(dòng)這個(gè)項(xiàng)目要更早,是在2022年的12月份就已經(jīng)啟動(dòng)?,F(xiàn)在sudo-rs這個(gè)項(xiàng)目將獲得了里程碑式的成果,從即將到來(lái)的9月份開(kāi)始,這個(gè)聯(lián)合開(kāi)發(fā)團(tuán)隊(duì)將開(kāi)始 2023 年 9 月的里程碑 4我們的工作計(jì)劃,主要是圍繞企業(yè)功能展開(kāi),比如多用戶系統(tǒng)的安全功能(例如NOEXEC)、審核跟蹤日志、sudoers的主機(jī)名匹配、支持16個(gè)以上的用戶組(group_file插件)等。

36c70c92-487b-11ee-97a6-92fbcf53809c.png

第五個(gè)里程碑則可能更為諸位所期待:除了Debian/Ubuntu以外的發(fā)行版以外,F(xiàn)edora版本也將提供支持,SELinux和AppArmor支持、sudoedit實(shí)現(xiàn)等等。

寫(xiě)在最后:Linux面臨的安全債

Linux現(xiàn)在無(wú)處不在,但并不意味著萬(wàn)事大吉。

在Lorenc 看來(lái),開(kāi)發(fā) “內(nèi)存安全版” Linux 系統(tǒng)意義重大,目的在于提供一個(gè)更安全的平臺(tái)來(lái)保護(hù)嚴(yán)重依賴 Linux 來(lái)部署應(yīng)用程序的軟件供應(yīng)鏈,今天在非內(nèi)存安全平臺(tái)上開(kāi)發(fā)應(yīng)用程序是不負(fù)責(zé)任的。

“sudo utility是安全關(guān)鍵工具的完美示例,它既普遍應(yīng)用又未被充分重視。對(duì)此類(lèi)工具的安全性改進(jìn)將對(duì)整個(gè)行業(yè)產(chǎn)生巨大影響。構(gòu)建第一個(gè) sudo-rs 版本的工作通過(guò)采用 Rust 等內(nèi)存安全語(yǔ)言,在消除潛在安全問(wèn)題方面邁出了一大步。這對(duì)于維護(hù)和維護(hù) Wolfi 作為想要解決大多數(shù)現(xiàn)代供應(yīng)鏈威脅的開(kāi)發(fā)人員的默認(rèn)安全基礎(chǔ)至關(guān)重要?!?這位ChainGuard 創(chuàng)始人非??春胹udo-rs。

與此同時(shí),絕大多數(shù)安全漏洞都可以追溯到涉及應(yīng)用程序如何訪問(wèn)內(nèi)存的問(wèn)題。然后,網(wǎng)絡(luò)罪犯利用這些漏洞發(fā)起攻擊,例如,利用緩沖區(qū)溢出來(lái)訪問(wèn)數(shù)據(jù)等等。

而包括Linux之父在內(nèi)的維護(hù)者們,也已經(jīng)開(kāi)始接受 Rust 作為 C 的替代品,來(lái)消除 Linux 內(nèi)核中的這些類(lèi)型的漏洞。

雖然,這些遺留代碼數(shù)以萬(wàn)億計(jì),現(xiàn)在看起來(lái)是一項(xiàng)難以完成的艱巨任務(wù),但正如同Linus在去年的開(kāi)源峰會(huì)上所做的那樣:在聲稱在6.1版本將Rust合并到主線上的同時(shí),提前給各位打個(gè)預(yù)防針:

“以防此事搞砸了我又發(fā)脾氣,先給大家道個(gè)歉!”

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207897
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6545

    瀏覽量

    122738
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    226

    瀏覽量

    6497

原文標(biāo)題:首個(gè) Rust 版 sudo 發(fā)布!

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    未來(lái)嵌入式系統(tǒng)的黃金搭檔 MCX N947遇上Rust

    ? Rust 介紹 Rust 是一門(mén)注重安全的語(yǔ)言,相比于 C/C++/ASM 有著更高級(jí)的抽象能力、編譯器帶來(lái)的安全特性與廣泛友好的社區(qū)支持。 Linux 與 Windows 內(nèi)核也都
    的頭像 發(fā)表于 07-25 09:14 ?1067次閱讀
    未來(lái)嵌入式系統(tǒng)的黃金搭檔 MCX N947遇上<b class='flag-5'>Rust</b>

    在Aurix Tc375Lk上使用Rust編程語(yǔ)言可以嗎?

    您好,如果我想在 Aurix Tc375Lk 上使用 Rust 編程語(yǔ)言,可以嗎?如果是,鏈接 rust 編譯器 ADS 和 freetoolchain 的步驟是什么?你有在 ADS 或 freetoolchian 中鏈接編譯器的用戶指南嗎? 請(qǐng)?jiān)敿?xì)說(shuō)明謝謝
    發(fā)表于 05-17 13:42

    微軟正式發(fā)布適用于Windows的Sudo

    微軟已在 Windows 11 Insider Preview Build 26052 中發(fā)布適用于 Windows 的 Sudo,并將其在 MIT 協(xié)議下進(jìn)行開(kāi)源。
    的頭像 發(fā)表于 03-19 09:20 ?653次閱讀
    微軟正式<b class='flag-5'>發(fā)布</b>適用于Windows的<b class='flag-5'>Sudo</b>

    [鴻蒙]OpenHarmony4.0的Rust開(kāi)發(fā)

    背景 Rust 是一門(mén)靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開(kāi)發(fā)等優(yōu)勢(shì)。Rust 官方也使用 Cargo 工具來(lái)專門(mén)為 Rust 代碼創(chuàng)建工程和構(gòu)建編譯
    的頭像 發(fā)表于 02-26 17:28 ?658次閱讀
    [鴻蒙]OpenHarmony4.0的<b class='flag-5'>Rust</b>開(kāi)發(fā)

    谷歌捐款100萬(wàn)美元給Rust基金會(huì),以增強(qiáng)C++與Rust的交互性

    如今,谷歌多項(xiàng)核心業(yè)務(wù)仍以 C++為主要編程語(yǔ)言,雖然無(wú)法直接使用Rust替代現(xiàn)有的C++程序,但谷歌依然選擇支持Rust基金會(huì)的“Interop Initiative”計(jì)劃,幫助那些選用C++的機(jī)構(gòu)更為順暢地過(guò)渡至Rust上。
    的頭像 發(fā)表于 02-19 15:41 ?468次閱讀

    鴻蒙OS之Rust開(kāi)發(fā)

    Rust是一門(mén)靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開(kāi)發(fā)等優(yōu)勢(shì)。
    的頭像 發(fā)表于 01-29 17:19 ?744次閱讀

    一次Rust重寫(xiě)基礎(chǔ)軟件的實(shí)踐

    受到2022年“谷歌使用Rust重寫(xiě)Android系統(tǒng)且所有Rust代碼的內(nèi)存安全漏洞為零” [1] 的啟發(fā),最近筆者懷著濃厚的興趣也順應(yīng)Rust 的潮流,嘗試著將一款C語(yǔ)言開(kāi)發(fā)的基礎(chǔ)軟件轉(zhuǎn)化
    的頭像 發(fā)表于 01-25 11:21 ?480次閱讀

    從Rustup出發(fā)看Rust編譯生態(tài)

    從Rustup出發(fā)看Rust編譯生態(tài) 1. Rust和LLVM的關(guān)系是怎樣的? 2. Rustup中targets是什么,為什么可以安裝多個(gè)? 3. Rust在windows上為什么需要安裝Visual studio?
    的頭像 發(fā)表于 01-02 11:00 ?396次閱讀

    su與sudo命令介紹及主要用法

    大家在自己實(shí)驗(yàn)服務(wù)器上可能不會(huì)用到su與sudo命令,因?yàn)橐恢庇弥鴕oot用戶進(jìn)行操作。
    的頭像 發(fā)表于 11-27 09:31 ?861次閱讀

    如何編寫(xiě)高性能的Rust代碼

    為了最大限度地提高Rust應(yīng)用程序的性能,你需要了解支持代碼的底層硬件架構(gòu),如何優(yōu)化算法和數(shù)據(jù)結(jié)構(gòu),以及如何對(duì)代碼進(jìn)行配置和基準(zhǔn)測(cè)試。在本文中,我們將簡(jiǎn)要介紹這些主題,希望能更好地理解如何編寫(xiě)高性能的Rust代碼。
    的頭像 發(fā)表于 11-03 14:28 ?683次閱讀
    如何編寫(xiě)高性能的<b class='flag-5'>Rust</b>代碼

    使用Rust優(yōu)化Python性能

    在數(shù)據(jù)分析領(lǐng)域Python無(wú)疑是最流行的編程語(yǔ)言,但是Python有一個(gè)硬傷就是作為一個(gè)編譯語(yǔ)言在性能上有些微的欠缺。而同樣最流行的語(yǔ)言Rust則在性能方面表現(xiàn)優(yōu)秀。本文我們一起學(xué)習(xí)一個(gè)優(yōu)化項(xiàng)目的實(shí)踐,對(duì)一個(gè)數(shù)據(jù)分析程序,改為Rust后將性能提高了18萬(wàn)倍經(jīng)歷。
    的頭像 發(fā)表于 11-01 15:59 ?733次閱讀
    使用<b class='flag-5'>Rust</b>優(yōu)化Python性能

    什么是sudo rm -rf?為什么這個(gè)命令如此危險(xiǎn)?

    sudo rm -rf 是一個(gè)linux的命令行命令,用于在系統(tǒng)中刪除文件和目錄。sudo表示以管理員權(quán)限運(yùn)行該命令。
    的頭像 發(fā)表于 10-24 18:25 ?2613次閱讀

    如何用Rust通過(guò)JNI和Java進(jìn)行交互

    近期工作中有Rust和Java互相調(diào)用需求,這篇文章主要介紹如何用Rust通過(guò)JNI和Java進(jìn)行交互,還有記錄一下開(kāi)發(fā)過(guò)程中遇到的一些坑。
    的頭像 發(fā)表于 10-17 11:41 ?633次閱讀

    Rust語(yǔ)言如何與 InfluxDB 集成

    Rust 是一種系統(tǒng)級(jí)編程語(yǔ)言,具有高性能和內(nèi)存安全性。InfluxDB 是一個(gè)開(kāi)源的時(shí)間序列數(shù)據(jù)庫(kù),用于存儲(chǔ)、查詢和可視化大規(guī)模數(shù)據(jù)集。Rust 語(yǔ)言可以與 InfluxDB 集成,提供高效
    的頭像 發(fā)表于 09-30 16:45 ?951次閱讀

    Rust GUI實(shí)踐之Rust-Qt模塊

    Rust-Qt 是 Rust 語(yǔ)言的一個(gè) Qt 綁定庫(kù),它允許 Rust 開(kāi)發(fā)者使用 Qt 框架來(lái)創(chuàng)建跨平臺(tái)的圖形界面應(yīng)用程序。Qt 是一個(gè)跨平臺(tái)的應(yīng)用程序框架,它提供了一系列的工具和庫(kù),可以幫助
    的頭像 發(fā)表于 09-30 16:43 ?1375次閱讀