是否有任何可能的解决方案可以从 CLI(例如通过 SSH)禁用用户?必须有一个 dscl 命令。或者是否有我可以相应地设置的 dsAttrTypeStandard 属性?
有什么指点吗?
答案1
对于所有 OS X 帐户
pwpolicy
不适用于 OS X 客户端上的本地帐户。但是你可以使用 dscl 命令直接编辑这些身份验证设置。此方法保证适用于用户级 OS X 帐户(登录窗口中列出的来宾、管理员和其他常规帐户)。使用此方法,帐户是否使用 OS-X 服务器/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>
禁用
如果尚未禁用,则附加DisabledUser
到此键的值。使用分号作为字段分隔符。多余/空白; ;
字段将被忽略。
dscl . -append /Users/username AuthenticationAuthority ";DisabledUser;"
查看
要检查帐户的启用/禁用状态:
dscl . -read /Users/username AuthenticationAuthority | grep DisabledUser
对于 OSX 系统帐户:这些帐户一开始没有AuthenticationAuthority
密钥。因此,检查其启用/禁用状态取决于UserShell
属性是否具有有效的登录 shell。因此,当 shellAuthenticationAuthority
不存在时,请检查该 shell。
使能够
要重新启用用户帐户,我们只需DisabledUser
从 AuthenticationAuthority 条目中删除子字符串。然后我们使用 cmddscl . -create
并写回整个内容。
dscl . -read /Users/username AuthenticationAuthority | \
sed 's/AuthenticationAuthority: //;s/DisabledUser//g;s/[; ]*$//' | \
xargs dscl . -create /Users/username AuthenticationAuthority
获取所有用户的 AuthenticationAuthority 凭证:
dscl . -list /Users AuthenticationAuthority
系统账户:请记住系统账户还必须有一个有效的登录 shell。
答案2
这在 10.5 和 10.6 版的 LDAP/OD 帐户中有效:
pwpolicy -a diradmin -u ajohnson -setpolicy "isDisabled=1"
或者对于本地帐户:
sudo dscl . -create /Users/ajohnson UserShell /usr/bin/false
将 ajohnson 替换为您想要禁用的用户的短用户名。
要重新启用,只需将“isDisabled=0”设置为 1。或者,对于本地帐户,将其设置为/etc/shells
pwpolicy
例子来自用户管理文档(Snow Leopard)或第 106 页命令行管理 Leopard手动的。
答案3
我们有一些 OSX 客户端从 Linux LDAP 服务器进行身份验证。对我有用的方法是将用户的 loginShell 属性设置为 /usr/bin/false。这似乎可以阻止 SSH 和图形登录。