在 OSX 上删除用户密码

nlu*_*oni 5 user-accounts passwords command-line administration macos

尽管我很想弄清楚这个问题,但在我已经有了一个有效的解决方案(命令行创建)时,在删除一个愚蠢的键上已经投入了太多时间。我将删除用户并运行我需要的命令。得到答案仍然很棒,但我认为这不会发生。

我有一个连接到buildbot的奴隶网络,每个奴隶都有一个 buildbot 用户帐户。我希望他们的帐户没有密码(阅读:不是空密码)。我在其中一个盒子上成功地做到了这一点,这是远程创建用户而不是在过程中设置密码的重要结果。

我通过 GUI 设置的另外两台 OSX 机器确实有密码,我想知道是否有办法删除密码而不将其留空。我查看了一些关于dscland的文档passwd,但他们没有我正在寻找的选项。我可以将它们设置为一些随机的数字串。那会同样有效吗?我的描述是否等同于拥有一个空密码并锁定帐户(如针对 linux 的讨论)?如果是这样,我如何锁定 OSX 帐户?

我的问题的第二部分是关于我最初创建用户的方式。下面是命令,它们似乎工作正常,但我想知道我是否遗漏了一些重要的设置——尽管 buildslave 确实启动并执行了作业。

sudo dscl . -create /Users/buildbot
sudo dscl . -create /Users/buildbot UserShell /bin/bash
sudo dscl . -create /Users/buildbot RealName "BuildBot"
sudo dscl . -create /Users/buildbot UniqueID <ID>
sudo dscl . -create /Users/buildbot PrimaryGroupID 61
sudo dscl . -create /Users/buildbot NFSHomeDirectory /Users/buildbot
sudo mkdir /Users/buildbot
sudo chown buildbot /Users/buildbot
Run Code Online (Sandbox Code Playgroud)

编辑:对于已经拥有通过系统偏好设置创建的带有密码的帐户的机器,Dan Black 建议的命令实际上并没有删除密码密钥,

sudo dscl . -delete /Users/buildbot Password
sudo dscl . -read /Users/buildbot Password
Run Code Online (Sandbox Code Playgroud)

第二个命令的输出是,

Password: *******
Run Code Online (Sandbox Code Playgroud)

继续好像密码被删除一样,我运行

sudo dscl . -create /Users/buildbot Password '*'
su buildbot
Run Code Online (Sandbox Code Playgroud)

并且之前的密码访问该帐户。这是在 OSX 10.5.8 和 10.6.8 上。

sudo dscl . -change /Users/buildbot Password 'OLDPASS' '*'
su buildbot
Run Code Online (Sandbox Code Playgroud)

这也不会更改密码,并且 OLDPASS 可以在要求输入密码时切换用户。

这是我遇到问题的用户的完整键值对输出 --created 通过 sys-preferences。为了澄清不一致,这台机器使用用户'developer'而不是'buildbot',但之前的命令都是一样的,只是明显的替换

Amoy:~ lyn$ sudo dscl . -read /Users/developer
dsAttrTypeNative:_writers_hint: developer
dsAttrTypeNative:_writers_jpegphoto: developer
dsAttrTypeNative:_writers_LinkedIdentity: developer
dsAttrTypeNative:_writers_passwd: developer
dsAttrTypeNative:_writers_picture: developer
dsAttrTypeNative:_writers_realname: developer
dsAttrTypeNative:_writers_UserCertificate: developer
AppleMetaNodeLocation: /Local/Default
AuthenticationAuthority: ;ShadowHash; ;Kerberosv5;;developer@LKDC:SHA1.08FF6FDC52096FD6C53DEDEE75A2F9315F964B22;LKDC:SHA1.08FF6FDC52096FD6C53DEDEE75A2F9315F964B22;
AuthenticationHint:
 developer for auto testing
GeneratedUID: BF95A834-A7F1-4DDD-8DFB-6B80B8120CA7
NFSHomeDirectory: /Users/developer
Password: ********
Picture:
 /Library/User Pictures/Fun/Flippers.tif
PrimaryGroupID: 20
RealName: Developer
RecordName: developer
RecordType: dsRecTypeStandard:Users
UniqueID: 512
UserShell: /bin/bash
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 2

我认为您对 @Daniel Beck 的回答遇到的问题是密码没有存储在用户记录的“密码”属性中,而是作为 /var/db/shadow/hash/USERGUID 中的影子哈希文件和 AuthenticationAuthority 属性存储仍然指出这一点。这似乎对我有用:

sudo dscl . -delete /Users/buildbot AuthenticationAuthority
buildbotGUID=$(dscl . -read /Users/buildbot GeneratedUID | awk '{print $2}')
sudo rm "/var/db/shadow/hash/$buildbotGUID" "/var/db/shadow/hash/$buildbotGUID.state"
Run Code Online (Sandbox Code Playgroud)

理想情况下,您还应该删除帐户的 Kerberos 主体(OS X 客户端运行自己的“本地”Kerberos 领域,并且它偶尔会陷入困境)。但这有点复杂,我认为很大程度上取决于您使用的 OS X 版本。

顺便说一句,如果上面的方法不能完全解决问题,请尝试以下操作:

sudo dscl . -create /Users/buildbot AuthenticationAuthority ";DisabledUser;"
Run Code Online (Sandbox Code Playgroud)