在 Go 中丢弃特权
1.0本文探讨了在 Go 语言中安全地丢弃进程特权的实现方法。作者分析了使用 syscall.Setuid 和 syscall.Setgroups 等系统调用的陷阱与正确做法,介绍了在 Linux 上通过 Credential 结构体或手动调用系统调用来降权的最佳实践,并讨论了 Go 运行时与用户/组 ID 变更之间的交互问题。
30 条相关内容
本文探讨了在 Go 语言中安全地丢弃进程特权的实现方法。作者分析了使用 syscall.Setuid 和 syscall.Setgroups 等系统调用的陷阱与正确做法,介绍了在 Linux 上通过 Credential 结构体或手动调用系统调用来降权的最佳实践,并讨论了 Go 运行时与用户/组 ID 变更之间的交互问题。
Sonarqube自托管麻烦,Codecov许可证限制50用户,OpenCov和Covergates等无附加条件项目已废弃。作者考虑用Go语言开发一个轻量级替代方案,但担心即使只支持Python和JS,团队是否愿意采用,因为大家习惯直接使用功能更全的付费服务。
NexusCortex 是一款用 Go 语言编写的稀疏 AI 推理引擎,采用类脑皮层结构,而非传统的大型语言模型。通过动态稀疏激活机制,它能在保持高性能的同时显著降低计算资源消耗,实现了接近甚至超越 Opus 4.8 级别模型的效果,被誉为 Opus 4.8 杀手。
Pastaay 是一个用 Go 语言编写的混沌工程工具,仅通过单个二进制文件即可支持 8 种不同网络协议的故障注入与弹性测试。它旨在简化分布式系统的实验流程,帮助开发者验证系统在异常条件下的行为。
本文介绍了如何使用Go标准库中的net/http/httptrace包来跟踪和分析HTTP请求的各个阶段。通过httptrace,开发者可以监控DNS查询、TCP连接、TLS握手、请求发送和响应接收等关键环节的耗时,从而更好地诊断网络性能问题。文章提供了实际的代码示例,展示了如何在原生Go HTTP客户端中集成追踪功能。
Kefka 是一个基于 Go 语言原生的 Shell 沙盒环境,内置了 GNU coreutils、通过 WebAssembly 运行的 Python 等工具。本文将带你了解实现这一功能背后所经历的疯狂工作与设计思路。
在线围棋服务器(OGS)是一个基于网页的围棋平台,支持玩家进行实时或异步对局。该平台提供多种棋盘尺寸、计时规则和排名系统,同时内置AI分析工具,方便棋手提升水平。OGS拥有活跃的社区,支持比赛组织和棋谱分享。
Gochan 是一个为 Go 语言设计的通道架构库,支持 oneshot、spsc、spmc、mpsc、mpmc、broadcast 和 watch 等多种通道类型。其设计灵感来自 Rust 通道,旨在解决开发者在不同 Go 结构体上重复实现相同通道模式的问题,让代码复用更加便捷。
本文探讨了 Go 语言中错误处理的核心理念——错误不仅仅是技术返回值,更是承载上下文信息的"故事"。作者指出,许多团队在工程实践中过度简化或忽视错误链,导致问题定位困难、代码可读性下降。文章深入分析了 Go 错误包装的原则、常见反模式,以及如何通过精心设计的错误处理逻辑,让程序在出问题时依然"说得清话"。
这是一个用Go语言编写的轻量级GPT实现,代码经过精心优化以便于开发者理解Transformer架构的核心原理。该模型使用儒勒·凡尔纳的经典小说作为训练数据,在保持代码简洁性的同时,展示了从零构建语言模型的基本流程,适合作为学习深度学习中注意力机制和生成式模型的入门参考。
该提案讨论了为 Go 语言增加泛型方法(Generic Methods)支持的可能性。目前 Go 的泛型仅支持函数和类型定义,而方法尚不能拥有额外的类型参数。该特性将允许方法定义自己的类型参数,从而在接口实现和泛型编程中提供更大的灵活性。
Posthorn 是一个自托管的电子邮件网关,以一个 Docker 容器或 Go 二进制文件的形式,架设在 VPS 上的自托管应用与事务性邮件服务商之间。它支持 Postmark、Resend、Mailgun、Amazon SES 及 SMTP 中继,并提供 HTML 表单 POST 接收功能,内置蜜罐字段、来源检查与 IP 速率限制等安全层。作者因 VPS 服务商普遍封锁默认 SMTP 端口而反复遇到邮件配置难题,遂开发此开源项目(Apache 2.0)以期解决常见痛点。
Hush 是一款使用 Go 语言开发的自托管开源应用,旨在作为 Discord 的替代方案。它基于 OpenMLS 协议构建,注重隐私和安全性,允许用户完全掌控自己的通信数据。该项目在 GitHub 上开源,适合希望搭建私有聊天平台的用户。
《Go语言小书》是一本免费的入门指南,由Karl Seguin撰写,旨在帮助读者快速掌握Go语言的基础知识。本书内容简洁明了,涵盖了Go语言的核心概念、语法和常用模式,适合编程初学者和有经验的开发者快速上手Go语言。
作者分享了他用 Go 语言从头实现的一个最小化 rsync 替代工具,该工具通过利用 Go 的内存安全特性来规避 C 语言版本中常见的内存相关漏洞。文章探讨了在保持 rsync 核心功能的同时,如何借助类型安全和垃圾回收机制构建更可靠的同步工具。
Riscrithm是一款基于Go语言开发的RISC-V汇编器与优化工具,旨在提供更直观的汇编编程体验。它能够将RISC-V汇编代码转换为机器码,并执行多种优化策略以提升代码效率。该项目强调易用性和可扩展性,适合嵌入式开发和RISC-V架构学习。
本文是 Rob Pike 在 2012 年关于 Go 语言设计哲学的经典演讲。他指出,在软件设计中,更少的语言特性往往能带来指数级更大的表达力与可维护性。通过简化语言规范、移除冗余功能,Go 语言实现了更快的编译速度、更高的代码可读性以及更高效的并发模型。文章深刻阐释了"少即是多"这一设计原则在编程语言领域的具体体现。
Michael Stapelberg 详细介绍了其使用 Go 语言编写的轻量级 rsync 替代方案,该方案通过利用 Go 的内存安全特性(如自动垃圾回收和严格的类型系统)来避免常见的 C/C++ 安全漏洞,例如缓冲区溢出和释放后使用等问题,从而在保持高性能的同时提供更强的安全保障。
WhatsKept 是一个开源的 Go 语言工具,能够从 iOS 备份中提取 WhatsApp 聊天记录,使其变得可搜索并支持智能体(agent)查询。只需一个 Go 二进制文件即可运行,无需复杂依赖,方便用户检索和分析历史消息。
这篇文章介绍了作者使用 Go 语言从头实现的一个最小化 rsync 工具。通过利用 Go 的内存安全特性(如边界检查、垃圾回收和禁止直接指针算术),该实现有效避免了传统 C 语言 rsync 实现中常见的内存漏洞(如缓冲区溢出、释放后使用等)。文章展示了如何在保持核心同步功能的同时,通过语言级安全保障来构建更可靠的网络工具。
Mvm 是一个专为 Go 语言设计的高性能虚拟机,旨在提升 Go 程序的执行效率。该项目通过优化指令调度和内存管理,为 Go 运行时提供了更快的虚拟化支持,适用于对性能有苛刻要求的场景。
本文是一份实用的迁移指南,帮助开发者从 Go 语言过渡到 Rust。文章对比了两者在内存管理、并发模型、错误处理和生态系统等方面的核心差异,并提供了具体的代码示例和迁移策略,帮助团队平稳地从 Go 转向 Rust。
2025年1月,rsync被披露了6个安全漏洞(含任意代码执行和文件泄露),本文深入探讨了用Go语言实现的最小化兼容版rsync(gokrazy/rsync)是否真正避免了整类安全问题。文章详细分析了所有12个漏洞(涵盖2025年1月和2026年5月两批),对比了上游C语言实现与Go实现的差异,并提供了判决结论、与OpenBSD openrsync(C语言编写)的对比、以及Linux上的深度防御机制建议。关键发现:Go运行时边界检查可防止堆缓冲区溢出,但最小化实现本身仍需要做好输入验证。
本文介绍了作者用 Go 语言编写的一个轻量级 rsync 实现,重点强调了其内存安全性。通过利用 Go 的内存安全特性(如自动内存管理和无野指针),该实现避免了 C 语言版本中常见的内存相关漏洞(如缓冲区溢出、释放后使用等)。文章还讨论了该实现如何通过最小化代码量和减少攻击面来进一步提升安全性。
Go 官方博客发布了 Pkg.go.dev 的 API 文档,该 API 允许开发者以编程方式访问 Go 包的元数据、文档和版本信息。通过这一接口,开发者可以自动化查询包的最新版本、依赖关系及许可证信息,从而更高效地集成到工作流或工具链中。该 API 目前处于公开测试阶段,免费使用。
mvm 是一个专为 Go 语言设计的高性能虚拟机,旨在提升 Go 程序的执行效率与运行速度。该项目为 Go 生态提供了一种轻量级的虚拟化运行时方案。
Go官方宣布推出Pkg.go.dev的公共API,允许开发者以编程方式访问Go包的文档、版本、许可证和导入依赖等信息。该API支持包元数据查询、版本列表获取以及包文档检索等功能,为Go生态系统中的工具和自动化工作流提供了更便捷的集成方式。
GobanFTP 是一款创意十足的开源项目,将古老的围棋游戏与 FTP 协议巧妙结合。玩家不再使用传统的图形界面,而是通过浏览和操作 FTP 目录结构来落子对弈,每个文件和文件夹代表棋盘上的位置与棋子状态。该项目展示了如何利用非传统交互方式实现经典游戏逻辑,兼具趣味性与技术探索价值。
Go 官方博客介绍了 Pkg.go.dev 网站的 API 功能。该 API 允许开发者以编程方式查询 Go 软件包的文档、版本、导入依赖等元数据信息,无需手动浏览网页即可获取结构化数据,便于集成到工具链和工作流中。
一个专注于深度代码探索的分析工具,帮助开发者深入理解代码库的结构与逻辑,提升代码审查与调试效率。