* `getspnam(name)`:按用户名查询影子记录,底层仍是 `openat`(x86-64 号 257)打开 `/etc/shadow` 加 `read`(号 0)读取,成功前提是调用进程有效 UID 为 0。 * `getspent()` / `setspent()` / `endspent()`:枚举、重置、关闭影子数据库。 * `struct spwd`:`sp_namp` 用户名、`sp_pwdp` 哈希字段(含算法标记与盐,本章不展开具体取值)。 * 权限结果:普通用户打开 `/etc/shadow` 返回 `EACCES`(13),`getspnam` 返回 NULL 并置 errno,不会回退给部分内容。