sudo维护者公开求助:这条天天在用的Linux命令,正面临生存危机
2026/9/14 15:45:23 网站建设 项目流程

你昨天一定敲过sudo,或者亲眼看着同事在你旁边敲sudo。为了装一个软件包,执行某个系统命令,一两秒钟的事,所有人都习以为常。但今年这条命令背后的维护者公开说了句狠话:如果还没有稳定的资金支持,这个项目可能真的撑不下去了。没错,就是那个你每天都在用、却被大多数人当成“系统自带背景板”的sudo。

热搜词里一大堆人还在搜“sudo apt install”“sudo apt-get update”“sudo dpkg被中断怎么办”,说明大家的使用频率极高,依赖极深。可几乎没人想过,维护这个命令的那个人,这30年是怎么过来的。今天不聊那些“又能跑就行”的使用技巧,我想认真说说sudo这个项目本身,以及它这次摆到台面上的生存危机。

1. 几乎无处不在的sudo,正处在最尴尬的时刻

先感受一下sudo到底有多普及。不管你用的是Ubuntu、Debian、CentOS、Fedora、RHEL,还是各种基于Linux的路由器、交换机、智能电视、车机系统,甚至不少Unix变种,只要你想以管理员身份执行一条命令,脑子里蹦出来的大概率是“sudo”。这个简简单单的命令,已经成了操作系统的“默认管理员接口”。

正因为它太常用、太稳定,用户反而意识不到它是一个需要持续维护的活项目。在大多数人心里,“sudo”和“ls”“cd”一样,是Linux自带的、理所当然的东西。但这个“理所当然”背后只有一个核心维护者在长期扛着,他叫Todd C. Miller,已经在这条命令上投入了大约30年。

这次公开求助,Miller不是在卖惨。他在sudo邮件列表里说的内容非常务实:如果资金状况没有改观,他就不得不减少投入,甚至可能让项目进入维护停滞状态。对普通桌面用户来说,“停滞”听起来没什么大不了,还能用嘛。但在Linux生态里,上游一旦停摆,下游所有发行版、所有云厂商、所有嵌了sudo的设备,都会立刻面临安全更新不可持续的问题。这不是“不能用”的问题,是“出了问题没人兜底”的问题。

很讽刺的是,热搜词里凡是带sudo的提问,大多都发生在“用户非常需要它”的瞬间。有人要装ROS机器人开发环境,有人要开SSH服务,有人挂载Windows分区,有人修dpkg中断。在这些场景里,sudo都是入口,是钥匙。但大家用完就走,没人关心钥匙匠是不是快饿死了。这说的不仅仅是用户,也包括那些靠这些开源软件挣钱的大公司。

2. 30年维护路:sudo究竟是不可替代的技术基石,还是“可替换的螺丝钉”

有人说,就算sudo没了,不是还有doas,还有Rust重写的sudo-rs,还有一堆替代品吗?说实话,技术替代方案确实存在,但“可以替换”和“替换成本为零”是两码事。

2.1 从实验室小工具到全世界的默认管理员接口

sudo的历史可以追溯到1980年代,最初由Bob Coggeshall和Cliff Spencer在纽约州立大学布法罗分校开发,目的是让系统管理员能把部分root权限委派给指定用户,又不用把root密码交出去。后来Todd C. Miller在1990年代中期接手维护,一直到现在。这30年,他做的事情远比“维护一个命令”复杂得多。

他得持续跟进安全漏洞,得适配各种新的系统调用、各种新的认证机制,得管理sudoers语法的兼容性,得处理来自全世界的bug报告和功能请求。sudo项目表面上是“一条命令”,实际上它包含了解析器、认证模块、日志系统、网络策略插件、会话记录功能,还有一套完整的sudoers规则引擎。它是一套复杂的基础设施,只不过平时被藏在一个简单的命令名后面。

如果你在RedHat系发行版上装过sudo的源码包,或者看过sudo的ChangeLog,你会明白这个项目有多庞大。每次安全通告发布,从发现问题到确认影响范围,再到发布补丁,这套流程已经重复了无数次。而这套流程长期以来基本靠Miller一个人运转。

