0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

首个Rust版sudo发布!

Linux爱好者 来源:51CTO技术栈 2023-09-01 15:59 次阅读

大家对于sudo命令太熟悉了,这个实用又危险的命令,甚至衍生出了“sudo rm -rf”类似的Linux圈的流行梗。近年来,sudo命令已经被一些开发组织盯上,开始了安全重构。现在,已经有Linux发行版本开始用上了诸如Rust等内存安全的语言重写过的sudo命令。

好消息是,就在今天,Rust版本的sudo出道了!互联网安全研究小组(ISRG)的Prossimo项目刚刚宣布了sudo-rs的第一个稳定版本。

用Rust重写的sudo到底有什么不同?目前进展如何?本文这就带领诸君一览首个用Rust重构的内存安全版的sudo -rs项目。

内存安全的sudo首个稳定版本 近两年,“内存安全软件”已经被美国政府机构提上了安全议程。而早在今年5月,就有报道称Prossimo正计划将sudo从C移植到Rust的说法。 在无处不在的 Linux 操作系统中,sudo 实用程序是工程师跨越用户和管理帐户之间隐私边界的最常用方法之一。因此,其安全性至关重要。 sudo-rs项目则是用 Rust 编写的 sudo 和 su 的、面向安全和内存安全的实现。官网声明中显示,sudo-rs 目前仅针对基于 Linux 的操作系统;运行 sudo-rs 需要 Linux 内核 5.9 或更高版本。

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

sudo-rs 是用 Rust 编写的。所需的最低 Rust 版本是 1.70。如果所用的Linux 发行版未打包该版本(或更高版本),可以通过rustup安装最新版本。此外,开发者还需要 PAM 的 C 开发文件(比如在 Debian上的libpam0g-dev、Fedora上的pam-devel等)。

安装依赖项后,构建 sudo-rs 就变得简单了:

cargo build --release

这会产生一个二进制文件target/release/sudo。但是,此二进制文件必须设置 setuid 标志,并且必须由 root 用户拥有,才能提供任何有用的功能。同时,sudo-rs 需要 sudoers 配置文件。如果sudoers 配置文件存在,则将从该文件加载,否则将使用/etc/sudoers-rs原始位置。

与C版sudo有何不同?

sudo-rs 支持的功能比 sudo 少。其中一些是设计使然。在大多数情况下,如果你尝试不支持的操作(例如,使用未实现的配置标志或命令行选项),你将收到明显的错误。除上述情况外,用户配置/etc/sudoers需要注意:

(1)use_pty默认情况下启用,可禁用。

(2)env_reset被忽略——这总是启用的。

(3)visiblepw被忽略——这始终被禁用。

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

(5)mail_badpass、always_set_home、always_query_group_plugin和 match_group_by_gid不适用于该版本的实现,但出于兼容性原因而被忽略。

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

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

(2)Defaults(尚)不支持用于更细粒度控制的每用户、每命令、每主机sudoers 条目。

(3)此时 sudo-rs 始终使用 PAM 进行身份验证,你的系统必须设置为 PAM。

(4)sudo-rs 将使用sudo服务配置。这也意味着资源限制、umask 等必须通过 PAM 配置,而不是通过 sudoers 文件。

sudo-rs 将不包括原始 sudo 的 sendmail 支持。sudoers 文件必须是有效的 UTF-8。如果你发现缺少原始 sudo 的常见用例,请在我们的问题跟踪器中为其创建功能请求。

为什么要重写sudo?

其实,原始的sudo已经变得相对不安全了。最早的sudo开发始于 1980 年代(早于GNU/Linux的发布),几十年来,它已经成为在执行更改的同时将操作系统的风险降到最低的一个基本的命令工具。但因为它是 C 语言编写的,近些年来时不时就会曝出一些错误或漏洞,而这其中有专业分析估计有三分之一的安全错误都是内存管理问题。

另外,sudo有许多不常用的功能,也会为安全风险带来更多的攻击面。为此,使用Rust重写后的sudo -rs项目则大大提高了原始sudo的安全性:

(1)使用内存安全语言 (Rust),解决因内存管理而产生的的内存方面的安全错误问题;

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

(3)开发一个广泛的测试套件,甚至设法找到原始 sudo 中的错误。

已经有Linux发版采用了!

早在今年1月,就有企业宣布推出了内存安全版的Linux系统:Wolfi Linux,宣称能从根本上杜绝大量已知软件漏洞。而有意思的是,这家企业:Chainguard 的首席执行官 Dan Lorenc 表示,并不是完全由内存安全语言编写的,而是一个组合——“Wolfi 是使用以内存安全语言编写的新库和不安全语言编写的库的组合开发的,是内存安全的系统级实现。”

