Безопасность 13 апреля 2026

2026 облачный Mac: принудительные SSH-команды для подрядчиков и проверяемые шаблоны authorized_keys на арендованном Apple Silicon

Команда безопасности MacLogin 13 апреля 2026 ~13 мин

Когда подрядчики и сотрудники делят один арендованный Mac mini на Apple Silicon, файл ~/.ssh/authorized_keys быстро превращается в «каждый публичный ключ = полный shell». Вывод 2026: для каждого ключа добавляйте command=, restrict и явное no-port-forwarding, проверяйте сценариями с негативными тестами и логируйте принятие отпечатка вместе с ID аренды в CMDB. Ниже — матрица «обёртка против git-shell», пятибалльная таблица возможностей, семь шагов для регионов MacLogin (Гонконг, Токио, Сеул, Сингапур, США) и FAQ для пакетов SOC2.

Перед добавлением ключей пройдите чеклист доверия к хосту при первом SSH, а если нужны интерактивные shell, читайте управление общими сессиями. Базовые инструкции — в справке, сравнение узлов — на странице цен, VNC — только для диалогов согласия macOS.

Облачные Mac чаще переустанавливаются, чем офисные рабочие станции: ежемесячный diff authorized_keys резко снижает число сбоев из‑за кавычки. Разделяйте строфы по организации подрядчика, чтобы сузить радиус отзыва ключа.

Кому нужны принудительные команды на арендованном облачном Mac

Не только анонимным CI-ботам. Если закупки не успевают выдать «один лиз на подрядчика» до конца квартала, принудительная команда — самый дешёвый компенсирующий контроль.

  • Регулируемые SaaS, которым нужно доказать, что read-only Git не превращается в сканирование VPC.
  • Мобильные релизы с временной загрузкой без sudo-shell.
  • Команды AI-автоматизации, где deploy-ключ должен запускать ровно один оркестратор.
  • MSP с десятками лизингов MacLogin и комментариями к тикетам.

Сигналы, что обычный shell слишком широк

  1. Один и тот же ключ в более чем трёх группах хостов без даты ротации.
  2. Следы ssh -R у учётных записей, которые должны быть только для чтения.
  3. Пентест цепляет локальный форвардинг к внутренним admin API при отключённом пароле.
  4. Опросники комплаенса требуют allow-list команд, а ответ остаётся на уровне «мы используем SSH-ключи».
Предупреждение: ошибка в кавычках command="..." полностью ломает ключ. Редактируйте через sudo -e, версионируйте, тестируйте одноразовым ключом.

Матрица: обёртка против подсистемы

СценарийПредпочтениеПочему проходит аудитРиски облака
Только чтение Git у вендораgit-shell как принудительная командаФорма argv задокументированаПути репозиториев вне домашнего каталога, если политика требует
Один артефакт CIМаленькая обёртка с белым списком argvПростой git diffЗакрепите интерпретатор
Аварийный админ на 48 часовОтдельный ключ с датой в комментарииЯсная временная границаНе переиспользуйте материал ключа после срока
Телеметрия через бастионМинимальный приёмник + сеть режет латеральМинимальная поверхностьСочетайте с политикой TCP forwarding на sshd

Какие опции комбинировать

НаборПорт‑форвардингPTYСтиль scpAgent forwardingОстаточный риск
только restrictобычно блокируетсячасто блокируетсянужен явный путьблокируетсянизкий (проверьте версию)
command= + ручные опциизависит от no-port-forwardingнастраиваетсянужна обёрткадобавьте no-agent-forwardingсредний (ошибки редактирования)
без ограниченийчасто разрешёнразрешёнразрешёнчасто разрешёнвысокий
Метрики: снимите ssh -G на ноутбуке подрядчика, считайте уникальные IP за 24 часа (для человека обычно < 5), медиану длительности интерактивных сессий (> 45 минут — разбор).

Семь шагов для продакшена

  1. Инвентаризация: экспорт с комментариями; без владельца, срока и тикета — отклонять.
  2. Классификация: человек, машина только чтение, аварийный доступ.
  3. Черновик: машинные ключи с restrict,command="/usr/local/bin/ci-git-bridge.sh".
  4. Синтаксис: sshd -T (если можно) и тестовый пользователь.
  5. Негативные тесты: RequestTTY, запрещённый scp, -R — всё должно жёстко падать.
  6. Канареечный период: одна региональная площадка 72 часа.
  7. Доказательства: diff, транскрипты, выдержки из единого журнала.

git-shell или своя обёртка

Если нужен только Git, git-shell самый быстрый путь. Как только появляются defaults, API Xcode или несколько ACL, переходите на подписанную обёртку с JSON-логами argv, IP и имени лиза.

Советы по логам

Файл 0600 или logger; добавляйте код региона HK/JP/KR/SG/US.

Поля аудита, которые реально запрашивают

АртефактМинимум храненияВладелецЗаметки
diff authorized_keys365 днейПлатформаСсылка на тикет SSH-FRC-2026
Негативные тесты180 днейAppSecПокажите заблокированные форварды
Журналы AcceptedPublicKey90 днейSOCСопоставление с обновлением списка подрядчиков

FAQ

Заменяет ли Match User опции per-key? Грубо; смешанный CI и люди на одном UNIX-аккаунте требуют per-key.

FIDO2-ключи? Аппаратная аутентификация не снимает фильтрацию команд.

VS Code Remote SSH? Ожидается форвардинг и часто PTY — отдельный класс ключей.

Почему Mac mini M4 подходит для экспериментов

Стек OpenSSH + launchd совпадает с настольными Mac, поэтому проверки в Токио совпадают со скриншотами аудита из Сингапура. Память M4 тянет git pack и лёгкие валидаторы Python. Арендуйте по регионам MacLogin и используйте VNC для TCC без расширения прав shell.

При росте нагрузки разделяйте среды через цены, сохраняя один текстовый runbook.

Изолированный лиз для проверки ключей

Проверьте принудительные команды в продоподобном регионе до правок общего authorized_keys.