您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Rust

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

时间:2023-05-20 14:11:36  来源:今日头条  作者:高级前端进阶

前言

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 和开源生态系统的安全性。

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-rs

Sudo-rs 目前只支持基于 Linux 的操作系统,虽然其他基于 unix 的操作系统也可以使用,但目前没有积极支持或维护它们。

 

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 的巨大资产。

图片来自地址:https://theburningmonk.com/

同时,提高内存安全性是 Rust 开发人员的主要目标之一,也是该语言最重要的卖点。 Rust 的代码编译器非常严格,每一个使用到的变量或者内存地址都会被自动检查。 如果发现任何错误, Rust 将退出编译并抛出不安全警告。

Rust 社区不断壮大

虽然 Rust 的社区和库的数量远不及 C++。 但随着 Rust 语言的日益普及,加入 Rust 语言的开发人员和热情人士的数量也在增加。 社区创建的框架、库和开发工具的数量已经接近 57k,并且每天都在增加。

除了不断增长的工具和框架库之外,Rust 还拥有一个活跃而热情的社区。 无论开发者是需要帮助解决问题还是寻找使用 Rust 的用法和技巧都能获得支持。

以下是一些新兴社区项目的例子:

  • redox:一个用 Rust 编写的操作系统;
  • cgmath:一个线性代数和计算机图形库;
  • Iron:一个并发网络框架;

Rust 快速且灵活

Rust 被认为是一种相对快速的语言。 当使用通用代码时,它可以比 Scala 运行得快得多,尤其是在性能关键型任务中。 在某些领域,它的运行速度很可能比 Scala 或 JAVA 快三倍。

当然,这归功于 Rust 语言的几个核心因素:

  • 静态类型和编译特性,使编译器可以优化代码以提高速度
  • 提供特征的静态分派:类似于 C++ 模板,但更简洁
  • 明确地跟踪变量的所有权: Rust 不假设任何具有地址的变量都可以随时更改,因此可以在不对代码产生负面影响的情况下进行优化。
  • 期望变量在默认情况下是不可变的(因此优化更容易)
  • 提供代数数据类型,也有利于优化
  • 存储数据没有任何开销,没有运行时或由于缺乏垃圾收集而突然暂停
  • 提供零成本抽象

Rust 可以广泛使用

如果有一个项目,除了性能和底层优化外,还需要一个安全稳定的执行环境,那么 Rust 值得考虑。Rust 被认为是一种底层语言,适合系统级,以及嵌入式和其他性能关键代码。

Rust 也被认为是一种用于新兴的、创新的利于市场的语言,这些场景更加关心性能、速度和安全性的组合质量。同时 Rust 还被用于加密货币和区块链,一方面是易于理解和学习,另一方面就在于它的独特性能和安全性指标。

公司加持

尽管 Rust 是一门相对年轻的语言,但在提高编程的安全性和易用性方面,Rust 已经被开发人员公认为是朝着正确方向迈出的一步。 不仅开发人员对 Rust 感兴趣,很多公司、大企业已经或计划转向 Rust,比如:微软、Dropbox、Sentry、Amazon 和 Mozilla、字节跳动等等。

4.本文总结

本文主要和大家介绍刚用 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/