此外,Chainguard 还与互联网安全研究小组 (ISRG) 合作,为 Wolfi 创建了一个 Rustls TLS 库,可用作 libcurl 中的默认后端。所有 curl 镜像或任何其他依赖于 curl 的镜像都能够利用 Wolfi 的内存安全属性。

sudo -rs的初衷与Wolfi Linux所致力的内存安全方向完全一致,因此,Wolfi Linux系统已经可以使用 sudo -rs命令。Dan Lorenc 表示:“当我们第一次着手构建 Wolfi 时,确保内存安全始终是首要任务。”

相信之后也会有不少打算与Rust兼容的发行版也会渐渐采用sudo -rs。

开发团队的阵容也相当硬核

首先,该项目是互联网安全研究小组 (ISRG) 的 Prossimo 项目发起的,目的是为了保护关键软件的内存安全性。当时选择Rust来“保护”Sudo,也是因为sudo完美地契合以下四个条件:

(1)使用非常广泛(几乎每个服务器 / 客户端都在使用)

(2)被应用于重要的安全边界

(3)执行关键功能

(4)是否使用了内存不安全的语言编写(例如 C、C++、asm)

其次,其实这个项目早在今年5月份就有报道,Ferrous Systems 和 Tweede Golf 都是致力于软件安全的公司,前者有着非常丰富经验的Rust大神坐镇,服务了诸如mozilla、安卓等全球知名的项目;后者公司的大佬则开发过许多的开源工具包,诸如Node.js、Rust&Embedded Rust、Go、React、Symfony和Flutter,以及操作端的Docker、Ansible和Kubernetes等等。可谓实力不俗。

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

最后,我们从项目的官网上也可以看到,亚马逊为这个项目提供了资金支持,并表示支持想内存安全软件的过渡。

值得一提的是,就连最初的基于 C 的 sudo 实用程序的维护者Todd C. Miller也参与了进来, Todd 也抽出时间为该项目提供了有关实施 sudo-rs 方面的中肯建议。

接下来计划:增加企业功能、更多发版支持

但启动这个项目要更早,是在2022年的12月份就已经启动。现在sudo-rs这个项目将获得了里程碑式的成果,从即将到来的9月份开始,这个联合开发团队将开始 2023 年 9 月的里程碑 4我们的工作计划,主要是围绕企业功能展开,比如多用户系统的安全功能(例如NOEXEC)、审核跟踪日志、sudoers的主机名匹配、支持16个以上的用户组(group_file插件)等。

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

第五个里程碑则可能更为诸位所期待:除了Debian/Ubuntu以外的发行版以外,Fedora版本也将提供支持,SELinux和AppArmor支持、sudoedit实现等等。

写在最后:Linux面临的安全债

Linux现在无处不在,但并不意味着万事大吉。

在Lorenc 看来,开发 “内存安全版” Linux 系统意义重大,目的在于提供一个更安全的平台来保护严重依赖 Linux 来部署应用程序的软件供应链,今天在非内存安全平台上开发应用程序是不负责任的。

“sudo utility是安全关键工具的完美示例,它既普遍应用又未被充分重视。对此类工具的安全性改进将对整个行业产生巨大影响。构建第一个 sudo-rs 版本的工作通过采用 Rust 等内存安全语言,在消除潜在安全问题方面迈出了一大步。这对于维护和维护 Wolfi 作为想要解决大多数现代供应链威胁的开发人员的默认安全基础至关重要。” 这位ChainGuard 创始人非常看好sudo-rs。

与此同时,绝大多数安全漏洞都可以追溯到涉及应用程序如何访问内存的问题。然后,网络罪犯利用这些漏洞发起攻击,例如,利用缓冲区溢出来访问数据等等。

而包括Linux之父在内的维护者们,也已经开始接受 Rust 作为 C 的替代品,来消除 Linux 内核中的这些类型的漏洞。

虽然,这些遗留代码数以万亿计,现在看起来是一项难以完成的艰巨任务,但正如同Linus在去年的开源峰会上所做的那样:在声称在6.1版本将Rust合并到主线上的同时,提前给各位打个预防针:

“以防此事搞砸了我又发脾气,先给大家道个歉!”

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208879
  • 操作系统
    +关注

    关注

    37

    文章

    6727

    浏览量

    123182
  • Rust
    +关注

    关注

    1

    文章

    228

    浏览量

    6566

