我将 Open Directory 理解为 OpenLDAP + SASL(密码服务器)+ Kerberos。OpenLDAP 似乎遵循 SASL 进行身份验证;我不知道 Kerberos。
我想从脚本更改用户密码,最好是远程更改,并且我希望正确更改密码。(即,在任何情况下,我都不希望用户拥有不同的密码,具体取决于他们对进入 Open Directory 的三个服务中的哪一个进行身份验证。)
我可以在dsimport
未绑定到目录的机器上通过网络很好地进行操作,但是,当您尝试导入密码时(尽管将 AuthType 设置为 dsAuthMethodStandard:dsAuthClearText),它只有在没有密码的情况下才有效之前设定的。(我相信可以设置 Crypt 密码,但我担心这意味着只有 OD 的 LDAP 部分会知道当前密码。)
除了启动与服务器的 ssh 会话并在那里更改密码之外,我还能做些什么吗?如果我这样做,是否有任何命令可以让我在一行上指定多个用户及其新密码?
哪些命令可以更改所有打开的目录密码,有没有更喜欢的?
apropos password
给了我这些有趣的结果:
- kpasswd(1) - 更改用户的 Kerberos 密码
- ldappasswd(1) - 更改 LDAP 条目的密码
- lppasswd(1) - 添加、更改或删除摘要密码
- passwd(1) - 修改用户密码
- pwpolicy(8) - 获取和设置密码策略
- saslpasswd2(8) - 设置用户的 sasl 密码
- slappasswd(8) - OpenLDAP 密码实用程序
我会看一些手册页,我觉得这pwpolicy
是最好的选择,但我很想知道使用这些手册是否有任何微妙之处(例如,不要更改 Kerberos 密码无需更改 LDAP 和 SASL 密码),并且如果它们中的任何一个在没有 ssh 会话的情况下远程工作。
我遇到的最方便的答案是将 passwd 命令与 dscl 结合使用。这是交互式会话的输出(密码由星号替换):
这是一个用于进行更改的python脚本。您将需要 pexpect 模块(
sudo easy_install pexpect
应该为您获取它;我认为您不需要安装开发工具)。您可以按如下方式使用它:
请记住,每个用户的登录钥匙串上的密码通常与他们的 Open Directory 密码保持同步。Mac OS X 足够聪明,可以使用在登录窗口输入的密码来验证用户身份,并解锁他们的钥匙串。如果这两个密码不同步,对于大多数用户来说将是不方便和混乱的。
AFAIK,在服务器端更改 OD 密码的任何方法都无法修改用户的钥匙串密码。然而,AFP548 的人员为这个问题创建了一个名为Keychain Minder的解决方案,可以帮助遇到这种情况的用户。
尝试使用
接着
这些命令可以从本地机器或远程机器运行。远程客户端必须连接到目录实用程序中的目录。来自授权机器的远程身份验证检查看起来像
我也用过
这是我学到的一些有用的东西:
来自 OS X 10.5 的命令行管理文档,第 261 页,“管理开放目录密码”:
关于 using
ldappasswd
,命令行管理文档进一步指出:man passwd
指计算密码哈希的 OpenSSL 工具。获取您真正想要的 passwd 命令的手册页man /usr/share/man/man1/passwd.1.gz
更有用。