Главная / Блог / Управление доступом к общему Mac в команде: изоляция
ENGINEERING_BLOG · 2026.08.14

Управление доступом к общему Mac в команде: изоляция

Если несколько сотрудников входят на Mac под одним администратором, вы не можете надёжно доказать, кто выполнил действие, быстро отозвать доступ одного человека или отделить ключи подписи от рабочей среды.

Самое быстрое решение — запретить общий администраторский аккаунт: создать отдельные стандартные аккаунты, выделить отдельную учётную запись CI, оставить администрирование только контролируемым администраторам и разнести рабочие каталоги, Keychain и подписывающие ключи.

Эта статья предназначена для IT-руководителей, которые открывают одну или несколько удалённых машин разработчикам, для владельцев iOS CI/CD и для технических директоров, выбирающих между общим, проектным и выделенным Mac.

SECTION 01Граница безопасности: один человек — одна учётная запись

Почему общий пароль не является управлением доступом

Способность войти на Mac не означает, что среда пригодна для командной эксплуатации. Общий аккаунт ломает сразу несколько границ:

  • Атрибуция действий. В журналах появляется имя аккаунта, но не конкретный сотрудник.
  • Отзыв доступа. После увольнения одного пользователя приходится менять общий пароль и уведомлять всех остальных.
  • Расследование инцидента. Невозможно отделить ошибку разработчика, действие CI и работу администратора.
  • Ротация секретов. Пароль, SSH-ключи, токены и записи Keychain начинают использоваться несколькими людьми.
  • Разделение ответственности. Один и тот же аккаунт может запускать сборку, менять системные настройки и читать секреты подписи.

NIST рассматривает управление аккаунтами, идентификацию действий и принцип наименьших привилегий как отдельные элементы контроля доступа, а не как заменяемые друг другом меры. Поэтому MFA на входе в веб-консоль не компенсирует общий локальный аккаунт внутри macOS. (csrc.nist.gov)

Практическая проверка проста: если вы не можете по записи доступа ответить на вопросы «кто вошёл», «зачем ему понадобились права» и «как отключить только этого человека», модель уже не соответствует базовой корпоративной изоляции.

Объект Допустимая связь Что должно быть видно при проверке
Сотрудник Личный стандартный аккаунт Владелец, команда, статус занятости
CI/CD Отдельный сервисный аккаунт Проект, pipeline, используемые права
Администратор Именной или управляемый аккаунт Основание выдачи, срок, зона ответственности
Экстренный доступ Отдельный аварийный аккаунт Владелец процедуры, причина использования
Подписывающий ключ Проект или доверенная сборочная среда Где хранится, кто может вызвать, как отозвать

Такое отображение «аккаунт — человек — назначение» является минимальной основой для аудита. Не называйте сервисную учётную запись именем сотрудника: после смены владельца это создаёт ложную связь и усложняет расследование.

Что делать, если разработчикам нужен администратор

В обычной работе разработчику обычно нужен доступ к исходному коду, инструментам сборки, логам и рабочему каталогу, но не постоянное членство в группе администраторов. Установка системного расширения, изменение сетевой политики, управление пользователями и настройка средств защиты должны проходить через контролируемое повышение привилегий.

Разделите роли следующим образом:

  • Стандартный пользователь — интерактивная разработка, запуск тестов, чтение проектных каталогов.
  • Сервисный аккаунт CI — автоматическая сборка, тестирование и публикация артефактов.
  • Администратор — ограниченные операции управления системой и учетными записями.
  • Аварийный аккаунт — восстановление доступа, устранение блокирующей неисправности и действия при недоступности обычного канала управления.

Apple допускает создание стандартного локального аккаунта отдельно от управляемого администратора при корпоративном развёртывании macOS. Это позволяет не превращать каждого разработчика в постоянного администратора. (support.apple.com)

Для каждого запроса на повышение прав сохраняйте как минимум:

  • имя инициатора и его личный аккаунт;
  • затронутый Mac и проект;
  • конкретную операцию;
  • причину и ожидаемый результат;
  • одобрившего сотрудника;
  • время начала и окончания;
  • подтверждение результата;
  • действие по возврату или закрытию доступа.

