#macos #authentication #plugins #authorization
#macos #аутентификация #Плагины #авторизация
Вопрос:
Я пытаюсь отредактировать правила в auth.db, чтобы заставить плагин авторизации вызываться всякий раз, когда будет появляться окно входа в систему:
- После перезагрузки Mac
- После ручного выхода из системы
- При выходе из спящего режима
- После экранной заставки
Обоснование этого заключается в том, чтобы включить разблокировку / вход без того, чтобы пользователь вводил свой логин / пароль вручную.
Изменив правило system.login.console, я получил плагин авторизации, вызываемый для событий 1) и 2), но не для событий 3) и 4). Для 3) и 4) я попытался отредактировать правило system.login.screensaver несколькими способами, например:
<dict>
<key>class</key>
<string>user</string>
<key>mechanisms</key>
<array>
<string>NullAuthPlugin:invoke,privileged</string>
<string>builtin:authenticate</string>
<string>authinternal</string>
</array>
<key>group</key>
<string>admin</string>
<key>session-owner</key>
<true/>
<key>shared</key>
<false/>
<key>allow-root</key>
<false/>
</dict>
Плагин вызывается 3) при пробуждении после сна, но не вызывается при событии 4) после экранной заставки.
Как я могу заставить плагин авторизации запускаться после экранной заставки?
Комментарии:
1. Можете ли вы описать, как вы редактировали правило system.login.screensaver?
Ответ №1:
Я тоже некоторое время боролся с этим (кстати, ваш вопрос мне очень помог, спасибо за это!)
Вот что сработало у меня:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>allow-root</key>
<false/>
<key>authenticate-user</key>
<true/>
<key>class</key>
<string>user</string>
<key>created</key>
<real>426709293.721896</real>
<key>group</key>
<string>admin</string>
<key>mechanisms</key>
<array>
<string>NameAndPassword:invoke</string>
<string>builtin:policy-banner</string>
<string>builtin:authenticate,privileged</string>
<string>builtin:auto-login,privileged</string>
<string>builtin:forward-login,privileged</string>
<string>PKINITMechanism:auth,privileged</string>
</array>
<key>modified</key>
<real>427141220.594918</real>
<key>session-owner</key>
<true/>
<key>shared</key>
<false/>
<key>timeout</key>
<integer>2147483647</integer>
<key>tries</key>
<integer>10000</integer>
<key>version</key>
<integer>0</integer>
</dict>
</plist>
ПРИМЕЧАНИЕ:
Я использовал имя и пароль Apple example, а не NullAuth, поэтому, если вы используете это с вашим NullAuth из вопроса, вам нужно будет это изменить.
Очевидно, что ваши временные метки и прочее также будут другими. У меня сработало со всеми 4 случаями, которые вы перечислили.
Я не уверен, были ли необходимы все эти механизмы, поэтому я, вероятно, исправлю это в будущем, но пока это работает.
Комментарии:
1. Большое вам спасибо за ваш ответ! Я думал, никто не собирается отвечать… Но как вам удалось разрешить пользователю не вводить пароль и вводить вручную с помощью плагина NameAndPassword?
2. Я немного изменил код. Пароль должен откуда-то взяться, эта часть действительно зависит от реализации. Что касается меня, я просто жестко запрограммировал свое имя пользователя / пароль, потому что целью моего прототипа было обеспечить возможность создания пользовательского интерфейса для ввода паролей для Mac. Вы можете попробовать получить доступ к локальной базе данных с информацией или даже попытаться разблокировать с помощью учетных данных, хранящихся на сервере, просто пара идей, которые приходят мне в голову. Очевидно, что здесь много проблем с безопасностью, и с ними нужно быть осторожным.
3. Я думал о возможности аутентификации пользователя без пароля (например, с помощью сканера отпечатков пальцев, например). Возможно, мне также придется хранить пароли в этом случае…
4. Имя и пароль работали для меня с правилом system.login.screensaver, которое вы опубликовали. Вы уверены, что не изменили другие правила в базе данных авторизации при экспериментировании с плагинами? Я получал неожиданные эффекты при настройке правил аутентификации и аутентификации владельца сеанса или администратора.
5. @fjlksahfob, я рекомендую вам удалить
builtin:policy-banner
изsystem.login.screensaver
множества механизмов. В ходе моего тестирования я создал баннер политики , который успешно отображается при входе в OS X. Однако приsystem.login.screensaver
вызовеbuiltin:policy-banner
создаваемое им окно становится невидимым; опытные пользователи могут нажать клавишу return, чтобы закрыть его, но другие просто видят Mac, который застрял, отображая черный экран.