Техническое примечание TN2108

Отладка плагина авторизации с XCode

Этот technote описывает, как можно использовать основанную на SSH функцию отладки XCode для удаленной отладки плагина авторизации. Это предназначено для разработчиков Mac OS X, разрабатывающих плагин авторизации.

Введение
Начало работы
Совместное использование источника
Включите основанный на ключе SSH для корня
Конфигурирование XCode и отладки
Пена, промывка, повторяется
Восстановление Вашей системы
Дополнительные материалы для чтения
История версии документа

Введение

Средство плагина авторизации позволяет Вам выполнять код во время процесса входа в систему. Вы не можете использовать стандартные методы XCode для отладки плагина авторизации, потому что нет никакого способа выполнить XCode в то время, когда работает плагин. Этот technote описывает, как можно использовать основанную на SSH функцию отладки XCode для удаленной отладки плагина авторизации. Установка является скорее сложной (требуется два компьютера, настраивая вход в систему SSH для корня и совместно используемый каталог сборки), но это хорошо стоит усилия при выполнении большой работы с плагинами авторизации.

Как только Вы сделаны, отладив, необходимо восстановить компьютеры к их состоянию по умолчанию путем следования инструкциям в Восстановлении Системы.

Начало работы

Для запуска необходимо будет реализовать некоторую базовую конфигурацию компьютеров.

  1. Запустите с двух машин, машины разработки (который выполняет XCode), и целевая машина (который выполняет Ваш плагин авторизации).

  2. В панели Sharing Установок системы назовите машину разработки «Разработкой» и целевой машиной «Target».

  3. Установите инструменты разработчика XCode на обеих машинах.

Совместное использование источника

Для отладки для работы должным образом обеим машинам будет нужен доступ к исходному коду с точно тем же путем.

  1. На машине разработки, помещенной Ваш исходный код на объем кроме корневого объема (если у Вас нет другого объема удобным, можно использовать образ диска). Переименуйте объем к «Источнику».

  2. На разработке машина гарантирует, что Гостевая Учетная запись включена для совместного использования доступа («Позволяют гостям соединяться с совместно используемыми папками» в панели Accounts Установок системы).

  3. На машине разработки, в панели Sharing Установок системы, включают Совместный доступ к файлам по AFP.

  4. В той же панели перетащите «Исходный» объем в Совместно используемые папки, перечисляют и гарантируют, что у Всех есть Доступ только для чтения.

  5. На целевом Подключении использования машины к Серверу в Средстве поиска, чтобы соединиться с машиной разработки как гостевой пользователь и проверить, что можно смонтировать «Исходный» объем и видеть исходный код. Тогда размонтируйте «Исходный» объем.

  6. На целевой машине добавьте, что запись монтирования на Ваш локальный каталог хранит и обновляет утилиту автоматического монтирования, как показано в Перечислении 1.



    Перечисление 1  , Добавляющее запись монтирования

    $ # Create the mount record
    $ sudo dscl . -create /Mounts/Development.local.:\\/Source
    $ sudo dscl . -create /Mounts/Development.local.:\\/Source VFSType url
    $ sudo dscl . -create /Mounts/Development.local.:\\/Source VFSLinkDir \
    /Volumes/Source
    $ sudo dscl . -create /Mounts/Development.local.:\\/Source VFSOpts \
    url==afp://\;AUTH=NO%20USER%20AUTHENT@Development.local./Source
    $ # Refresh the automounter
    $ sudo /usr/sbin/automount -c
  7. На целевой машине подтвердите, что автомонтирование работает путем перечисления /Volumes/Source каталог, как показано в Перечислении 2. Это должно автоматически смонтировать «Исходный» объем на целевой машине. Однако, потому что объем автосмонтирован, он не обнаружится в Средстве поиска.



    Перечисление 2  , Подтверждающее автомонтирование

    $ ls -lh /Volumes/Source
    total 32
    -r--r--r--@ 1 apple  wheel   1.0K Jun 26 17:23 Desktop DB
    -r--r--r--@ 1 apple  wheel     2B Jun 26 15:55 Desktop DF
    drwxrwxrwx@ 7 apple  wheel   264B Nov 28  2007 NullAuthPlugin

Включите основанный на ключе SSH для корня

