前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linus:“我删除了Linux,因为它就是个垃圾”

Linus:“我删除了Linux,因为它就是个垃圾”

原创
作者头像
BlueSocks
发布于 2022-04-07 05:37:36
发布于 2022-04-07 05:37:36
6150
举报
文章被收录于专栏:Android安卓进阶Android安卓进阶

1月 25日, Linus Torvalds 在 Linux 的 GitHub 仓库中提交了一个恶作剧 README页面,其备注名为《delete linux because it sucks》—— 我删除了 Linux ,因为它就是个垃圾。

翻译: 大家好,我是 linus torvalds,红极一时的 linux 的作者。你可以查看 repo 的 url 和文件顶部的名字,它们可以证明是我本人在提交。

我删除了 linux,因为我讨厌它,我认为它很烂。你应该去用这个很棒的操作系统,它叫做 windows xp,我刚刚发现它真的很棒。

但是为什么说这是一场恶作剧呢?因为 Linux 的源代码并没有被删除,而且有细心的网友发现:该 README 最底部还有一个链接:

这个链接指向 Hacker News 黑客论坛的一个帖子,帖子详细介绍了 GitHub 现存的“虚假提交”漏洞:可以在 https://github.com/my/project的 URL下发布任意提交。

比如用 https://github.com/my/project/blob/<faked\_commit>/README.md 这种 URL ,就可以发布虚假的 README 页面,这种虚假提交不会出现在项目的提交记录里面,也不属于任何一个分支,只能通过访问特定的 URL 看到。而 Linus 这个恶作剧 README 文件正是利用了这个虚假提交漏洞,看一下这个 README 的 URL :

如果是正常的提交,URL 应该带有 commit 字眼,比如:

除了 URL 不对外,该 README 文件也未出现在提交记录中:

由此可见,Linus 只是开了个玩笑,并非真的删库跑路。

对此漏洞感兴趣的可以去看看 Hacker News 的原帖,这个虚假提交漏洞结合 GitHub 另一个“通过 git 电子邮件地址冒充用户”漏洞,能创造出以假乱真的钓鱼页面。

比如:

https://github.com/slimsag/linux/tree/5895e21f3c744ed9829e3afe9691e3eb1b1932ae#linux-kernel这个仓库,看起来似乎 Linus 本人参与了这个仓库的建设:

然而这只是通过替换电子邮件地址漏洞,把 slimsag 换成了 torvalds 而已。

左边是通过漏洞替换邮件地址的 torvalds ,右边是正常的,仔细观察对比可以发现,障眼法换出来的 torvalds 是不显示活动记录的。

这些 GitHub 漏洞都是 2020 年公开的,然而漏洞作者称“GitHub 完全不把这些问题当作漏洞”,不知道 GitHub 是无法处理,或是认为没必要处理,反正直到现在它们仍能被利用。

尾言

