2023年5月

微软发布 Azure Linux 正式版

在内部使用 Azure Linux 两年,并从 2022 年 10 月开始公开预览后,微软本周终于正式提供其 Azure Linux。Azure Linux 是 Azure Kubernetes 服务(AKS)的一个开源容器主机操作系统,它针对 Azure 进行了优化,旨在使开发人员更容易使用微软的工具来部署和管理容器工作负载。Azure Linux 源于微软的 CBL-Mariner 项目,是“自我独立的 Linux 发行版”,而非衍生自 Ubuntu 或 Fedora。

消息来源:The Register
老王点评:这不是微软的第一个 Linux 发行版,也不是最后一个发行版。

使用 XFS 的系统暂时不要升级到 Linux 6.3

上周以来,多个用户已经报告了在升级到 Linux 6.3 稳定内核时,XFS 文件系统的元数据损坏问题。当他们在基于 XFS 的服务器上运行 Linux 6.3 时,服务器不断崩溃。据报道,Linux 6.4 内核对一些受影响的用户来说工作正常,这让人觉得一些补丁可能没有很好地回传到较新的 Linux 6.3 的小版本。

消息来源:Phoronix
老王点评:这比较罕见,无论是 Linux 稳定版,还是文件系统,出现这样的问题太不应该了。或许我们该担忧 Linux 内核的质量把控了?当然,谨慎的系统管理员从来在更新上都是“懒惰”的。

Bitwarden 进军无密码安全领域

可悲而简单的事实是,密码泄露正变得像人们闯红灯一样普遍。密码机制已经过时,大约一半的 IT 决策者认为他们使用的应用程序中缺乏无密码设计是主要原因。而无密码技术中的 密码钥匙 Passkey 可以通过设备上已有的密码、指纹、面部识别等,来替代用户的账户密码登录其它服务。它不仅消除了对密码、用户名和双因素认证(2FA)的需求,而且还通过减轻钓鱼攻击的风险来增强用户的安全性。流行的开源密码管理程序 Bitwarden 推出了 Passwordless.dev,这是一个开发者工具包,用于将无密码技术集成到网站和应用程序中。

消息来源:The Newstack
老王点评:作为著名的密码管理软件,面对无密码时代的来临,也不得不“与时俱进”。

如果你计划开始你的 Kali Linux 之旅,那么你应该知道一些基本信息。以下是一个概述。
免责声明: Kali Linux 是安全专家和以及网络安全爱好者所使用的工具,你不应该也不允许使用它来对他人的计算机系统进行未经允许的任何活动。任何使用它带来的法律后果和损失,将由使用者自行承担。我们之所以推荐 Kali Linux,是希望有更多的人来保护计算机设施和发现其中的缺陷并提前防范。

Kali Linux 是一个流行的 Linux 发行版,广泛应用于网络安全领域。它以其强大的工具和功能而闻名,是安全专业人士、道德黑客(白帽子)和网络安全研究人员的绝佳选择。

Kali Linux 简介

Kali Linux with Xfce Desktop Environment

在核心层面上,Kali Linux 是基于 Debian-testing 分支构建的,专门为网络分析师、渗透测试人员和网络安全专业人员设计。Kali Linux 是由 Offensive Security 维护、Mati Aharoni 和 Devon Kearns 开发的 Debian Linux 衍生发行版。

它带有全面的预安装工具集,用于各种安全测试目的。它是一个开源操作系统,可以免费下载并使用。

历史

Kali Linux 最初发布于 2013 年 3 月,是 BackTrack Linux 的继任者。BackTrack 是一种流行的 Linux 发行版,广泛用于渗透测试和数字取证。它由 Offensive Security 创建,这是一家专门从事信息安全培训和渗透测试服务的网络安全公司。自其最初发布以来,Kali Linux 经过了许多更新和改进,成为最流行的用于安全工作负载的 Linux 发行版。

An older screenshot of BackTrack Linux

功能及何时使用 Kali Linux

