如何使用 Mac OS X 服务器从 CLI 禁用用户帐户?

6 mac-osx-server mac-osx opendirectory

是否有任何可能的解决方案可以从 CLI(例如通过 SSH)禁用用户?必须有一个 dscl 命令。或者是否有我可以相应设置的 dsAttrTypeStandard 属性?

任何指针?

小智 8

对于所有 OS X 帐户

pwpolicy不适用于 OS X 客户端上的本地帐户。但是您可以使用 dscl 命令直接编辑这些身份验证设置。此方法保证适用于用户级 OS X 帐户(您将在登录窗口中看到的访客、管理员和其他常规帐户)。使用这种方法,帐户是否由 OS-X Server / LDAP 帐户管理无关紧要。此方法也适用于所有 OSX 系统帐户(否则您将禁用其登录 shell)。

就是这样:

# Read the AuthenticationAuthority key
dscl . -read /Users/username AuthenticationAuthority

AuthenticationAuthority: ;Kerberosv5;; \
username@LKDC:SHA1.41BE28E3B64EB62A42D0673968B9591DE18210F5; \
LKDC:SHA1.07264456235E49D45C4B99FC9549FC366CE32343; ; \
ShadowHash;HASHLIST:<SALTED-SHA1>
Run Code Online (Sandbox Code Playgroud)

禁用

如果尚未禁用,则附加DisabledUser到此键的值。使用分号作为字段分隔符。; ;忽略多余/空字段。

dscl . -append /Users/username AuthenticationAuthority ";DisabledUser;"
Run Code Online (Sandbox Code Playgroud)

查看

要检查帐户的启用/禁用状态:

dscl . -read /Users/username AuthenticationAuthority | grep DisabledUser
Run Code Online (Sandbox Code Playgroud)

对于 OSX 系统帐户:这些帐户没有AuthenticationAuthority开始的密钥。因此检查它们的启用/禁用状态取决于该UserShell属性是否具有有效的登录外壳。因此,在AuthenticationAuthority不存在时检查外壳。

使能够

要重新启用用户帐户,我们只需DisabledUser从 AuthenticationAuthority 条目中删除子字符串。我们使用然后使用dscl . -createcmd 并写回整个事情。

dscl . -read /Users/username AuthenticationAuthority | \
sed 's/AuthenticationAuthority: //;s/DisabledUser//g;s/[; ]*$//' | \
xargs dscl . -create /Users/username AuthenticationAuthority
Run Code Online (Sandbox Code Playgroud)

获取所有用户的 AuthenticationAuthority 凭据:

dscl . -list /Users AuthenticationAuthority
Run Code Online (Sandbox Code Playgroud)

系统帐户:请记住,系统帐户还必须具有有效的登录 shell。


Che*_*ion 6

这适用于 10.5 和 10.6 的 LDAP/OD 帐户:

pwpolicy -a diradmin -u ajohnson -setpolicy "isDisabled=1"
Run Code Online (Sandbox Code Playgroud)

或者对于本地帐户:

sudo dscl . -create /Users/ajohnson UserShell /usr/bin/false
Run Code Online (Sandbox Code Playgroud)

将 ajohnson 替换为您要禁用的用户的短用户名。

要重新启用只需设置“isDisabled=0”而不是 1。或者在本地帐户的情况下到任何 shell /etc/shells

pwpolicy示例来自用户管理文档 (Snow Leopard) 的第 62 页或命令行管理 Leopard手册的第 106 页。