很多书籍都指出 setuid 位用法的示例包括 passwd、at 等。但在 mac os x el Capitan 中,/usr/bin/passwd 没有设置该位。
它如何更改/etc/passwd 文件?
答案1
在 OSX 中,/usr/bin/passwd
不直接写入密码文件。相反,它使用「目录系统」例如,数据库或 LDAP 服务器(例如,用于网络凭证)。为此,它与特权进程进行通信。
该程序的手册页passwd(1)
是一个很好的起点。它列出了passwd(5)
(文件格式)其中提到
进程通常使用 getpwent(3) 系列函数之一查找用户记录。在 Mac OS X 上,这些函数与目录服务(8)守护进程,它读取 /etc/master.passwd 文件并搜索其他目录信息服务以查找用户帐户。
DirectoryService 指出它已过时,您应该阅读打开目录d(8),这反过来又说
Open Directory 构成了 Mac OS X 访问方式的基础所有权威配置信息(用户、组、安装、托管桌面数据等)。这允许通过 Apple 和第三方模块使用几乎任何目录系统。
和
Open Directory Server 使用 OpenLDAP,它是 Mac OS X 客户端、Mac OS X 服务器和 Darwin 的一部分。 OpenLDAP 提供了一个强大且可扩展的平台,用于为两者提供基于目录的信息独立的和网络系统。
因此最终(即使对于独立系统),似乎是与passwd
存储您的凭据的 LDAP 服务器进行通信。查看 的输出ps
,似乎可能是
/usr/libexec/opendirectoryd
尽管passwd
能update /etc/passwd
,实际上它不会为您的用户帐户执行此操作。它使用/etc/passwd
和/etc/pwd.db
仅适用于“遗留”应用程序(尚未转换为开放目录的应用程序)。