Не выдавайте постоянные права только потому, что «иначе CI не работает». Если сборка требует администратора, сначала выясните, какая команда, каталог, системный компонент или сертификат вызывает требование. В ряде случаев проблему решает отдельная сборочная среда, а не расширение прав всей команды.

Предупреждение. «Администратор», «Secure Token», владелец тома и пользователь, способный разблокировать FileVault, — не одно и то же. Нельзя проверять эти состояния только по членству в локальной группе администраторов.

SECTION 02SSH и удалённые интерфейсы

Разные каналы — разные границы

Удалённый доступ обычно состоит из трёх независимых путей:

  1. SSH — командное обслуживание, автоматизация и неинтерактивные операции.
  2. VNC или экранный доступ — графическая работа, Xcode, профилирование и ручной запуск.
  3. Веб-консоль провайдера — управление самой услугой, перезапуск, выдача доступа и технические операции платформы.

Ошибка возникает, когда один общий пароль используется во всех трёх местах. В этом случае отключение пользователя в одном интерфейсе не гарантирует прекращение доступа в остальных.

Для SSH ограничьте список пользователей, которым разрешён Remote Login, и разделите:

  • личные ключи сотрудников;
  • ключи автоматизации;
  • аварийный ключ, хранящийся под контролем IT;
  • временные ключи для подрядчиков.

У каждого ключа должен быть владелец, назначение, дата выдачи, система хранения и процедура удаления. Не принимайте файл с названием team-mac-key без дополнительной записи: по нему невозможно определить, кто ещё имеет копию.

Для графического входа применяйте личные локальные или корпоративно управляемые аккаунты. Если VNC-сессия запускается через общий пользовательский профиль, экранная активность может быть видна другим участникам, а история действий в приложениях не будет связана с конкретным человеком.

Веб-консоль нужно проверять отдельно: личный аккаунт в ней не доказывает, что локальный macOS-пользователь также индивидуален. При приёме среды запросите список пользователей, разрешённых для Remote Login, список ключей, перечень операторов консоли и результат теста отключения одного пользователя.

Контрольный набор доказательств

Перед передачей Mac команде соберите:

  • список локальных аккаунтов с назначением;
  • список разрешённых пользователей SSH;
  • перечень активных публичных ключей;
  • владельца каждого ключа;
  • записи входа и изменений настроек;
  • список аккаунтов с административными правами;
  • результат проверки отключения одного сотрудника;
  • результат повторного входа после отзыва;
  • подтверждение, что сервисный аккаунт не используется для интерактивной разработки.

Apple документирует отдельное ограничение пользователей для Remote Login, но фактическая конфигурация зависит от версии macOS и применяемого управления устройствами. Поэтому проверяйте не только профиль настройки, но и состояние конкретного хоста. (support.apple.com)

SECTION 03Рабочие области, Keychain и подпись iOS

Разделение CI и разработчиков

CI не должен входить в систему под аккаунтом разработчика. У сервиса должны быть собственные:

  • рабочий каталог;
  • переменные окружения;
  • токены доступа к репозиториям;
  • каталоги временных артефактов;
  • журналы pipeline;
  • права на вызов средств подписи.

Для проектов с разным уровнем доверия используйте отдельные рабочие области или отдельные хосты. Общая директория с правом записи для нескольких pipeline создаёт риск подмены артефакта, чтения временных файлов и случайного использования чужой конфигурации.

Рабочая схема может выглядеть так:

Уровень Аккаунт Доступ к рабочей области Доступ к подписи Способ отзыва
Разработка Личный стандартный Только назначенный проект По необходимости, без общего приватного ключа Отключение аккаунта и токенов
CI проекта Сервисный Только каталог pipeline Через выделенный механизм подписи Остановка runner, отзыв токена
Администрирование Контролируемый администратор По заявке Не должен использоваться для постоянной подписи Закрытие временного доступа
Экстренное восстановление Аварийный аккаунт Только при инциденте По утверждённой процедуре Смена секрета после использования

Почему Keychain нельзя считать общей папкой секретов

В macOS сертификат и связанный с ним приватный ключ образуют идентификатор подписи. Apple отдельно указывает, что приватный ключ создаётся и хранится в Keychain, а сам сертификат без приватного ключа не даёт полноценной идентичности подписи. Если ключ скопирован в общий профиль, любой получивший к нему доступ потенциально может подписывать код от имени соответствующей идентичности. (developer.apple.com)