原文标题:首个 Rust 版 sudo 发布!

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何用Rust编写一个ChatGPT桌面应用(保姆级教程)

    用IDEA开发的java仔) 安装 Rust 语言工具链:首先,请确保你已安装了 Rust 编程语言工具链,包括 Rust 编译器 (rustc) 和包管理工具 (cargo)。可以通过访问
    的头像 发表于 09-25 11:19 289次阅读
    如何用<b class='flag-5'>Rust</b>编写一个ChatGPT桌面应用(保姆级教程)

    未来嵌入式系统的黄金搭档 MCX N947遇上Rust

      Rust 介绍 Rust 是一门注重安全的语言,相比于 C/C++/ASM 有着更高级的抽象能力、编译器带来的安全特性与广泛友好的社区支持。 Linux 与 Windows 内核也都
    的头像 发表于 07-25 09:14 1287次阅读
    未来嵌入式系统的黄金搭档 MCX N947遇上<b class='flag-5'>Rust</b>

    Vector和HighTec推出基于Rust和AUTOSAR Classic实现安全应用的解决方案

    Vector和HighTec两家公司成功展示了Rust应用程序与基于C语言的AUTOSAR Classic基础软件的集成,这在行业内还属首次。这样一来,Rust及其优势可以被应用在有最高功能安全要求的汽车ECU中。
    的头像 发表于 07-17 14:42 642次阅读
    Vector和HighTec推出基于<b class='flag-5'>Rust</b>和AUTOSAR Classic实现安全应用的解决方案

    esp32s3开发时,每次改动,rust编译的时间都很长为什么?

    esp32s3 开发时,每次改动,rust编译时间太长
    发表于 06-05 06:36

    在Aurix Tc375Lk上使用Rust编程语言可以吗?

    您好,如果我想在 Aurix Tc375Lk 上使用 Rust 编程语言,可以吗?如果是,链接 rust 编译器 ADS 和 freetoolchain 的步骤是什么?你有在 ADS 或 freetoolchian 中链接编译器的用户指南吗? 请详细说明谢谢
    发表于 05-17 13:42

    微软正式发布适用于Windows的Sudo

    微软已在 Windows 11 Insider Preview Build 26052 中发布适用于 Windows 的 Sudo,并将其在 MIT 协议下进行开源。
    的头像 发表于 03-19 09:20 791次阅读
    微软正式<b class='flag-5'>发布</b>适用于Windows的<b class='flag-5'>Sudo</b>

    Android 15的首个开发者预览版现已发布

    Android 15 的首个开发者预览版现已发布,以便各位开发者能与我们通力协作,打造更优秀的 Android 平台。
    的头像 发表于 03-12 14:16 846次阅读
    Android 15的<b class='flag-5'>首个</b>开发者预览版现已<b class='flag-5'>发布</b>

    [鸿蒙]OpenHarmony4.0的Rust开发

    背景 Rust 是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust 官方也使用 Cargo 工具来专门为 Rust 代码创建工程和构建编译
    的头像 发表于 02-26 17:28 797次阅读
    [鸿蒙]OpenHarmony4.0的<b class='flag-5'>Rust</b>开发

    谷歌捐款100万美元给Rust基金会,以增强C++与Rust的交互性

    如今,谷歌多项核心业务仍以 C++为主要编程语言,虽然无法直接使用Rust替代现有的C++程序,但谷歌依然选择支持Rust基金会的“Interop Initiative”计划,帮助那些选用C++的机构更为顺畅地过渡至Rust上。
    的头像 发表于 02-19 15:41 598次阅读

    鸿蒙OS之Rust开发

    Rust是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。
    的头像 发表于 01-29 17:19 896次阅读

    一次Rust重写基础软件的实践

    受到2022年“谷歌使用Rust重写Android系统且所有Rust代码的内存安全漏洞为零” [1] 的启发,最近笔者怀着浓厚的兴趣也顺应Rust 的潮流,尝试着将一款C语言开发的基础软件转化
    的头像 发表于 01-25 11:21 593次阅读

    从Rustup出发看Rust编译生态

    从Rustup出发看Rust编译生态 1. Rust和LLVM的关系是怎样的? 2. Rustup中targets是什么,为什么可以安装多个? 3. Rust在windows上为什么需要安装Visual studio?
    的头像 发表于 01-02 11:00 495次阅读

    基于Rust的嵌入式符合ACID的键值数据库

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的键值数据库
    的头像 发表于 12-28 11:29 855次阅读

    如何在同步的 Rust 方法中调用异步代码 | Tokio 使用中的几点教训

    在同步的 Rust 方法中调用异步代码经常会导致一些问题,特别是对于不熟悉异步 Rust runtime 底层原理的初学者。
    的头像 发表于 12-24 16:23 1284次阅读

    su与sudo命令介绍及主要用法

    大家在自己实验服务器上可能不会用到su与sudo命令,因为一直用着root用户进行操作。
    的头像 发表于 11-27 09:31 1076次阅读