Kali Linux 具有许多预安装的工具,对于安全专业人员、道德黑客和网络安全研究人员至关重要。它具有用户友好的界面,即使对于初学者也很容易使用。该操作系统可以高度定制,以满足用户的需求。它也与各种硬件兼容,使它成为桌面、笔记本电脑甚至像树莓派等小型设备的通用操作系统。

它还带有一个特定的变体,称为 Kali NetHunter,主要为安卓操作系统提供工具。

安装过程

有多种方式可以使用 Kali Linux。因此,安装方式可能会有所不同。进行渗透测试或安全测试的常规方法是使用 立付 Live 介质。Kali Linux 和其工具被配置为可以通过 USB 存储器在受感染或易受攻击的系统上运行。

此外,Kali Linux 也可以安装在虚拟机或物理机中。安装过程简单,只需几分钟即可完成。Offensive Security 在其网站上提供了详细的 Kali Linux 安装说明。

如果你身在 Windows 系统中,并想在虚拟机中尝试 Kali Linux,可以阅读以下教程:

如何在 Windows 上安装 Kali Linux

开始使用 Kali Linux

一旦你安装了 Kali Linux 或从中启动,你需要熟悉它的界面和功能。如果你是第一次使用它很重要。理想情况下,如果你是 Linux 的新手,你不应该把 Kali Linux 作为第一次尝试 Linux 的机会。你应该首先熟悉 Linux 及其命令。因此,最好的方法是安装易于使用的 Linux 发行版,如 Linux Mint,然后再尝试 Kali Linux。

Kali Linux 使用轻量级和快速的 Xfce 桌面环境,有传统的菜单和图标驱动的桌面。主应用程序菜单将所有工具分类,以便更轻松地使用。

了解工具

Kali Linux 自带了对于安全测试是必不可少的丰富的基本工具,包括网络扫描、漏洞评估、密码破解和取证分析。Kali Linux 中一些最流行的工具有 Nmap、Metasploit、Aircrack-ng 和 John the Ripper 等等。

Kali Linux 中一些最流行的高级工具包括 Burp Suite、OWASP ZAP、Social Engineering Toolkit(SET)和 Wireshark 等等。这些工具非常复杂,需要高级技能才能有效使用。但是,它们对于进行全面的安全测试是必不可少的,被全球的安全专业人员广泛使用。

Kali Linux Tools

你可以在主应用程序菜单中按类别查找工具(如上图所示)。

Kali Linux 与其他安全工具的区别

Kali Linux 及其工具箱并不是在网络安全领域中唯一的工具集合。其他安全工具,如 MetasploitNessusOpenVAS 也广泛用于安全测试。然而,Kali Linux 和这些工具相比有几个优点。

首先,它是一个 all-in-one 平台,具有全面的预安装工具,使其成为安全专业人员的方便选择。

其次,Kali Linux 是一个开源平台,这意味着它可以免费下载和使用,对于小型企业和创业公司来说是一种具有成本效益的选择。更不用说,Kali 团队提供了全面的文档,你可以免费培训学生和新员工,成本为零。

最后,Kali Linux 拥有庞大、活跃的开发者和用户社区,他们定期为其开发做出贡献,并为用户提供支持。

Kali Linux 的应用

Kali Linux 广泛应用于渗透测试,渗透测试是测试计算机系统、网络或 Web 应用程序以确定攻击者可以利用的漏洞和弱点的过程。使用情况可能基于你或你的组织的需求而有所不同。

渗透测试是网络安全的重要组成部分,由安全专业人员用于评估组织的安全姿态。由于其全面的工具和功能集,Kali Linux 是进行安全测试的有效平台,因此成为渗透测试的流行选择。

除了渗透测试,Kali Linux 还具有多个安全应用程序。它可以用于数字取证,事件响应和恶意软件分析。Kali Linux 带有这些应用程序的预安装工具,其中包括文件刻录工具、内存分析工具和网络取证工具。