Поэтому разделяйте четыре операции:

  1. Импорт. Кто и на какой Mac переносит сертификат и приватный ключ.
  2. Вызов. Какой процесс CI может использовать идентичность подписи.
  3. Ротация. Кто создаёт новую идентичность и заменяет старую.
  4. Отзыв. Как прекращается доверие к ключу после утечки, увольнения или смены проекта.

Не храните постоянные пароли и приватные ключи в скрипте pipeline. Если ручная подпись неизбежна, ограничьте доступ к Keychain, зафиксируйте владельца ключа и проверьте, что разработчик не получает права на чтение всех секретов сборочного Mac.

Apple также описывает облачно управляемые сертификаты как отдельный вариант: приватный ключ и сертификат могут обслуживаться инфраструктурой облачной подписи, а не передаваться каждому локальному пользователю. Такой вариант стоит рассматривать, если процесс организации позволяет применять его для нужного типа сборки и публикации. (developer.apple.com)

Опыт эксплуатации. Успешная сборка не доказывает корректную изоляцию. Приёмка должна включать отрицательные тесты: разработчик не видит секрет CI, CI не может открыть личный Keychain, отключённый сотрудник не может подключиться по SSH, а старый ключ подписи не принимается после ротации.

SECTION 04FileVault и восстановление доступа

Разные полномочия, которые нельзя смешивать

При проектировании восстановления Mac зафиксируйте отдельно:

  • кто может войти в локальную систему;
  • кто является администратором;
  • кто имеет Secure Token;
  • кто является владельцем тома на Apple Silicon;
  • кто может разблокировать FileVault;
  • кто может авторизовать обновление или восстановительную операцию;
  • где хранится персональный ключ восстановления.

Apple указывает, что для разблокировки APFS-тома пользователю требуется Secure Token, а на Mac с Apple Silicon также важна роль владельца тома. При этом возможность разблокировки хранилища не означает автоматическое право выполнять все административные действия в macOS. (support.apple.com)

В 2026 году нельзя переносить старые инструкции на новую среду без проверки версии. Apple отдельно описывает возможность разблокировки FileVault по SSH после перезапуска на Mac с Apple Silicon и macOS 26 или более поздней версией, если включён Remote Login и доступна сеть. Это полезно для удалённого восстановления, но одновременно расширяет требования к контролю SSH-доступа. (support.apple.com)

Соберите процедуру восстановления так:

  1. Определите ответственного за хранение ключа восстановления.
  2. Проверьте, что ключ не лежит в общем текстовом файле на самом Mac.
  3. Укажите, кто может инициировать разблокировку.
  4. Определите канал подтверждения личности оператора.
  5. Проверьте восстановление на тестовой машине.
  6. Зафиксируйте факт использования ключа и последующую смену доступов.
  7. Проверьте, что уволенный сотрудник не остаётся владельцем Secure Token или разрешённого SSH-ключа.

Не выдавайте всем разработчикам возможность разблокировки диска ради удобства удалённого перезапуска. Если доступ к FileVault нужен только инфраструктурной команде, ограничьте его этой группой и проверяйте фактический список пользователей после изменений.

SECTION 05Отзыв доступа и выбор модели хоста

Процедура для увольнения или смены проекта

Отзыв должен охватывать не только локальный аккаунт. Проверьте полный набор идентификаторов:

  • аккаунт в веб-консоли;
  • локальный macOS-аккаунт;
  • членство в группе администраторов;
  • разрешение Remote Login;
  • публичные SSH-ключи;
  • токены репозитория;
  • профили и секреты CI;
  • записи Keychain;
  • сертификаты и приватные ключи;
  • права на Apple Developer и App Store Connect;
  • доступ к FileVault и восстановлению.

Если сотрудник увольняется, сначала заблокируйте корпоративную идентичность и веб-доступ, затем удалите локальные разрешения и ключи, после чего отзовите связанные токены и подписи. Для ключа подписи недостаточно удалить файл с Mac: если копия существовала вне хоста, нужна ротация или отзыв соответствующей идентичности.

Когда общего Mac уже недостаточно