2.2 一个“安全门卫”到底承担了多少事

要理解sudo为什么重要,得先理解它在系统安全里的角色。Linux系统里root拥有最高权限,普通用户权限受限。如果你每次要用管理员权限就直接切到root,那系统基本没什么安全边界可言,所有操作也无法追责。sudo做的事,是在普通用户和root之间加了一道可控的闸门。

它在底层依赖setuid机制,用root身份启动,然后校验请求者是否在sudoers规则里被授权,再决定要不要执行用户给它的那条命令。这中间还牵扯到:

  • 认证方式:默认走系统密码,也可接LDAP、SSO、证书、硬件令牌;
  • 权限规则解析:sudoers文件里那些复杂的Host_Alias、User_Alias、Cmnd_Alias;
  • 审计日志:每一次执行都会记录时间和执行的命令,出问题好追溯;
  • 会话管理:支持sudo -i、sudo -s这类交互式登录;
  • 后续扩展:比如sudo_logsrvd可以集中式收集日志,sudo_plugin可以对接企业安全平台。

所以别把sudo当成一个“提权工具”就完事了,它更像是一套企业的访问控制系统。很多等保合规、内控审计场景里,用户做了什么操作、谁用了sudo、执行了什么命令,全靠它留痕。这背后的实现和底层系统的安全机制紧密耦合,不是随便写个setuid小程序就能替代的。

2.3 为什么说“替代方案”没那么简单

确实有不少替代方案:OpenBSD的doas、内存安全语言Rust重写的sudo-rs等等。doas配置更简单、攻击面更小,在OpenBSD社区口碑很好。sudo-rs也在逐步成熟,目标是提供更安全的实现。但问题在于,把“替代”落到实处,牵扯到全生态的兼容性、各发行版的默认软件包切换、企业安全策略的迁移、无数历史sudoers脚本的适配。这比在笔记本上装个新玩具要复杂得多。

就拿sudoers文件来说,多少公司的运维脚本、自动化工具、合规文档是围绕sudo语法写的?换成doas的配置文件,虽然简单,但策略表达能力和sudo不是一一对应的。生产环境里的替换,不是一句“用Rust重写一下”就能解决的。所以结论很明确:sudo在短期和中期内都是无法被快速替代的基石项目。

3. 拆解那封救助信:表面是缺钱,背后是缺时间、缺口碑、缺人

这次求助之所以引起圈子震动,是因为Todd C. Miller不是那种喜欢到处哭诉的人。在Linux维护者圈子里,他是出了名的埋头干活型。他能公开说“项目的未来悬挂在天平上”,说明情况确实到了很严峻的程度。

3.1 求助信里究竟透露了哪些信息

综合邮件列表和后续采访看,Miller主要说了几件事:

  • sudo没有稳定的收入来源,长期依赖个人捐赠和有限的赞助,金额远不够覆盖项目开发和维护成本;
  • 项目需要持续投入大量时间,包括代码维护、安全响应、用户支持、文档更新;
  • 单靠一个人的精力已经越来越难以支撑一个被全球数十亿次使用的安全关键项目;
  • 如果情况不改变,他可能必须减少维护频率,甚至放弃继续维护。

这些话翻译一下就是:他不是不想继续干,而是长期“用爱发电”烧不动了。一个安全关键项目的维护者,需要随时准备处理紧急漏洞。每一次CVE通告出来,都意味着可能要连续几天熬夜分析代码、写补丁、和发行版团队沟通。这种状态不能没有经济支撑。

3.2 大型开源项目的钱到底花在哪了

很多人有个错觉,认为开源项目的维护成本不就是一台服务器加一个域名吗?实际上,对一个像sudo这样的项目,支出分布在很多地方:

支出项说明
开发环境与测试基础设施需要覆盖多个系统版本、不同架构的测试机器,用于回归验证
CI与构建服务器每次提交都跑构建和测试,持续集成需要稳定的计算资源
代码托管、域名、邮件列表基础但必要的运营开销
安全响应时间成本0day出来后必须第一时间响应,这期间的精力占用是最大的隐性成本
会议、差旅、行业交流与发行版维护者、企业安全团队线上和线下沟通
法律与合规咨询许可证问题、企业合作条款需要专业人士把关

