2024 年 macOS 上各家包管理器的现状

会麻烦一些,毕竟 macports 官方网站讲了怎么卸载

是同一个网站的不同镜像,SmartOS 是 Joyent 继续基于 SunOS 的开源版本开发的,MNX Cloud 是 Joyent 对外提供面向企业的云计算服务的合作公司,被三星收购以后 Joyent 把自己对外的企业级云服务撤下了,转移给了 MNX,自己只保留给三星提供服务和对个人用户的业务,在这之后 SmartOS 的开源代码也是变成 MNX 在维护

joyent.com 的是旧的域名,分家后新启用的域名是 smartos.org

1 个赞

homebrew比macports还不可控,在其他地方加了文件,删的时候全看那个包做的如何(

1 个赞

https://guide.macports.org/chunked/installing.macports.uninstalling.html

我翻了一下 joynet 的 pkgsrc 文档,测试是说的这里么?

Bulk builds are a way to automatically build a large number of packages, generating a nice report at the end summarising the results. We use bulk builds to build our official package sets.

pkgdev:bulk · TritonDataCenter/pkgsrc Wiki · GitHub

https://mail-index.netbsd.org/pkgsrc-bulk/

对,有 breakage 就就不会放二制进仓库,就要用户从 recipe 编译安装了。

1 个赞

这样说的话,bashrc 之类的文件也是有用户权限就能改,任意恶意软件都可以注入恶意代码,平时也很少会注意检查 bashrc 是否会被更改吧?

用 sudo 安装到系统目录,非 root 权限无法修改,的确可以起一定的保护作用,但恐怕不把 bashrc 以及用户平时的 cron job、Emacs 的配置文件等一并保护起来,也无法做到安全?

你说的 bashrc 攻击也不是只存在构想中的,最常用的几种攻击包括偷 sudo 密码,但有几点可以防范:

  1. 我不用 bash,同理,不是人人都用 Emacs,这个攻击比较难生效
  2. Emacs 配置文件很多人是有版本控制,而且既然是明文的,只要 git diff 就能发现改动。
  3. 可以执行代码的配置文件不多,重点防范就行,用 chflags uchg (BSD) 或 chattr +i (Linux) 保护用户重要配置文件不被更改,还可以设置 immutable flags 防止重要文件被误删。
  4. 至少至少,养成输 sudo 密码前检查 shell 有无异常的习慣。
1 个赞

感谢!

能否详细讲一下输 sudo 密码之前怎么检查 shell 有无异常?我感觉这很困难。

如果是 POSIX shell,确认 \builtin whence sudo 结果是 /usr/bin/sudo 或其它正常位置,\builtin whence -v 有一个 alias type,但要确保 type 也没被改了所以要用 \builtin 确保用的是正确的功能。

1 个赞

明白了,whence 是 zsh。

如果是 bash 的话就是 \builtin type sudo 或者 \builtin command -v sudo 对吧

没办法,Unix shell 的坑太多了,能允许用户覆盖掉 builtin 的命令。

话说你用的什么 shell?zsh 和 fish 能防住 bashrc,但如果是 profile 被修改了呢?:fearful:

我用 elvish,不执行 .profile

是的

1 个赞

疑似的现成案例来了: 通过 brew 安装 Scala 的 Coursier,会被安装到 ~/Library/Application Support/Coursier/bin(macOS),卸载掉了 formula 还会继续存在。(?)

之所以是「疑似」,是因为我之前用过 IDEA 的 Scala 插件,我得排除一下这个 Coursier 是谁安装的。

是这个么?好像是清华 TUNA 的成员开发的项目:https://elv.sh/


话说,还有什么 Shell 能避开 Unix Shell 的各种坑?

1 个赞

最近看到一个 Value 整的活(在脚本里随便用 rm -rf),没错是那个推出了 Proton 和 Steam Deck、为 Linux 游戏生态作出贡献的那个 Value。

这里其实会收到一个 cd: no such file or directory 的报错,但问题是已经开始删除 /* 了,其实来不及的,中断脚本也只能减少损失(尽可能避免个人文件被删),大概率重装系统是避免不了的。:sweat_smile:

Fish 还把精力放到 RIIW(Rewrite It In Rust)上了 :crab:

「战果」是现在在 Repo 里已经看不到 C/C++ 了。

截屏2024-03-10 14.44.45

最近还在用 brew,因为在用 emacs-plus。

不过我唯一用到的功能是 path injection,其实可以直接看 formula 学一下怎么改 plist。

Nix 在新一些的 macOS 上只能用 Multi-user installation 了吧?

这里 没有说 Single-user installation 的事情,而 Linux 的安装说明里明确列出了Single-user installation。

Installing a Binary Distribution - Nix Reference Manual

(你看下安装的脚本,改改就能单用户了