Docker 和 Podman 中的 Linux Capabilities

在运行 Docker (或 Podman) 容器时,有时即使使用 root 用户或者使用了 sudo,也会出现 Operation not permitted 的错误信息。这是因为容器中的 root 并不具有完整的 root 权限。这种权限的控制是通过 Linux capabilities 实现的。本文将首先介绍 Linux capabilities 的概念,然后以 Docker 为例介绍如何调整容器的 capabilities,最后介绍 Docker 和 Podman 在默认 capabilities 上的差异,以为容器的开发者和用户提供参考。

阅读更多

安全地使用 SSH 进行持续部署

在 GitHub Actions 等 CI/CD (持续集成/持续部署) 服务中,如果需要部署到远程服务器,我们通常会使用 SSH 连接。然而如果不加以限制,存储在 CI/CD 服务提供商中的凭证一旦泄露将对服务器造成巨大的安全风险。遵循最小权限原则,本文将利用 SSHD 为用户强制指定命令的功能,限制 CI/CD (以 GitHub Actions 为例) 所使用的用户只能执行特定的命令,从而实现安全的持续部署。

阅读更多

Windows 中的 excludedportrange 和 dynamicport

你在使用 Windows 时是否会遇到这样的问题:某个端口在 netstat -ano 中并没有显示被占用,但是即使使用管理员权限仍然无权绑定该端口?这是因为 Windows 有一些端口是被保留的,即 excludedportrange,而该问题可以通过调整 dynamicport 解决。

阅读更多

在 2023 年续订 GitHub 和 Azure 学生包

本文撰写于 2023 年 12 月 19 日,文章中的内容具有时效性,当你看到这篇文章时它可能已经过时。

两年前我申请了 GitHub 和 Azure 的学生包。过去的两年它们增添了很多内容,尤其是大受欢迎的 GitHub Copilot,由此也导致了更多非学生的羊毛党的涌入,微软不得不提高了风控水平,造成真正的学生的申请流程变得更加复杂。在 11 月底,我的 GitHub 和 Azure 学生包都将到期,因此我在 11 月进行了续订。我在这篇文章谈谈我在 2023 年续订 GitHub 和 Azure 学生包的经历。

阅读更多

在 YubiKey 上生成私钥并在 Windows 上使用

截止到我写这篇博客,我在网络上所看到的将 Yubikey PIV 证书与 Windows 一起使用的教程和文档都是已经有完整的私钥和公钥(在 Yubikey 外生成),将其安装在 Windows 和导入到 Yubikey 使用。但是,Yubikey 还提供了一种具有更高安全性的选项:在 Yubikey 上生成私钥,这种方法的好处是私钥不会离开 Yubikey,因此不可能被泄露。但是在这样的情况下,我们没有可以用于导入到 Windows 的私钥,Windows 并不知道我们具有相应数字证书的私钥,在签名时不会将我们的证书作为可用的证书。

本文将介绍如何在 Yubikey 上生成私钥,使 Windows 将证书与 Yubikey 上的私钥相关联,以便在 Windows 上进行代码签名。尽管本文的目的是进行代码签名,但是文中的关联方法也适用于其他需要使用在 Yubikey 上生成的私钥的场景。

阅读更多

ZSH 自动补全配置

我最喜欢的 shell 是 zsh,它的自动补全功能非常强大,但是经过长期的使用我也感受到一些问题。为了解决这些问题,我查找资料并按自己的喜好配置了它的自动补全系统。本文记录了我的配置。

阅读更多

在 Docker 中运行 Cloudflare WARP

Cloudflare WARP 是 Cloudflare 提供的免费 VPN 服务,由于多数服务商都将其出口 IP 视作信誉良好的家宽 IP,许多人将其用于 IP 地址较脏的服务器,以便访问风控较严格的网站。然而当我们将它在自己的服务器上使用时,会遇到以下的问题:

  • 官方 WARP 客户端在默认模式 1.1.1.1 with WARP 下会阻断所有入站连接,这意味着服务器上的网站和服务都无法被访问
  • 官方 WARP 客户端在 Local Proxy 模式下尽管没有阻断入站连接的问题,其提供的 HTTPS/SOCKS5 代理并不能传输 UDP 数据包
  • 为了防止滥用,Cloudflare 在部分地区阻止了第三方客户端 (wgcf 等) 访问 WARP 服务,暂不清楚它是否会扩大该措施的范围

本文将在 Docker 中运行官方 WARP 客户端,以解决上述问题。项目代码已经发布到 GitHub

阅读更多

无需重装地将 Windows 11 家庭版(OEM 激活)升级到批量(KMS 激活)专业版

本文撰写于 2023 年 7 月 17 日,文章中的内容具有时效性,当你看到这篇文章时它可能已经过时。

不知从什么时候开始,微软限制了将 OEM 激活的 Windows 家庭和学生版直接升级到批量激活(使用 KMS 激活)的专业版,网上之前存在的很多方法都失效了。恰好最近我买了一台新电脑,需要升级到学校提供的专业版,但是又不希望重装(这意味着重新安装全部驱动),于是开始寻找相应的办法。在尝试网上搜索发现的多种办法均失败后,我自行探索得到了一种无需重装的升级方式。我将在本文中给出我的探索过程和最终成功的方法。

请仅在具有合法批量激活许可证的情况下使用此方法,使用盗版软件违法,由此带来的任何后果本人概不负责!
阅读更多

在无头设备上使用 matplotlib

matplotlib 是一个被广泛使用的 Python 绘图库,但是在远程服务器等无头设备上使用时,可能会遇到 plt.show() 无法显示和缺少中文字体的问题。本文将介绍如何解决这些问题。

阅读更多

使用 Deploy key 将私有 GitHub 仓库克隆到境内服务器

由于某些原因,我们往往无法直接在境内服务器上克隆 GitHub 上的仓库。对于公开仓库,我们可以通过公益或自建的反向代理来解决这个问题。但是当我们希望将仓库保持私有时,我们遇到了以下几个问题:

  1. 我们不希望将自己的凭据上传到服务器,因此需要使用权限较低的 personal access token
  2. 很多反向代理方式,尤其是公益的,并不支持传递 personal access token
  3. 在服务器上使用 personal access token 配合反向代理进行 HTTPS clone 将会向反向代理服务器暴露该 token

本文将通过转发 GitHub 的 SSH 端口并使用 Deploy key 来解决这些问题。使用该方案,服务器上的凭据将仅限于读取指定仓库,且中间人无法获得你的凭据。

阅读更多