为什么 mac os x 不为 /usr/bin/passwd 设置 uid 位

为什么 mac os x 不为 /usr/bin/passwd 设置 uid 位

很多书籍都指出 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仅适用于“遗留”应用程序(尚未转换为开放目录的应用程序)。

相关内容