以下是在 Kali Linux 中预先安装的(开源)应用程序的的类别概述:

  • 信息搜集
  • 漏洞分析
  • Web 应用程序分析
  • 数据库评估
  • 密码攻击
  • 无线攻击
  • 逆向工程
  • 利用工具
  • 嗅探和欺骗
  • 后渗透
  • 取证
  • 报告工具
  • 社交工程工具

想要了解更多关于这些应用程序的详细信息,你需要安装 Kali Linux 并尝试使用它们。

Kali Linux 的更新和支持

Kali Linux 会定期接收更新和补丁,以解决安全漏洞并提高操作系统的性能。Offensive Security 在其网站上提供了详细的 Kali Linux 更新说明。除了更新之外,Kali Linux 还有庞大、活跃的开发者和用户社区,定期为其开发做出贡献,并为用户提供支持。

有效使用 Kali Linux 的提示

为了有效地使用 Kali Linux 或从基础开始学习 Kali Linux,用户应遵循以下几个提示和最佳实践:

  • 熟悉操作系统和其功能
  • 用备用机器或 USB 存储器,将 Kali Linux 安装在其中
  • 有效和高效地使用预安装工具
  • 定期使用更新和补丁保持操作系统最新
  • 加入 Kali Linux 社区以获取支持和分享知识
  • 负责任地和道德地使用 Kali Linux

结论

Kali Linux 是一个功能强大、多才多艺的 Linux 发行版,广泛用于网络安全社区。它具有全面的预安装工具和功能集,使其成为安全测试、数字取证、事件响应和恶意软件分析的有效平台。虽然 Kali Linux 需要高级技能才能有效使用,但它拥有庞大、活跃的开发者和用户社区,为用户提供支持和知识分享。

总之,如果你是网络安全专业人士、道德黑客或对网络安全感兴趣的人,那么 Kali Linux 是你必须熟悉的必备工具。凭借其先进的工具、开源平台和活跃的社区,Kali Linux 是进行安全测试和研究的强大平台。

关于 Kali Linux 的一些常见问题

Kali Linux 和其他 Linux 发行版有什么区别?

虽然 Kali Linux 是一个 Linux 发行版,但它是专门设计用于渗透测试和网络安全的。与其他发行版不同,Kali Linux 具有全面的预安装工具和功能,这些工具和功能在进行安全测试和研究时不可或缺。

我能在我的个人电脑上使用 Kali Linux 吗?

是的,你可以在你的个人电脑上使用 Kali Linux。它可以作为虚拟机或与现有操作系统双重启动进行安装。

使用 Kali Linux 是否合法?

是的,使用 Kali Linux 是合法的。但是,它应该只用于进行安全测试和研究目的,道德和负责任的用途。

我可以自定义 Kali Linux,添加或删除工具吗?

是的,你可以自定义 Kali Linux,添加或删除工具。Kali Linux 是一个开源平台,用户可以根据需要修改和自定义它。

我怎样才能获得 Kali Linux 的支持?

Kali Linux 拥有庞大、活跃的开发者和用户社区,他们提供支持和知识分享。几个在线资源,包括论坛、博客和文档,提供解决常见问题和错误的解决方案。Kali Linux 的开发者 Offensive Security 在他们的网站上也提供支持。

更多资源


via: https://www.debugpoint.com/kali-linux-introduction/

作者:Arindam 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

FreeIPA 是一个强大的开源身份管理系统,提供集中的身份验证、授权和计费服务。在本文中,我们将逐步介绍在 Ubuntu 22.04 / 20.04 上配置 FreeIPA 客户端的步骤。配置 FreeIPA 客户端后,我们将尝试使用在 FreeIPA 服务器上创建的用户登录。

在我们之前的帖子中,我们已经讨论了 FreeIPA 服务器在 RHEL8/Rokcy Linux 8/ AlmaLinux 8 上的安装步骤。

在 FreeIPA 服务器上创建用户进行集中认证

登录到你的 FreeIPA 服务器并创建一个名为 sysadm 的用户,运行以下命令:

