Rust 由前 Mozilla 开发人员 Graydon Hoare 于 2006 年创建,作为 C++ 语言的替代品,Rust 正在开发人员的世界中慢慢为自己正名。 Rust 现在可用于创建网络软件、嵌入式计算机和分布式服务或命令行。而 Rust 最令人称道的是其安全性和性能。
当然,除了专注于安全和性能之外,Rust 还拥有不断壮大的库和框架生态,可以轻松开发 Web 应用程序。 例如,Rocket Web 框架是使用 Rust 开发 Web 应用程序的流行选择, 它旨在简单、快速和安全。
微软正在用 Rust 重写核心 windows 库的消息刚过去不久,Rust 生态的最新资讯表明:互联网安全研究小组 (ISRG) 的 Prossimo 项目正在用 Rust 重写 sudo 和 su,目标是提升在内存方面的安全性,确保不再遭受内存安全漏洞的困扰,并进一步增强 linux 和开源生态系统的安全性。
sudo超级用户命令
开发者都知道,Sudo(substitute user [或 superuser] do)是一种计算机程序,用于类 Unix 操作系统,如: BSD、mac OS X/macOS 以及 GNU/Linux,该计算机程序可以让用户以安全的方式使用特定的权限执行程序,通常为操作系统的超级用户。
Sudo 于 1980 年代首次开发,几十年来,Sudo 已成为执行更改同时最大程度降低操作系统风险的重要工具。 但是因为是用 C 写的,所以 Sudo 经历了很多内存安全问题相关的漏洞。而之所以选择用 Rust 替换 C,主要是基于以下几个因素的考量。
Sudo 程序符合避免上面定义的四个风险标准,提高 Sudo 安全性可以保护系统最关键的软件,尤其是避免内存安全漏洞。这项工作目前由 Ferrous Systems 和 Tweede Golf 的联合团队在 Amazon Web Services 的大力支持下完成。
值得一提的是,Sudo-rs 目前正在积极开发中,不适用于生产环境。 仅建议将 sudo-rs 用于开发和测试目的,避免系统崩溃和不安全。
Sudo-rs 目前只支持基于 Linux 的操作系统,虽然其他基于 unix 的操作系统也可以使用,但目前没有积极支持或维护它们。
Sudo-rs 是用 Rust 编写的,目前仅支持最新的稳定编译器工具链。 要获得最新的编译器工具链,官方团队建议使用 rustup。 要构建 sudo-rs 需要安装依赖项:
安装相应的依赖项后,可以使用如下命令轻松构建 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+,是所有开发者都值得关注的终端项目。
Rust 被认为是内存安全的, Rust 代码不能有任何悬空指针、缓冲区溢出或任何其他类型的内存相关错误。 它允许开发者定义内存的管理方式以及内存中的值的布局方式,在不损失性能的情况下兼顾控制线和安全线,并使其成为 Rust 的巨大资产。
图片来自地址:https://theburningmonk.com/
同时,提高内存安全性是 Rust 开发人员的主要目标之一,也是该语言最重要的卖点。 Rust 的代码编译器非常严格,每一个使用到的变量或者内存地址都会被自动检查。 如果发现任何错误, Rust 将退出编译并抛出不安全警告。
虽然 Rust 的社区和库的数量远不及 C++。 但随着 Rust 语言的日益普及,加入 Rust 语言的开发人员和热情人士的数量也在增加。 社区创建的框架、库和开发工具的数量已经接近 57k,并且每天都在增加。
除了不断增长的工具和框架库之外,Rust 还拥有一个活跃而热情的社区。 无论开发者是需要帮助解决问题还是寻找使用 Rust 的用法和技巧都能获得支持。
以下是一些新兴社区项目的例子:
Rust 被认为是一种相对快速的语言。 当使用通用代码时,它可以比 Scala 运行得快得多,尤其是在性能关键型任务中。 在某些领域,它的运行速度很可能比 Scala 或 JAVA 快三倍。
当然,这归功于 Rust 语言的几个核心因素:
如果有一个项目,除了性能和底层优化外,还需要一个安全稳定的执行环境,那么 Rust 值得考虑。Rust 被认为是一种底层语言,适合系统级,以及嵌入式和其他性能关键代码。
Rust 也被认为是一种用于新兴的、创新的利于市场的语言,这些场景更加关心性能、速度和安全性的组合质量。同时 Rust 还被用于加密货币和区块链,一方面是易于理解和学习,另一方面就在于它的独特性能和安全性指标。
尽管 Rust 是一门相对年轻的语言,但在提高编程的安全性和易用性方面,Rust 已经被开发人员公认为是朝着正确方向迈出的一步。 不仅开发人员对 Rust 感兴趣,很多公司、大企业已经或计划转向 Rust,比如:微软、Dropbox、Sentry、Amazon 和 Mozilla、字节跳动等等。
本文主要和大家介绍刚用 Rust 重构 Windows 核心库后,Rust 又开始重写 sudo 和 su。相信通过本文的阅读,大家对 Rust 重构sudo、su会有一个初步的了解。
因为篇幅问题,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!
https://dev.to/nickjeon/the-future-of-rust-in-web-development-1ik4
https://scalac.io/blog/5-reasons-why-rust-is-the-future-rust-functional-programming/
https://www.memorysafety.org/blog/sudo-and-su/
https://www.oschina.NET/news/239377/rewrite-sudo-and-su
https://www.oschina.net/news/238894/microsoft-windows-rust
https://threatpost.com/sudo-bug-root-access-linux/149169/
https://blog.devgenius.io/a-new-era-of-linux-security-reimagining-sudo-and-su-with-rust-55f2e10123f8
https://theburningmonk.com/2015/05/rust-memory-safety-without-gc/