这些钱看着单项不多,加起来相当可观。而且维护者本人也是人,得有生活保障。开源维护者不是“靠爱发电的机器人”,他们的时间和经验都有真实的市场价值。Miller在邮件里说得很直白:他需要的不是“零星的感谢”,而是可持续的资金支持。

3.3 为什么说“明明全世界都在用,却拿不到钱”才是真正的悲剧

sudo的悲剧在于,它活跃地存在于整个互联网的基础层,但绝大多数使用者甚至意识不到它的存在。你做一次apt update,输出里飘过sudo字样;你执行一条运维命令,前面加上sudo。但没有人会去想,这个命令是谁写的,谁在维护,他有没有钱养家。

这就是开源世界那个著名的“看不见的用户”问题:用户数量巨大,但这些用户默认它是免费的、默认它是永远存在的、默认“有人在维护”。真正愿意掏钱的人非常少,愿意持续掏钱的公司更是凤毛麟角。sudo可以算是这个问题的教科书级案例。

4. 开源资金这个“老大难”:sudo不只是个例,而是一整套系统问题的缩影

把视野拉大一点,sudo不是第一个公开求助的,也大概率不会是最后一个。开源软件几十年来一直处在“需求极大、价值极高、资金却严重稀缺”的怪异状态。

4.1 一长串同样喊着难以为继的名字

OpenSSH在2020年前后就经历过“捐款骤减”的困境;curl的维护者Daniel Stenberg这些年一直在反复强调“curl被无数公司和设备使用,但没有任何一个公司真的在出钱维护它”;OpenSSL当年爆出Heartbleed漏洞后,大家才意识到这个加密核心库基本上也是靠少数几个人兼职维护。诚然,有些项目后来拿到了企业赞助或基金会支持,但多数知名开源项目的收入依然是“杯水车薪”。

这些年,行业里也做过各种尝试,比如OpenSSF(开源安全基金会)、各种bug bounty悬赏、GitHub Sponsors、Patreon众筹、公司定向赞助等形式,都在试图给开源维护者送钱。但效果参差不齐。大企业通常有复杂的采购流程,“给开源项目捐款”这件事在很多公司里是找不到预算科目的。而个人开发者又不可能靠每月几美元的小额捐赠支撑。

4.2 为什么大家愿意“用”,却不愿意“付钱”

这背后有很深的结构性原因,不单纯是“大家抠门”。

第一,开源软件从诞生起就被注入了“免费”基因。很多用户默认“免费”就是它的商业模式,从来没想过要买单。这跟买商业软件的心理完全不一样。

第二,“用了没感觉”是最大的问题。sudo在系统里运行得好好的,用户根本不会去查看“这是谁做的”“怎么赞助”。只有真正出现安全危机时,大家才突然想起来要关注维护者。但那时候对不起,钱解决不了所有问题,人的精力才是瓶颈。

第三,企业内部“为开源付钱”的流程太麻烦。你想给sudo项目捐个几万美元,财务部门会问:对方是哪个实体?能开票吗?这算采购还是捐赠?走什么合同?很多开发者望而却步,最后不了了之。

第四,基金会机制也有短板。有些基金会只是收了钱,却没把资源有效分配到维护者手里。钱被层层管理,到最后一线的核心维护者还是拿不到足够的资金,这个问题在某些大型基金会里已经引起过争议。

5. 如果sudo真的“无以为继”,影响会从哪条裂缝开始撕裂

很多人觉得“项目不再活跃维护”不是什么大事,代码还在,还能跑。但放在sudo这种安全关键型项目上,“停止维护”和“事故多发”基本是同一件事的两种说法。

5.1 从上游到下游的连锁反应

sudo是无数Linux发行版的基础依赖包。如果上游没有安全补丁,Debian、Ubuntu、CentOS、Fedora、SUSE这些发行版就得自己“背锅”。要么抽出人力和精力去维护一个上游分支,要么就眼睁睁看着系统暴露在已知漏洞里。