$ sudo kinit admin
Password for [email protected]:
$
$ sudo ipa config-mod --defaultshell=/bin/bash
$ sudo ipa user-add sysadm --first=System --last=Admin --password
Password:
Enter Password again to verify:
-------------------
Added user "sysadm"
-------------------
User login: sysadm
First name: System
Last name: Admin
Full name: System Admin
Display name: System Admin
Initials: SA
Home directory: /home/sysadm
GECOS: System Admin
Login shell: /bin/bash
Principal name: [email protected]
Principal alias: [email protected]
User password expiration: 20230415073041Z
Email address: [email protected]
UID: 464600003
GID: 464600003
Password: True
Member of groups: ipausers
Kerberos keys available: True
$

第一个命令是获取 Kerberos 凭证,第二个命令将所有用户的默认登录 shell 设置为 /bin/bash,第三个命令用于创建名为 sysadm 的用户。

在 Ubuntu 22.04 /20.04 上配置 FreeIPA 客户端的步骤

执行以下步骤来配置 FreeIPA 客户端以进行集中身份验证。

1、在 FreeIPA 服务器上添加 Ubuntu 系统的 DNS 记录

登录到你的 FreeIPA 服务器并运行以下命令为 FreeIPA 客户端(即 Ubuntu 22.04/20.04)添加 DNS 记录:

$ sudo ipa dnsrecord-add linuxtechi.lan app01.linuxtechi.lan --a-rec 192.168.1.106
  Record name: app01.linuxtechi.lan
  A record: 192.168.1.106
$

在上面的命令中,app01.linuxtechi.lan 是我的 Ubuntu 系统,IP 地址为 192.168.1.106

注意:确保你的 FreeIPA 服务器和客户端处于同一时区并从 NTP 服务器获取时间。

2、安装 FreeIPA 客户端包

从你的 Ubuntu 系统运行以下命令以安装 freeipa-client 以及依赖项:

$ sudo apt install freeipa-client oddjob-mkhomedir -y

在安装 freeipa-client 时,我们将看到以下页面,选择确定并回车。

在下一个屏幕中,按回车键跳过。

3、在主机文件中添加 FreeIPA 服务器 IP 和主机名

/etc/hosts 文件中添加以下 FreeIPA 服务器条目:

$ echo "192.168.1.102 ipa.linuxtechi.lan ipa" | sudo tee -a /etc/hosts
$ echo "192.168.1.106 app01.linuxtechi.lan app01" | sudo tee -a /etc/hosts

更改适合你的设置的 IP 地址和主机名。

4、使用 ipa-client-install 配置 FreeIPA 客户端

现在运行以下 ipa-client-install 命令在你的 Ubuntu 系统上配置 FreeIPA 客户端:

$ sudo ipa-client-install --hostname=`hostname -f` --mkhomedir --server=ipa.linuxtechi.lan --domain linuxtechi.lan --realm LINUXTECHI.LAN

更改适合你设置的 FreeIPA 服务器地址、域名和领域。

上述命令的输出如下所示:

完美,上面的输出确认 FreeIPA 客户端安装成功。

现在允许在用户首次使用 FreeIPA 服务器进行身份验证时自动创建用户的主目录。

在文件 /usr/share/pam-configs/mkhomedir 中添加以下行:

required pam_mkhomedir.so umask=0022 skel=/etc/skel
$ echo "required pam_mkhomedir.so umask=0022 skel=/etc/skel" | sudo tee -a /usr/share/pam-configs/mkhomedir

要使上述更改生效,请运行以下命令:

$ sudo pam-auth-update

选择确定,然后按回车键。

5、尝试使用 sysadm 用户登录到你的 Ubuntu 系统

尝试使用 sysadm 用户通过 SSH 登录到你的 Ubuntu 系统,

$ ssh [email protected]

正如你在上面看到的,当我们第一次登录时,它说密码已过期。它将提示我们设置新密码并断开会话。

更新密码后,尝试 SSH 登录 Ubuntu 系统,这次我们应该可以登录了。

