使 Homebrew 在 root 权限下工作

Homebrew 是一个新型的,Ruby 编写的 macOS 包管理器。但是 Homebrew 的一些设计哲学使得它难以在多用户的情况下共同使用,并且存在诸多安全隐患。比如,Homebrew 会将 /usr/local 下的许多目录的所有者设定为当前执行用户,并禁止用户使用 root 权限安装包。这些设计哲学,使得 Homebrew 难以成为一个系统级的包管理器。但 MacPorts 和 Fink 相对难以令人满意,因此我们需要让 Homebrew 像其它包管理器一样,使用 root 安装包并不破坏原有的系统权限。

Homebrew 代码研读

通过监控进程我们可以发现,判定是否 root 权限的代码并不在 Ruby 中。而在 Shell 脚本里。
/usr/local/Homebrew/Library/Homebrew/brew.sh 中,我们发现了相关代码: 继续阅读 »

OpenWRT 包的编译以及更改 NAT 类型

OpenWRT 的许多定制包都没有针对自己路由器架构的二进制包,因此需要自己编译。

最近发现 OpenWRT 默认的 NAT 类型是 Symmetric NAT,而这种 NAT 不适合进行打洞穿透。遂萌生了更改 NAT 类型为 Full Cone 的念头。查了一下资料发现需要安装一个内核扩展和 iptables 扩展,很不幸作者没有针对我的路由器编译二进制包,因此我们需要手动编译。 继续阅读 »

WordPress Fancy Admin UI 粉色修改版

自从买了 iPhone SE 发现粉色是一个非常漂亮的颜色,加上我一直对 WordPress 后台的美观度不是那么满意,于是我安装了 Fancy Admin UI。虽然其蓝色的配色虽然也非常好看但是和我站点的主色系不是非常搭调,于是我制作了一个修改版。

屏幕截图:
截图 继续阅读 »

macOS 下保护 SSH 密钥的一种可行思路

macOS Mojave 加入了新的文件保护机制,应用程序访问某些目录时需要获得授权方能访问。比如 Moeditor 在访问 ~/Pictures/ 下时会访问到 照片图库.photoslibrary,这时会提示「“Moeditor” 想访问您的照片。」,若不允许,则访问时会报错 Operation not permitted,因此推测其手法和 SIP 的机制类似。

继续阅读 »

记一次 cron 环境变量问题排查

之前在服务器上安装了 TimeShift,于是希望每天凌晨自动增量备份一下,于是写了个脚本丢到 crontab 里面执行。
但是第二天查看备份却发现没有备份成功。报错如下:

E: Commands listed below are not available on this system:

 * fuser

Please install required packages and try running TimeShift again

** (process:15106): CRITICAL **: app_lock_remove: assertion 'self != NULL' failed

显然 fuser 已经被安装在系统上,但是并没有被检测到。 继续阅读 »