你可能会问,发行版自己不是有安全团队吗?确实有,但发行版安全团队的人力通常也是很有限的,让他们去跟一个古老的、复杂的、还在持续发现问题的代码库搏斗,压力可想而知。而且发行版下还有无数云端平台、容器镜像、嵌入式设备,这些都是下游的下游。

5.2 安全漏洞修复停滞带来的真实风险

说到这儿得提一个让整个Linux圈都紧张过的CVE:CVE-2021-3156,江湖绰号Baron Samedit。这个漏洞出在sudo自己的堆缓冲区溢出逻辑里。当时只要用户能触碰到命令行,甚至不需要知道当前用户的密码,就有机会直接获得root权限。漏洞曝光后,各大发行版连夜发补丁,云厂商纷纷提醒用户紧急更新。

这类漏洞以后还有没有可能再出现?几乎可以肯定还有。sudo这套代码经历了30年的功能堆叠,复杂度和历史包袱都不小。如果未来漏洞被发现,而维护者已经没钱没时间处理,那么这台“被全世界信任的门卫”就会变成一个千疮百孔的盲区。合规、等保、企业内部审计,全部都会受到冲击。

5.3 替代方案是“救生艇”,但不是“泰坦尼克”

确实,现在有sudo-rs在推进Rust重写版,内存安全特性理论上能避免一大类漏洞。OpenDoas在Linux上也可以作为轻量替代。但现实世界的迁移路径很长:新方案要经过各发行版打包、企业测试、兼容性验证,大量老系统根本不会升级,继续运行着老版本的sudo。

也就是说,即便替代方案是“救生艇”,在你还没换到救生艇上的时候,脚下的“大船”可不能先沉。项目维护停摆,每一个人都跑不掉。

6. 别光说“可惜”,企业和个人现在还能做点实际的事

说了这么多,问题的关键还是回到行动上。开源社区的共识正在慢慢改变:靠道德感召救不了开源,要靠机制和真金白银。

6.1 个人用户花两分钟就能做的事

如果你不是企业,只是想表达支持,几个最简单的路径:

  • 去sudo的官网sudo.ws,页面上有详细的捐赠方式,可以走PayPal或信用卡;
  • 通过GitHub Sponsors搜索相关项目或维护者本人,用每月几美元的小额赞助加入支持者名单;
  • 愿意花更多时间的话,可以做些非代码贡献,比如帮助完善文档、整理issue、翻译内容,这些都能减轻维护者的负担。

小额捐赠看起来不多,但维护者需要的是“有一批稳定的支持者”,而不是某个时刻的一次性爆发。持续的小额捐赠,才能让他对未来做出相对长期的规划。

6.2 企业该有的觉悟

对于公司来说,这一步更重要。如果你的公司里有任何一台服务器、任何一个路由器、任何一项服务在用sudo,那你其实已经是在免费使用一项关键基础设施了。企业级支持最合理的方式,是可以直接联系Todd C. Miller的sudo LLC,购买商业支持服务、定制开发或安全咨询。不要觉得“开源就不能花钱买服务”,恰恰相反,商业支持正是开源可持续运转的重要途径之一。

此外,公司还可以把“资助开源关键依赖”列进年度技术预算。这件事一点都不抽象,就像给办公楼买消防设施一样,属于基础运维成本。可以效仿一些大厂发起的开源赞助计划,定出金额和受益项目名单,每年评估、每年更新。只用不养,在开源生态里终究是不可持续的。

6.3 需要大家共同推动的认知转变

我个人的体会是,每一次“维护者公开喊话”都指向同一个需求:把开源基础设施当成基础设施,而不是“个人爱好”。公路、桥梁是需要纳税维护的,开源世界里那些几十亿人依赖的代码,也应当获得类似待遇。基金会可以做中介,企业可以做赞助,个人可以做捐赠或志愿服务。只有把这些机制摆上台面,下一次“某某项目找不到维护者”的新闻才有可能越来越少。

sudo不是第一个站在悬崖边的开源项目,也不可能是最后一个。但它是我们绝大多数人每天都会碰到的项目之一。如果你还希望Linux生态继续稳定运转,对这个30年如一日维护sudo命令的人说声感谢,再顺手贡献一点实际支持,才是最真诚的表达。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询