$ ssh [email protected]

输出:

太好了,上面的输出确认我们已经使用集中用户成功登录到我们的 Ubuntu 系统。这也说明我们已经成功配置了 FreeIPA 客户端。

如果你想从 ubuntu 系统中卸载 FreeIPA,然后运行以下命令集:

$ sudo ipa-client-install --uninstall
$ sudo  rm -rf /var/lib/sss/db/*
$ sudo systemctl restart sssd.service

以上就是这篇文章的全部内容,我相信你已经发现它提供了很多信息。请在下面发表你的疑问和反馈。

(题图:MJ/bd5b7777-f70a-4367-ac78-d026792b855a)


via: https://www.linuxtechi.com/configure-freeipa-client-on-ubuntu/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

微软总裁希望控制 AI 以免被俄罗斯、中国等利用

微软总裁 Brad Smith 在华盛顿的一次演讲中,呼吁为最关键的人工智能颁发许可证,“我们将需要新一代的出口管制,至少是我们现有的出口管制的演变,以确保这些模型不被窃取或不被用于违反国家的出口管制要求”。他还呼吁采取措施,确保人们知道一张照片或视频何时是真实的。他说,“我们将不得不解决围绕深度造假的问题。我们将不得不特别解决我们所担心的大多数外国网络影响行动,即俄罗斯政府、中国、伊朗人已经在进行的各种活动。”

消息来源:路透社
老王点评:如我之前评论的,AI 的威力不亚于核弹。而对这样的“武器”的控制,可能要比对芯片的控制更严格。

IBM 计划建立一个 10 万量子比特的量子计算机

去年年底,IBM 以一个包含 433 个量子比特(即量子信息处理的基本构件)的处理器打破了最大量子计算系统的记录。现在,该公司计划与东京大学和芝加哥大学合作,在 10 年内建造一台 10 万量子比特的机器。IBM 已经做了原则性验证实验,表明基于“互补金属氧化物半导体(CMOS)”技术的集成电路可以安装在冷量子比特旁边,只需几十毫瓦就能控制它们。除此之外,以量子为中心的超级计算所需的技术还不存在,这也是为什么需要大学研究机构参与的重要原因。

消息来源:Technology Review
老王点评:在量子计算方面,虽然我们也取得了很大进展,但就目前而言,美国的量子计算技术还是最强的。

谷歌搜索开始推出 ChatGPT 式的结果

谷歌的“搜索生成体验”计划将 ChatGPT 风格的生成性人工智能结果直接放在你的谷歌搜索结果页面中,出现在正常搜索结果上方的彩色方框中。这将是谷歌搜索结果有史以来最大的变化,这种设计有可能颠覆整个互联网。一个在桌面上搜索 “蓝牙音箱” 的例子截图显示,“赞助” 的购物广告之下的一个大蓝框中是人工智能结果,列出了关于每个扬声器的几个完全没有来源的声明和意见。大约两三个屏幕后才是指向更中立的外部网站的链接。

消息来源:Ars Technica
老王点评:感觉谷歌这一次是画猫不成反类犬。别最后将优势的搜索引擎市场也丢失了。

Rust 和 Python 的优势互补。可以使用 Python 进行原型设计,然后将性能瓶颈转移到 Rust 上。

Python 和 Rust 是非常不同的语言,但它们实际上非常搭配。但在讨论如何将 Python 与 Rust 结合之前,我想先介绍一下 Rust 本身。你可能已经听说了这种语言,但可能还没有了解过它的细节。

什么是 Rust?

Rust 是一种低级语言,这意味着程序员所处理的东西接近于计算机的 “真实” 运行方式。

例如,整数类型由字节大小定义,与 CPU 支持的类型相对应。虽然我们很想简单地说 Rust 中的 a+b 对应于一条机器指令,但实际上并不完全是这样!

Rust 编译器链非常复杂。作为第一种近似的方法,将这样的语句视为 “有点” 真实是有用的。

Rust 旨在实现零成本抽象,这意味着许多语言级别可用的抽象在运行时环境中会被编译去掉。

例如,除非明确要求,对象会在堆栈上分配。结果是,在 Rust 中创建本地对象没有运行时成本(尽管可能需要进行初始化)。

最后,Rust 是一种内存安全的语言。也有其他内存安全的语言和其他支持零成本抽象的语言。但通常这些是两类不同的语言。

内存安全并不意味着不可能在 Rust 中出现内存违规。它确实意味着只有两种方式可能导致内存违规:

  • 编译器的错误。
  • 显式声明为不安全(unsafe)的代码。

Rust 标准库代码有很多被标记为不安全的代码,虽然比许多人预期的少。这并不意味着该语句无意义。除了需要自己编写不安全代码的(罕见的)情况外,内存违规通常是由基础设施造成的。

为什么会有 Rust 出现?

为什么人们要创建 Rust?是哪些问题没有被现有编程语言解决吗?

Rust 被设计成既能高效运行,又保证内存安全。在现代的联网世界中,这是一个越来越重要的问题。

Rust 的典型应用场景是协议的低级解析。待解析的数据通常来自不受信任的来源,并且需要通过高效的方式进行解析。

如果你认为这听起来像 Web 浏览器所做的事情,那不是巧合。Rust 最初起源于 Mozilla 基金会,它是为了改进 Firefox 浏览器而设计的。

如今,需要保证安全和速度的不仅仅是浏览器。即使是常见的微服务架构也必须能够快速解析不受信任的数据,同时保证安全。

现实示例:统计字符

为了理解 “封装 Rust” 的例子,需要解决一个问题。这个问题需要满足以下要求:

  • 足够容易解决。
  • 能够写高性能循环来优化。
  • 有一定的现实意义。

这个玩具问题的例子是判断一个字符在一个字符串中是否出现超过了 X 次。这个问题不容易通过高效的正则表达式解决。即使是专门的 Numpy 代码也可能不够快,因为通常没有必要扫描整个字符串。

你可以想象一些 Python 库和技巧的组合来解决这个问题。然而,如果在低级别的语言中实现直接的算法,它会非常快,并且更易于阅读。

为了使问题稍微有趣一些,以演示 Rust 的一些有趣部分,这个问题增加了一些变化。该算法支持在换行符处重置计数(意即:字符是否在一行中出现了超过 X 次?)或在空格处重置计数(意即:字符是否在单词中出现了超过 X 次?)。

这是唯一与 “现实性” 相关的部分。过多的现实性将使这个示例在教育上不再有用。

支持枚举

Rust 支持使用枚举(enum)。你可以使用枚举做很多有趣的事情。

目前,只使用了一个简单的三选一的枚举,并没有其他的变形。这个枚举编码了哪种字符重置计数。

#[derive(Copy)]
enum Reset {
    NewlinesReset,
    SpacesReset,
    NoReset,
}

支持结构

接下来的 Rust 组件更大一些:这是一个结构(struct)。Rust 的结构与 Python 的 dataclass 有些相似。同样,你可以用结构做更复杂的事情。

#[pyclass]
struct Counter {
    what: char,
    min_number: u64,
    reset: Reset, 
}

实现块

你可以在 Rust 中使用一个单独的块,称为实现(impl)块,为结构添加一个方法。但具体细节超出了本文的范围。

在这个示例中,该方法调用了一个外部函数。这主要是为了分解代码。更复杂的用例将指示 Rust 编译器内联该函数,以便在不产生任何运行时成本的情况下提高可读性。

#[pymethods]
impl Counter {
    #[new]
    fn new(what: char, min_number: u64, reset: Reset) -> Self {
        Counter{what: what, min_number: min_number, reset: reset}
    }
    
    fn has_count(
        &self,
        data: &str,
    ) -> bool {
        has_count(self, data.chars())
    }
}

函数

默认情况下,Rust 变量是常量。由于当前的计数(current_count)必须更改,因此它被声明为可变变量。

fn has_count(cntr: &Counter, chars: std::str::Chars) -> bool {
    let mut current_count : u64 = 0;
    for c in chars {
        if got_count(cntr, c, &mut current_count) {
            return true;
        }
    }
    false
}

该循环遍历字符并调用 got_count 函数。再次强调,这是为了将代码分解成幻灯片展示。它展示了如何向函数发送可变引用。

尽管 current_count 是可变的,但发送和接收站点都显式标记该引用为可变。这可以清楚地表明哪些函数可能修改一个值。

计数

got_count 函数重置计数器,将其递增,然后检查它。Rust 的冒号分隔的表达式序列评估最后一个表达式的结果,即是否达到了指定的阈值。

fn got_count(cntr: &Counter, c: char, current_count: &mut u64) -> bool {
    maybe_reset(cntr, c, current_count);
    maybe_incr(cntr, c, current_count);
    *current_count >= cntr.min_number
}

重置代码

reset 的代码展示了 Rust 中另一个有用的功能:模式匹配。对 Rust 中匹配的完整描述需要一个学期级别的课程,不适合在一个无关的演讲中讲解。这个示例匹配了该元组的两个选项之一。

fn maybe_reset(cntr: &Counter, c: char, current_count: &mut u64) -> () {
    match (c, cntr.reset) {
        ('\n', Reset::NewlinesReset) | (' ', Reset::SpacesReset)=> {
            *current_count = 0;
        }
        _ => {}
    };
}

增量支持

增量将字符与所需字符进行比较,并在匹配时增加计数。

fn maybe_incr(cntr: &Counter, c: char, current_count: &mut u64) -> (){
    if c == cntr.what {
        *current_count += 1;
    };
}

请注意,我在本文中优化了代码以适合幻灯片。这不一定是 Rust 代码的最佳实践示例,也不是如何设计良好的 API 的示例。

为 Python 封装 Rust 代码

为了将 Rust 代码封装到 Python 中,你可以使用 PyO3。PyO3 Rust “crate”(即库)允许内联提示将 Rust 代码包装为 Python,使得修改两者更容易。

包含 PyO3 crate 原语

首先,你必须包含 PyO3 crate 原语。

use pyo3::prelude::*;

封装枚举

枚举需要被封装。derive 从句对于将枚举封装为 PyO3 是必需的,因为它们允许类被复制和克隆,使它们更容易在 Python 中使用。

#[pyclass]
#[derive(Clone)]
#[derive(Copy)]
enum Reset {
    /* ... */
}