Общая машина может быть оправдана для низкорисковой разработки, тестовой сборки или команды с одинаковым уровнем доверия. Но она перестаёт быть разумной, если выполняется хотя бы одно условие:

  • разные проекты имеют несовместимые требования к секретам;
  • несколько команд должны иметь административный доступ;
  • необходимо доказать действия конкретного оператора;
  • один pipeline не должен видеть рабочую область другого;
  • сотрудники часто меняются или работают с подрядчиками;
  • восстановление FileVault требует постоянного ручного вмешательства;
  • невозможно быстро удалить все ключи и токены одного пользователя.

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

Для первичной оценки ресурсов можно начать с условий аренды удалённого Mac, но решение принимайте не по названию тарифа, а по тому, можете ли вы документально подтвердить отдельную идентичность, отзыв пользователя и границу между проектами. Если нужен отдельный сценарий заказа, используйте страницу оформления Mac после внутренней проверки требований безопасности.

Матрица выбора

Условие команды Общий хост Хост проекта Краткосрочный выделенный хост
Одинаковый уровень доверия Подходит при личных аккаунтах Подходит Подходит
Общие подписывающие ключи Нежелательно Только с изоляцией CI Предпочтительно
Несколько независимых проектов Ограниченно Подходит Подходит
Частая смена участников Сложно обслуживать Проще отзывать по проекту Проще отзывать
Требование доказать действия человека Только при полном аудите Подходит Подходит
Нужны физические интерфейсы или особая конфигурация Проверяйте отдельно Проверяйте отдельно Проверяйте отдельно
Невозможно подтвердить изоляцию Keychain Не использовать Не использовать Пересмотреть модель

Если текущая платформа не позволяет установить личные аккаунты, ограничить SSH-пользователей, разделить CI и разработку или доказать отзыв доступа, не расширяйте общий администраторский аккаунт. Сначала уменьшите область доверия: выделите отдельный хост для проекта или переведите сборочную часть на управляемый Mac.

SECTION 06Приёмка перед передачей команде

Перед выдачей доступа выполните проверку по шагам:

  1. Составьте карту идентичностей. Для каждого аккаунта укажите человека или сервис, назначение и владельца.
  2. Удалите общий вход. Проверьте, что разработчики не используют один пароль администратора.
  3. Создайте стандартные аккаунты. Убедитесь, что ежедневная работа не требует постоянной привилегии администратора.
  4. Настройте сервисный CI-аккаунт. Запустите сборку без интерактивного входа разработчика.
  5. Ограничьте SSH. Проверьте разрешённых пользователей и принадлежность каждого ключа.
  6. Разделите каталоги. Выполните тест чтения и записи между двумя проектами.
  7. Проверьте Keychain. Убедитесь, что личная запись не доступна CI, а CI-секрет не виден стандартному пользователю.
  8. Проверьте подпись. Зафиксируйте, какой процесс использует сертификат и где хранится приватный ключ.
  9. Проверьте FileVault. Запишите пользователей, способных разблокировать том, и владельца процедуры восстановления.
  10. Проведите отзыв. Отключите тестового пользователя, удалите его SSH-ключ и подтвердите невозможность повторного входа.
  11. Проверьте аудит. Сверьте фактическое действие с ожидаемым владельцем.
  12. Зафиксируйте исключения. Если какая-либо операция требует администратора или общего секрета, назначьте срок устранения.

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

Если ваш текущий Mac предоставляет команде только общий пароль, оставляет сертификаты в пользовательском Keychain без контроля и не даёт отозвать доступ одного сотрудника без смены доступа всех остальных, это уже не «временное удобство», а постоянная зона риска. В такой ситуации аренда MACNOX с распределением ресурсов по командам или проектам может быть более управляемым вариантом, чем дальнейшее расширение общего аккаунта: вы сохраняете возможность отделить пользователей, сократить область доверия и не связывать весь CI с одной учётной записью.

Начните с матрицы «аккаунт — человек — назначение — секрет — доказательство — действие при отзыве». Если по ней невозможно однозначно определить владельца доступа, переведите наиболее чувствительный проект на выделенный удалённый Mac и только после этого возвращайтесь к оптимизации общей инфраструктуры.

SECTION 07Дополнительные материалы