尽管我很想找出问题所在,但此时我已经花费了太多时间删除一个愚蠢的密钥,而我已经有一个可行的解决方案(命令行创建)。我将删除用户并运行我需要的命令。如果能有一个答案就太好了,但我认为这不会发生。
我有一个奴隶网络连接到建造机器人,每个都有一个 buildbot 用户帐户。我希望他们的帐户没有密码(阅读:不是一个空密码)。我在其中一个盒子上成功完成了此操作,这是远程创建用户并且没有在过程中设置密码的重大结果。
我通过 GUI 设置的其他两台 OSX 机器确实有密码,我想知道是否有办法在不留空的情况下删除密码。我查看了一些文档dscl
和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
编辑:对于已经通过“系统偏好设置”创建了带密码的账户的机器,Dan Black 建议的命令实际上并没有删除密码键,
sudo dscl . -delete /Users/buildbot Password
sudo dscl . -read /Users/buildbot Password
第二条命令的输出是,
Password: *******
继续,就像密码被删除一样,我运行
sudo dscl . -create /Users/buildbot Password '*'
su buildbot
并且可以使用以前的密码访问该帐户。这是在 OSX 10.5.8 和 10.6.8 上。
sudo dscl . -change /Users/buildbot Password 'OLDPASS' '*'
su buildbot
这也不会改变密码,并且 OLDPASS 可以在被要求输入密码时切换用户。
以下是通过 sys-preferences 为我遇到问题的用户 --created 提供的完整键值对输出。为了澄清不一致之处,这台机器使用用户“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
答案1
我认为 @Daniel Beck 的答案存在一个问题,即密码没有存储在用户记录的 Password 属性中,而是作为 /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"
理想情况下,您还应该删除帐户的 Kerberos 主体(OS X 客户端运行其自己的“本地”Kerberos 领域,有时会受到干扰)。但这有点复杂,我认为很大程度上取决于您使用的 OS X 版本。
顺便说一句,如果上述方法不能完全解决问题,请尝试以下方法:
sudo dscl . -create /Users/buildbot AuthenticationAuthority ";DisabledUser;"
答案2
您需要使用 将密码设置为单个*
字符(星号、星号)dscl
。
sudo dscl . -create /Users/buildbot Password '*'
确保将其转义或引用(如图所示)以免被你的 shell 解释。
这(在读取时)不会********
像任何其他密码一样显示,而是显示为*
,这仅表示“没有密码”。