封装结构

结构同样需要被封装。在 Rust 中,这些被称为 “宏”,它们会生成所需的接口位。

#[pyclass]
struct Counter {
    /* ... */
}

封装实现

封装实现(impl)更有趣。增加了另一个名为 new 的宏。此方法被标记为 #[new],让 PyO3 知道如何为内置对象公开构造函数。

#[pymethods]
impl Counter {
    #[new]
    fn new(what: char, min_number: u64,
          reset: Reset) -> Self {
        Counter{what: what,
          min_number: min_number, reset: reset}
    }
    /* ... */
}

定义模块

最后,定义一个初始化模块的函数。此函数具有特定的签名,必须与模块同名,并用 #[pymodule] 修饰。

#[pymodule]
fn counter(_py: Python, m: &PyModule
) -> PyResult<()> {
    m.add_class::<Counter>()?;
    m.add_class::<Reset>()?;
    Ok(())
}

? 显示此函数可能失败(例如,如果类没有正确配置)。 PyResult 在导入时转换为 Python 异常。

Maturin 开发

为了快速检查,用 maturin develop 构建并将库安装到当前虚拟环境中。这有助于快速迭代。

$ maturin develop

Maturin 构建

maturin build 命令构建一个 manylinux 轮子,它可以上传到 PyPI。轮子是特定于 CPU 架构的。