Tags:Rust   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Rust 标准库 1.77.2 发布,修复高危漏洞
IT之家 4 月 10 日消息,Rust 的优势之一就是安全,但这并不代表该编程语言就没有漏洞。安全专家近日发现了追踪编号为 CVE-2024-24576 的漏洞,攻击者利用 Rust 标准库中的一个安...【详细内容】
2024-04-10  Search: Rust  点击:(4)  评论:(0)  加入收藏
Rust 写脚手架,Clap你应该知道的二三事
有感而发最近,在和前端小伙伴聊天发现,在2024年,她们都有打算入局Rust学习的行列。毕竟前端现在太卷了,框架算是走到「穷途末路」了,无非就是在原有基础上修修补补。所有他们想在...【详细内容】
2024-03-11  Search: Rust  点击:(20)  评论:(0)  加入收藏
Rust 最受欢迎的这些库
今天分享主题是,关于一些值得注意的 Rust 库,这些库可以根据它们的功能和在编码中的受欢迎程度进行选择。什么是 Rust 库?在 Rust 中,常被称为 “crate” 的库,是一个打包的单元...【详细内容】
2024-02-19  Search: Rust  点击:(50)  评论:(0)  加入收藏
在 Rust 编程中使用泛型
本文的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。1.摘要Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以...【详细内容】
2024-01-09  Search: Rust  点击:(89)  评论:(0)  加入收藏
在 Rust 编程中使用多线程
编程语言有一些不同的方法来实现线程,而且很多操作系统提供了创建新线程的 API。Rust 标准库使用 1:1 线程实现,这代表程序的每一个语言级线程使用一个系统线程。1. Rust线程...【详细内容】
2024-01-07  Search: Rust  点击:(78)  评论:(0)  加入收藏
你应该知晓的 Rust Web 框架
前言在之前的用 Rust 搭建 React Server Components 的 Web 服务器我们利用了Axum构建了RSC的服务器。也算是用Rust在构建Web服务上的小试牛刀。虽然说Axum在Rust Web应用中...【详细内容】
2023-12-07  Search: Rust  点击:(164)  评论:(0)  加入收藏
解密 Python 如何调用 Rust 编译生成的动态链接库
楔子Rust 让 Python 更加伟大,随着 Rust 的流行,反而让 Python 的生产力提高了不少。因为有越来越多的 Python 工具,都选择了 Rust 进行开发,并且性能也优于同类型的其它工具。...【详细内容】
2023-11-29  Search: Rust  点击:(189)  评论:(0)  加入收藏
一篇学会 Rust 内存布局
整型,浮点型,struct,vec!,enum 本文是对 Rust内存布局[1] 的学习与记录 struct A { a: i64, b: u64,}struct B { a: i32, b: u64,}struct C { a: i64, b:...【详细内容】
2023-11-28  Search: Rust  点击:(113)  评论:(0)  加入收藏
Rust 十月就业报告:备受大厂青睐
智能招聘平台 filtra 发布了编程语言 Rust 的 10 月就业报告,相比 9 月的462 条招聘信息,10 月略微下降到了 460 条,但雇主数量略有增长,整体而言,Rust 的就业形式处于比较平稳的...【详细内容】
2023-11-15  Search: Rust  点击:(203)  评论:(0)  加入收藏
Rust 变量,你学会了吗?
Rust 是一门强调安全、并发、高效的系统编程语言。无 GC 实现内存安全机制、无数据竞争的并发机制、无运行时开销的抽象机制,是 Rust 独特的优越特性。 它声称解决了传统 C...【详细内容】
2023-11-01  Search: Rust  点击:(242)  评论:(0)  加入收藏
▌简易百科推荐
Rust 标准库 1.77.2 发布,修复高危漏洞
IT之家 4 月 10 日消息,Rust 的优势之一就是安全,但这并不代表该编程语言就没有漏洞。安全专家近日发现了追踪编号为 CVE-2024-24576 的漏洞,攻击者利用 Rust 标准库中的一个安...【详细内容】
2024-04-10    IT之家  Tags:Rust   点击:(4)  评论:(0)  加入收藏
在Rust中使用Serde的详细指南
在处理HTTP请求时,我们总是需要在一种数据结构(可以是enum、struct等)和一种可以存储或传输并稍后重建的格式(例如JSON)之间来回转换。Serde是一个库(crate),用于高效、通用地...【详细内容】
2024-03-26  coding到灯火阑珊  微信公众号  Tags:Rust   点击:(17)  评论:(0)  加入收藏
Rust 写脚手架,Clap你应该知道的二三事
有感而发最近,在和前端小伙伴聊天发现,在2024年,她们都有打算入局Rust学习的行列。毕竟前端现在太卷了,框架算是走到「穷途末路」了,无非就是在原有基础上修修补补。所有他们想在...【详细内容】
2024-03-11  前端柒八九  微信公众号  Tags:Rust   点击:(20)  评论:(0)  加入收藏
Rust中的数据可视化指南
可视化是数据分析和解释的一个关键方面。虽然Rust主要以其性能和安全特性而闻名,但它也为数据可视化提供了强大的工具。在这个全面的指南中,我们将深入研究Rust中的数据可视化...【详细内容】
2024-03-07  coding到灯火阑珊  微信公众号  Tags:Rust   点击:(31)  评论:(0)  加入收藏
如何在Rust中操作JSON,你学会了吗?
sonic-rs ​还具有一些额外的方法来进行惰性评估和提高速度。例如,如果我们想要一个 JSON​ 字符串文字,我们可以在反序列化时使用 LazyValue​ 类型将其转换为一个仍然带有斜...【详细内容】
2024-02-27  前端柒八九  微信公众号  Tags:Rust   点击:(47)  评论:(0)  加入收藏
记一次Rust内存泄漏排查之旅
在某次持续压测过程中,我们发现 GreptimeDB 的 Frontend 节点内存即使在请求量平稳的阶段也在持续上涨,直至被 OOM kill。我们判断 Frontend 应该是有内存泄漏了,于是开启了排...【详细内容】
2024-02-27  OSC开源社区    Tags:Rust   点击:(12)  评论:(0)  加入收藏
Rust 最受欢迎的这些库
今天分享主题是,关于一些值得注意的 Rust 库,这些库可以根据它们的功能和在编码中的受欢迎程度进行选择。什么是 Rust 库?在 Rust 中,常被称为 “crate” 的库,是一个打包的单元...【详细内容】
2024-02-19  码农渔夫  微信公众号  Tags:Rust   点击:(50)  评论:(0)  加入收藏
异步Rust:构建实时消息代理服务器
在本文中,我们将深入研究使用Rust构建实时消息代理服务器,展示其强大的并发特性。我们将使用Warp作为web服务器,并使用Tokio来管理异步任务。此外,我们将创建一个WebSocket客户...【详细内容】
2024-02-01      Tags:Rust   点击:(58)  评论:(0)  加入收藏
在 Rust 编程中使用泛型
本文的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。1.摘要Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以...【详细内容】
2024-01-09  二进制空间安全  微信公众号  Tags:Rust   点击:(89)  评论:(0)  加入收藏
什么是Rust语言 ,特点是什么,跟其它语言对比有什么优势
什么是RustRust是一种系统编程语言,旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言,设计目标是在C++的应用场景中提供一种现代、可靠和高效的选择。Rust的...【详细内容】
2024-01-09    简易百科  Tags:Rust语言   点击:(206)  评论:(0)  加入收藏
站内最新
站内热门
站内头条