刚重构 Windows 核心库,Rust 又重写 sudo 和 su!

前言Rust 由前 Mozilla 开发人员 Graydon Hoare 于 2006 年创建,作为 C++ 语言的替代品,Rust 正在开发人员的世界中慢慢为自己正名 。Rust 现在可用于创建网络软件、嵌入式计算机和分布式服务或命令行 。而 Rust 最令人称道的是其安全性和性能 。

  • 安全性方面:Rust 语言有一个内置的内存安全系统,可以防止常见的编程错误,例如:空指针取消引用和缓冲区溢出 。语言本身内置的这些特性可以确保应用程序不会出现常见的安全漏洞,开发者可以在开发和编译期间轻松捕获错误 。
  • 性能方面: 该语言旨在快速高效,使其成为需要处理大量请求的服务器端应用程序的绝佳选择 。
当然,除了专注于安全和性能之外,Rust 还拥有不断壮大的库和框架生态,可以轻松开发 Web 应用程序 。例如,Rocket Web 框架是使用 Rust 开发 Web 应用程序的流行选择,它旨在简单、快速和安全 。
1.Prossimo 为何选择 Rust微软正在用 Rust 重写核心 windows 库的消息刚过去不久,Rust 生态的最新资讯表明:互联网安全研究小组 (ISRG) 的 Prossimo 项目正在用 Rust 重写 sudo 和 su,目标是提升在内存方面的安全性,确保不再遭受内存安全漏洞的困扰,并进一步增强 linux 和开源生态系统的安全性 。
刚重构 Windows 核心库,Rust 又重写 sudo 和 su!

文章插图
sudo超级用户命令
开发者都知道,Sudo(substitute user [或 superuser] do)是一种计算机程序,用于类 Unix 操作系统,如: BSD、mac OS X/macOS 以及 GNU/Linux,该计算机程序可以让用户以安全的方式使用特定的权限执行程序,通常为操作系统的超级用户 。
Sudo 于 1980 年代首次开发,几十年来,Sudo 已成为执行更改同时最大程度降低操作系统风险的重要工具 。但是因为是用 C 写的,所以 Sudo 经历了很多内存安全问题相关的漏洞 。而之所以选择用 Rust 替换 C,主要是基于以下几个因素的考量 。
  • 使用非常广泛(几乎每个服务器和/或客户端)
  • 在临界边界上
  • 执行关键功能
  • 避免使用内存不安全的语言编写(例如 C、C++、asm)
Sudo 程序符合避免上面定义的四个风险标准,提高 Sudo 安全性可以保护系统最关键的软件,尤其是避免内存安全漏洞 。这项工作目前由 Ferrous Systems 和 Tweede Golf 的联合团队在 Amazon Web Services 的大力支持下完成 。
值得一提的是,Sudo-rs 目前正在积极开发中,不适用于生产环境 。仅建议将 sudo-rs 用于开发和测试目的,避免系统崩溃和不安全 。
2.快速使用 Sudo-rsSudo-rs 目前只支持基于 Linux 的操作系统,虽然其他基于 unix 的操作系统也可以使用,但目前没有积极支持或维护它们 。
刚重构 Windows 核心库,Rust 又重写 sudo 和 su!

文章插图
 
Sudo-rs 是用 Rust 编写的,目前仅支持最新的稳定编译器工具链 。要获得最新的编译器工具链,官方团队建议使用 rustup 。要构建 sudo-rs 需要安装依赖项:
  • clang (clang)
  • libclang 开发库 (libclang-dev)
  • PAM 库 (libpam0g-dev)
安装相应的依赖项后,可以使用如下命令轻松构建 sudo-rs :
cargo build --release该命令会产生一个二进制文件,即 target/release/sudo 。但是,此二进制文件必须设置 setuid 标志并且必须由 root 用户拥有才能发挥有用的功能 。因为目前该项目仍然处于早期阶段,所以还需要设置一个环境变量 SUDO_RS_IS_UNSTABLE,值为“I accept that my system may break unexpectedly” 以免造成系统意外崩溃 。如果不确定如何设置它,那么当前版本的 sudo 可能并不适合你 。
Sudo-rs 需要 sudoers 配置文件,目前程序会在 /etc/sudoers.test 文件中读取它,而不是默认位置,开发者必须确保该位置存在有效的 sudoers 配置 。虽然 sudoers 大多数语法最终会原样支持,但大多数功能目前还没有实现,也可能不会有警告抛出 。
目前,Sudo-rs 使用 PAM 进行身份验证,系统必须针对 PAM 进行设置,Sudo-rs 将使用 sudo 服务配置 。目前该项目在 Github 上进行托管,已 Apache-2.0、MIT licenses 开源,已经有超过 1.9k 的 star、代码贡献者 14+,是所有开发者都值得关注的终端项目 。
3.Rust 有何魔力内存安全性Rust 被认为是内存安全的,Rust 代码不能有任何悬空指针、缓冲区溢出或任何其他类型的内存相关错误 。它允许开发者定义内存的管理方式以及内存中的值的布局方式,在不损失性能的情况下兼顾控制线和安全线,并使其成为 Rust 的巨大资产 。


推荐阅读