Python 库

从 Python 中使用库是最简单的部分。没有任何东西表明这与在 Python 中编写代码有什么区别。这其中的一个有用方面是,如果你优化了已经有单元测试的 Python 中的现有库,你可以使用 Python 单元测试来测试 Rust 库。

导入

无论你是使用 maturin develop 还是 pip install 来安装它,导入库都是使用 import 完成的。

import counter

构造函数

构造函数的定义正好使对象可以从 Python 构建。这并不总是如此。有时仅从更复杂的函数返回对象。

cntr = counter.Counter(
    'c',
    3,
    counter.Reset.NewlinesReset,
)

调用函数

最终的收益终于来了。检查这个字符串是否至少有三个 “c” 字符:

>>> cntr.has_count("hello-c-c-c-goodbye")
True

添加一个换行符会触发剩余操作,这里没有插入换行符的三个 “c” 字符:

>>> cntr.has_count("hello-c-c-\nc-goodbye")
False

使用 Rust 和 Python 很容易

我的目标是让你相信将 Rust 和 Python 结合起来很简单。我编写了一些“粘合剂”代码。Rust 和 Python 具有互补的优点和缺点。

Rust 非常适合高性能、安全的代码。Rust 具有陡峭的学习曲线,对于快速原型解决方案而言可能有些笨拙。