На существующих системах плагин авторизации размещается также SecurityAgent или authorizationhost. Они работают как UID 92 (_securityagent) или UID 0 (root), соответственно. Для отладки их необходимо будет выполнить GDB как корень на целевой машине. Для хранения вещей простыми мы включим корневую учетную запись и затем включим основанную на ключе аутентификацию SSH для той учетной записи.

  1. На целевой машине включите Удаленный вход в систему (SSH) в панели Sharing Установок системы.

  2. На целевой машине, выполненной Утилите Каталога и выбирают, включают пользователю root (выберите Enable Root User в меню Edit).

  3. На машине разработки генерируйте пару ключей SSH как показано Перечислением 3.



    Перечисление 3  , Генерирующее пару ключей SSH

    $ mkdir -p .ssh
    $ ssh-keygen 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/apple/.ssh/id_rsa): .ssh/id_rsa-wideopen
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in .ssh/id_rsa-wideopen.
    Your public key has been saved in .ssh/id_rsa-wideopen.pub.
    The key fingerprint is:
    90:cc:24:66:ef:bf:8e:61:4a:f3:d0:9c:0f:d4:ac:5f apple@Development.local
  4. Скопируйте открытый ключ SSH в корневой каталог пользователя root на целевой машине, как показано Перечислением 4.



    Перечисление 4  , Копирующее открытый ключ SSH в корневой каталог пользователя root

    $ scp .ssh/id_rsa-wideopen.pub root@Target.local.:
  5. На целевой машине войдите в систему как корень и установите открытый ключ SSH, как показано Перечислением 5.



    Перечисление 5  , Устанавливающее открытый ключ SSH

    # mkdir -p .ssh # cat id_rsa-wideopen.pub > .ssh/authorized_keys
  6. На машине разработки добавьте ключ SSH к своему ssh-агенту и затем подтвердите, что Вы можете SSH как корень к целевой машине, не требуя пароля (см. Перечисление 6).



    Перечисление 6  , Тестирующее установку SSH

    $ ssh-add .ssh/id_rsa-wideopen $ ssh root@Target.local. Last login: Thu Jun 26 23:58:23 2008 from Development.local #

Конфигурирование XCode и отладки

Последний шаг должен сконфигурировать XCode и отладить Вашу программу. На этом шаге мы будем использовать Пример кода 'NullAuthPlugin' для приведения конкретного примера относительно включенных шагов. Для запуска Вы, wil должны создать и установить Ваш код и затем сконфигурировать XCode.

  1. На машине разработки загрузите Пример кода 'NullAuthPlugin' и распакуйте его к корневому каталогу Вашего «Исходного» объема.

  2. Откройте проект в XCode и создайте его.

  3. На целевой машине скопируйте созданный плагин в /Library/Security/SecurityAgentPlugins/, как показано Перечислением 7.



    Перечисление 7  , Устанавливающее плагин

    $ sudo cp -R \ /Volumes/Source/NullAuthPlugin/build/Debug/NullAuthPlugin.bundle \ /Library/Security/SecurityAgentPlugins/
  4. На целевой машине измените system.login.console прямо в базе данных авторизации (в настоящее время /etc/authorization) вызвать плагин. Запустите путем создания резервного копирования базы данных авторизации, как показано Перечислением 8.



    Перечисление 8  Поддерживая базу данных авторизации

    $ sudo cp /etc/authorization /etc/authorization-orig

    Тогда отредактируйте файл (использующий Ваш любимый текстовый редактор), чтобы добавить, что механизм представляет «NullAuthPlugin:WaitForDebugger» в виде строки после строки механизма «HomeDirMechanism:status». Подтвердите свое изменение с помощью команды, показанной в Перечислении 9.



      Проверка перечисления 9 модификация базы данных авторизации

    $ grep -A 2 HomeDirMechanism /etc/authorization
                    <string>HomeDirMechanism:login,privileged</string>
                    <string>HomeDirMechanism:status</string>
                    <string>NullAuthPlugin:WaitForDebugger</string>
                    <string>MCXMechanism:login</string>
  5. На целевой машине выйдите из системы и затем зарегистрируйте, въезжают задним ходом. Вход в систему должен зависнуть как NullAuthPlugin ожидает отладчика для соединения.

  6. На машине разработки принесите NullAuthPlugin проект к передней стороне в XCode и выбирает New Custom Executable из Меню проектов. В получающемся диалоговом окне оставляют Исполнимый набор Поля имени «Исполнимой программе» и вводят «/system/library/coreservices/securityagent.app/contents/macos/securityagent» в Исполнимое Поле трактов. Тогда нажмите Finish.

  7. На вкладке Debugging окна Executable Info проверьте флажок «Debug executable remotely via SSH». Войдите «root@Target .local». в «Подключение к»: поле. И снимите флажок с флажком «Start executable after starting the debugger». Окно должно теперь быть похожим на рисунок 1.

  Окно Executable Info XCode рисунка 1