好了,今天的趣事就分享到这里

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用Rust实现Brainfuck的JIT编译器
希望读者们都可以理解上述 C 代码的作用。但是,此代码在底层如何工作?我认为并非所有人都能回答这个问题,我也是。我可以用Haskell,Erlang,Go 等高级编程语言编写代码,但是在它们编译后我并不知道它在底层是如何工作的。因此,我决定采取一些更深入的步骤,进行记录,并描述我对此的学习过程。希望这个过程不仅仅只是对我来说很有趣。让我们开始吧。
端碗吹水
2022/06/06
9710
Rust实战系列-深入理解数据
本文是《Rust in action》学习总结系列的第五部分,更多内容请看已发布文章:
abin
2023/03/21
1.4K0
Rust实战系列-深入理解数据
第3章 | 基本数据类型 | 3.1 固定宽度的述职类型
Rust 语言就是围绕其类型来设计的。Rust 对高性能代码的支持,源自它能让开发人员选择最适合当前场景的数据表示法,并在简单性和成本之间进行合理的权衡。Rust 的内存和线程安全保障也依赖于其类型系统的健全性,而 Rust 的灵活性则源于其泛型类型和特型(Trait)
草帽lufei
2024/05/08
2490
第3章 | 基本数据类型 | 3.1 固定宽度的述职类型
Brainfuck JIT Compiler in Rust
我们都知道,对于解释型的语言实现来说,性能是大家关注的焦点。比如,这位 Tondbal ik Ni 曾经还说过:
不知雨
2018/08/21
1K0
【翻译】200行代码讲透RUST FUTURES (2)
在我们深入研究 Futures in Rust 的细节之前,让我们快速了解一下处理并发编程的各种方法,以及每种方法的优缺点。
MikeLoveRust
2020/07/28
7770
使用Rust实现一个socks5代理服务器
SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递,也就是用作代理的场景。SOCKS是"SOCKet Secure"的缩写。关于socks5协议可以参考维基百科的说明,有中文有英文的,在这里就不赘述了:
端碗吹水
2022/06/06
1.3K0
C++/Rust 元编程之 BrainFuck 编译器(constexpr/ 过程宏解法)
原文地址:C++/Rust 元编程之 BrainFuck 编译器(constexpr/ 过程宏解法)
MikeLoveRust
2020/11/16
1K0
【连载】两百行Rust代码解析绿色线程原理(四)一个绿色线程的实现
在我们开始之前,我得提醒你我们编写的代码非常不安全,并且这也不是编写 Rust 代码的 “最佳实践”。我希望在不引入很多不必要的复杂性的前提下使其尽可能安全,所以如果你发现了更安全方法,又不会让我们的代码过于复杂,那么我鼓励亲爱的你为该项目提一个 RP(Pull Request)。
MikeLoveRust
2020/02/12
7260
rust写操作系统 rCore tutorial 学习笔记:实验指导四 进程与线程
这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily
云微
2023/02/11
4720
【连载】两百行Rust代码解析绿色线程原理(三)栈
这一点很重要。计算机只有内存,它没有特殊的“栈”内存和“堆”内存,它们都是同一个内存的某一部分。
MikeLoveRust
2020/02/12
5220
Node.js 开发者的 Rust 入门指南
随着WebAssembly的进步,如果你想在JavaScript和Node.js的基础上,提高浏览器、服务器和边缘计算的性能,那么可以了解一下Rust。
五月君
2021/07/15
2K0
Node.js 开发者的 Rust 入门指南
2023-03-06:给定一个二维网格 grid ,其中: ‘.‘ 代表一个空房间 ‘#‘ 代表一堵 ‘@‘ 是起点 小写字母代表钥匙 大写字母代表锁 我们从起
2023-03-06:给定一个二维网格 grid ,其中:'.' 代表一个空房间'#' 代表一堵'@' 是起点小写字母代表钥匙大写字母代表锁我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间我们不能在网格外面行走,也无法穿过一堵墙如果途经一个钥匙,我们就把它捡起来。除非我们手里有对应的钥匙,否则无法通过锁。假设 k 为 钥匙/锁 的个数,且满足 1 <= k <= 6,字母表中的前 k 个字母在网格中都有自己对应的一个小写和一个大写字母换言之,每个锁有唯一对应的钥匙,每个钥匙也有唯一对应的锁
福大大架构师每日一题
2023/03/06
3990
2023-03-06:给定一个二维网格 grid ,其中: ‘.‘ 代表一个空房间 ‘#‘ 代表一堵 ‘@‘ 是起点 小写字母代表钥匙 大写字母代表锁 我们从起
rust写操作系统 rCore tutorial 学习笔记:实验指导五 驱动与文件
这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily
云微
2023/02/11
8160
佛萨奇矩阵公排开发系统丨佛萨奇系统开发(正式版)丨佛萨奇dapp开发源码设计
编译完成后,将得到一个.wasm格式的合约文件,可将之部署到指定到长安链上,完成合约部署。 部署合约的使用教程可详见:部署示例合约。
VX_I357O98O7I8
2022/12/15
1.1K0
【连载】两百行Rust代码解析绿色线程原理(二)一个能跑通的例子
首先,让我们在名为 green_threads 的文件夹中启动一个新项目。命令行执行:
MikeLoveRust
2020/02/12
8520
Rust赋能前端:写一个 Excel 生成引擎
大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder
前端柒八九
2025/01/03
2540
Rust赋能前端:写一个 Excel 生成引擎
【译】为 嵌入式 C 程序员编写的 Rust 指南
这是来自 Google OpenTitan 团队,给嵌入式 C 程序员专门打造的一份 Rust 指南。
张汉东
2021/10/13
5.4K0
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_07_2_week/Code01_DistinctSubseqValue.java)
福大大架构师每日一题
2022/11/06
3250
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
彻底弄懂dalvik字节码【二】
这个方法中先保存了前一个方法的状态,然后初始化当前方法的状态,比如设置pc指向方法的字节码开始处等。然后调用dvmInterpretPortable开始解释执行,执行完毕后,恢复了前一个方法的状态。
用户2930595
2018/08/23
1K0
彻底弄懂dalvik字节码【二】
【连载】两百行Rust代码解析绿色线程原理(五)附录:支持 Windows
我们的示例适用于 OSX、Linux 和 Windows,但我之前曾指出,虽然这个实现在 Windows 上可以运行,但并不正确。因为我一直致力于使这个实现在所有三个平台上都能正确运行,所以我将在本章中介绍我们还需要做的事情。
MikeLoveRust
2020/02/12
6890
推荐阅读
用Rust实现Brainfuck的JIT编译器
9710
Rust实战系列-深入理解数据
1.4K0
第3章 | 基本数据类型 | 3.1 固定宽度的述职类型
2490
Brainfuck JIT Compiler in Rust
1K0
【翻译】200行代码讲透RUST FUTURES (2)
7770
使用Rust实现一个socks5代理服务器
1.3K0
C++/Rust 元编程之 BrainFuck 编译器(constexpr/ 过程宏解法)
1K0
【连载】两百行Rust代码解析绿色线程原理(四)一个绿色线程的实现
7260
rust写操作系统 rCore tutorial 学习笔记:实验指导四 进程与线程
4720
【连载】两百行Rust代码解析绿色线程原理(三)栈
5220
Node.js 开发者的 Rust 入门指南
2K0
2023-03-06:给定一个二维网格 grid ,其中: ‘.‘ 代表一个空房间 ‘#‘ 代表一堵 ‘@‘ 是起点 小写字母代表钥匙 大写字母代表锁 我们从起
3990
rust写操作系统 rCore tutorial 学习笔记:实验指导五 驱动与文件
8160
佛萨奇矩阵公排开发系统丨佛萨奇系统开发(正式版)丨佛萨奇dapp开发源码设计
1.1K0
【连载】两百行Rust代码解析绿色线程原理(二)一个能跑通的例子
8520
Rust赋能前端:写一个 Excel 生成引擎
2540
【译】为 嵌入式 C 程序员编写的 Rust 指南
5.4K0
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
3250
彻底弄懂dalvik字节码【二】
1K0
【连载】两百行Rust代码解析绿色线程原理(五)附录:支持 Windows
6890
相关推荐
用Rust实现Brainfuck的JIT编译器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档