Python 很容易入手,并支持非常紧密的迭代循环。Python 确实有一个“速度上限”。超过一定程度后,从 Python 中获得更好的性能就更难了。

将它们结合起来完美无缝。在 Python 中进行原型设计,并将性能瓶颈移至 Rust 中。

使用 Maturin,你的开发和部署流程更容易进行。开发、构建并享受这一组合吧!


via: https://opensource.com/article/23/3/python-loves-rust

作者:Moshe Zadka 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Meta 公布革命性可扩展模型架构 Megabyte

如今热捧的生成式 AI 模型,如 GPT-4 等,都是基于谷歌 2017 年提出的 转换器 Transformer 架构。Meta 的研究人员认为该架构存在两大设计缺陷:其一,转换器模型需要关注所有令牌,当需要处理的令牌数以千计时,计算非常密集。其二,采用了串行计算模式,存在扩展性难题。Meta 公司发表论文,提出了一种革命性的可扩展模型架构 Megabyte。它将输入输出序列分割为“补丁”而不是“令牌”。Megabyte 可以并行进行计算,在每个补丁中,局部 AI 生成结果,全局模型负责协调所有补丁的最终输出,从而解决了扩展性问题。测试显示,有 15 亿参数的 Megabyte 模型比有 3.5 亿参数的转换器模型生成序列快 40%。Megabyte 模型能支持最多 120 万个令牌,相比下 GPT-4 是 3.2 万个令牌,Claude 是 10 万个令牌。

消息来源:Artisana
老王点评:令人称奇的是,在这次 AI 竞赛中,Meta 频繁地爆出新成果,虽然目前还不能完全盖住 OpenAI 和微软的风头,但是给人的感觉很有希望。

PyPI 向法庭提供了用户记录

Python 软件基金会披露,它根据美国司法部的要求提供了其软件包仓库 PyPI 的用户数据。法庭传票要求提供 5 个用户的用户名、网名、邮寄地址、公司地址、电子邮件地址、连接记录,会话时间和持续时长以及相关 IP 记录,以及,他们上传的 PyPI 软件包记录和这些软件包的下载 IP 日志等等。Python 软件基金会在与律师讨论之后满足了传票要求。

消息来源:Python 软件基金会
老王点评:说起来,这些软件基金会和软件仓库都没有受我国法律管辖的吧。

Thunderbird 发布全新徽标

在将近二十年之后,Thunderbird 项目发布了全新徽标。新徽标与 Mozilla Firefox 浏览器的徽标风格相似,开发者表示这是为了纪念其历史和与 Mozilla 的重要联系,向下一个 20 年前进。该徽标的设计师也是 Firefox 和 Thunderbird 原徽标的设计者。

消息来源:Thunderbird
老王点评:我觉得不如原来的好看,不过这不重要,重要的是,Thunderbird 终于有了更多实质性的改进,比如提供移动版本。