Как только все устанавливается, можно использовать следующие шаги для фактической отладки кода.

  1. В XCode выберите Debugger из меню Run, чтобы показать окно отладки, затем выбрать Console из меню Run для показа консоли.

  2. В XCode выберите Debug из меню Run. Эта консоль теперь покажет Вам состояние GDB, работающего как корень на целевой машине!

  3. В консоли присоедините к SecurityAgent как показано в Перечислении 10.



      Присоединение перечисления 10 к SecurityAgent

    (gdb) attach SecurityAgent
    Attaching to program: `/System/Library/CoreServices/SecurityAgent.app/Contents/MacOS/SecurityAgent', process 263.
    Reading symbols for shared libraries ...[…]... done
    0x920dd806 in __sigsuspend_nocancel ()
    […]
  4. В XCode можно теперь использовать окно отладки для отладки плагина авторизации, поскольку Вы были бы любой другой код.

Уф! Это был долгий путь, но я полагаю, что результат стоит усилия.

Пена, промывка, повторяется

Неизбежно Ваши усилия по отладке будут вести для кодирования изменений, и это требует, чтобы Вы переустановили свой плагин авторизации и отладили новую версию. Это удивительно просто.

  1. В XCode на машине разработки остановите отладчик.

  2. Внесите свои изменения кода и восстановите свой проект.

  3. На целевой машине переустановите плагин путем повторения команды в Перечислении 7.

  4. На целевой машине выйдите из системы и затем зарегистрируйте, въезжают задним ходом. Вход в систему должен зависнуть как NullAuthPlugin ожидает отладчика для соединения.

  5. Выполните шаги от предыдущего раздела для запуска отладчика.

Восстановление Вашей системы

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

  1. На целевой машине удалите ссылку на свой плагин авторизации от system.login.console прямо в базе данных авторизации (/etc/authorization). Можно сделать это путем восстановления базы данных от резервного копирования, которое Вы сделали ранее, как показано в Перечислении 11.



    Перечисление 11  , Восстанавливающее базу данных авторизации от Вашего резервного копирования

    $ sudo cp /etc/authorization-orig /etc/authorization
  2. На целевой машине удалите свой плагин авторизации из /Library/Security/SecurityAgentPlugins/ каталог.

  3. На целевой машине удалите открытый ключ SSH для пользователя root. Войдите в систему как корень и затем выполните команду в Перечислении 12.



    Перечисление 12  , Удаляющее открытый ключ SSH

    # rm .ssh/authorized_keys
  4. На целевой машине отключите вход в систему SSH (Удаленный вход в систему в панели Sharing Установок системы).

  5. На целевой машине отключите пользователя root (в Утилите Каталога).

  6. На целевой машине удалите запись монтирования из своего локального хранилища каталога, как показано в Перечислении 13.



    Перечисление 13  Удаляет запись монтирования

    $ # Delete the mount record $ sudo dscl . -delete /Mounts/Development.local.:\\/Source $ # Refresh the automounter $ sudo /usr/sbin/automount -c
  7. Перезапустите целевую машину.

  8. На машине разработки, выход XCode.

  9. На машине разработки удалите «Исходный» объем из списка Совместно используемых папок (в панели Sharing Установок системы).

  10. На машине разработки отключите Совместный доступ к файлам по AFP (в панели Sharing Установок системы).

  11. На машине разработки восстановите Гостевую Учетную запись к своему предпочтительному состоянию (в панели Accounts Установок системы).

  12. Перезапустите машину разработки.

  13. На каждой разработке и целевых машинах, восстановите имя компьютера к его предыдущему значению (в панели Sharing Установок системы).

Дополнительные материалы для чтения



История версии документа


ДатаПримечания
08.09.2008

Новый документ, что учебное руководство о том, как использовать XCode для отладки плагина авторизации.