Удалить пароль пользователя на OSX

5

Как бы мне ни хотелось выяснить проблему, на данный момент слишком много времени было потрачено на удаление глупого ключа, когда у меня уже было решение (создание командной строки), которое работает. Я собираюсь удалить пользователя и запустить нужные мне команды. Было бы замечательно получить ответ, но я не думаю, что это произойдет.

У меня есть сеть рабов, подключенных к BuildBot , каждый с учетной записью пользователя buildbot. Я хотел бы, чтобы их учетные записи не имели паролей (читай: не пустой пароль). Я сделал это успешно на одном из блоков, как большое следствие удаленного создания пользователя и не установки пароля в процедуре.

Две другие машины OSX, которые я настроил через GUI, имеют пароли, и мне интересно, есть ли способ удалить пароль, не оставляя его пустым. Я просмотрел немного документации для 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

РЕДАКТИРОВАТЬ : На машинах, у которых уже есть учетные записи с паролями, созданными с помощью системных настроек, команды, предложенные Дэном Блэком, фактически не удаляют ключ пароля,

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 может переключать пользователей при запросе пароля.

Вот полный вывод пары ключ-значение для пользователя, у которого возникли проблемы с --created через sys-предпочтения. Чтобы прояснить несоответствие, эта машина использует пользователя '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
nlucaroni
источник
Я в замешательстве: вы хотите, чтобы у них не было пароля, но не было пустого пароля?
Canadian Luke
да уж. Я думаю, что то же самое может иметь пустой пароль и блокировку учетной записи? (оглядываясь по сторонам, unix.stackexchange.com/questions/7283/... ). Было бы это правильно?
nlucaroni
Это выглядит правильно, но я не совсем понял ваш вопрос, основываясь только на одной формулировке. Я бы порекомендовал отредактировать его, чтобы сказать так, и если это ответ, вставьте то, что было сказано, и укажите в качестве ответа
Canadian Luke
Нет, это не подходит для OSX; passwd -l для местоположения не блокировки. Я отредактировал вопрос соответственно. Нужны ли дополнительные разъяснения? Я думал, что я был довольно точным.
nlucaroni
Мое замешательство пришло от твоего второго посланника, вот и все. И часть OSX привлекла меня, но я не использую dscl для создания пользователей, я использую часть GUI
Canadian Luke

Ответы:

2

Я думаю, что проблема с ответом @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;"
Gordon Davisson
источник
Отключение учетной записи функционально эквивалентно блокировке?
nlucaroni
В основном; Есть, вероятно, некоторые тонкие различия. Обратите внимание, что параметр «disabled» находится в атрибуте AuthenticationAuthority, поэтому обычно он отключает только аутентификацию, а не другие функции учетной записи. Я не знаю достаточно о buildbot, чтобы знать, что это будет мешать ему.
Gordon Davisson
2

Вам нужно установить пароль на один * символ (звездочка, звезда) с помощью dscl,

sudo dscl . -create /Users/buildbot Password '*'

Обязательно экранируйте или цитируйте (как показано) это, чтобы оно не интерпретировалось вашей оболочкой.

Это (при прочтении) не будет отображаться как ******** как любой другой пароль, но как *, что просто означает «нет пароля».

Daniel Beck
источник
Это, вероятно, происходит от использования * в passwd файлы, которые содержат только хэши паролей, чтобы указать, что у пользователя нет пароля.
Daniel Beck
Это не обновило пароль; после выполнения команды я все еще могу использовать старый пароль. Возможно ли, что это должно быть -change вместо -create?
nlucaroni
1
@nlucaroni ли ты -delete /Users/buildbot Password перед выполнением этой строки? Моей исходной отправной точкой был код в вашем вопросе, в котором не упоминалось создание пароля.
Daniel Beck
Нет, я ничего не удалял; Я думал, что вы имели в виду мои ранее сделанные отчеты. Должен ли я сделать это для вновь созданной учетной записи через командную строку? Похоже, что я делаю то, что хочу, вообще не устанавливая этот ключ.
nlucaroni
@nlucaroni Теперь я понимаю, что ты имеешь в виду. Это сложно с несколькими вопросами, объединенными в один. Бежать dscl с аргументами в моем предыдущем комментарии сначала удалите старый пароль, а затем установите новый пароль '*', -change может сработать, я сам не проверял. Что вы подразумеваете под без установки этого ключа вообще ? Какой выход dscl . -read /Users/buildbot Password?
Daniel Beck