Привилегированный помощник macOS не имеет доступа к пути файловой системы? - PullRequest
1 голос
/ 29 апреля 2019

Halp! Я пишу внутреннее приложение macOS для наших ИТ-специалистов для выполнения некоторых специфичных для организации задач, а также добавляю несколько ярлыков для простых, но общих задач, которые они выполняют. Одной из таких задач является переименование пользователя при миграции между доменами. Это приложение имеет доступ к привилегированному помощнику (через SMjobBless) для выполнения большинства задач. Однако, похоже, что этот вспомогательный инструмент, несмотря на свой привилегированный контекст выполнения, не может переименовать домашний каталог пользователя.

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

let script = """
            set -e
            mv '\(homeDirPath)' /Users/\(toUsername)
            dscl . -change /Users/\(fromUsername) NFSHomeDirectory '\(homeDirPath)' '/Users/\(toUsername)'
            dscl . -change /Users/\(fromUsername) RecordName \(fromUsername) \(toUsername)
            """

Я получаю следующий вывод на stderr (/Users/newname подтверждено, что он не существует):

mv: rename /Users/oldname to /Users/newname: Operation not permitted

Попытка выполнить это как пользователь без полномочий root приводит к другой ошибке: mv: rename /Users/oldname to /Users/newname: Permission denied

Хорошо, странно. Добавьте whoami в начало скрипта, чтобы дважды проверить пользовательский контекст: root. Ну ... интересно. Wth, я могу сделать это просто отлично с помощью sudo в моей сессии пользователя.

Затем я пытаюсь использовать FileManager, думая, что могут быть некоторые SIP-помехи или песочница для дочерних процессов launchdaemon (несмотря на то, что я не могу найти никаких документов, которые говорят это), но я все еще получаю ошибку - но более многословно на этот раз:

Error: “oldname” couldn’t be moved because you don’t have permission to access “Users”.

Я пытался найти документацию для ограничения, с которым я столкнулся, но я в растерянности. Похоже, что каталог не находится под защитой SIP, и я не могу найти никаких документов для песочницы демона за пределами магазина приложений (в родительском приложении не включена функция песочницы приложения). Кто-нибудь может указать мне правильное направление?

Обновление: Защита конфиденциальности 10.14 не влияет на нее. Добавление помощника в «Полный доступ к диску» не разрешается. Возможно, я добавляю помощника неправильно: пришлось изменить цель сборки на 10.14 (что будет проблемой), затем перетащить двоичный файл помощника из пакета приложения в список. Я не могу добавить его из /Library/PrivilegedHelperTools/ - он выделен серым цветом как опция для добавления.

Обновление 2: Исправление, похоже, связано с FDA. iTerm был в списке FDA. Удаляя его, он выбрасывает Operation not permitted, затем добавляя его обратно, разрешается. Итак, я сейчас пытаюсь понять, как правильно добавить помощника в список FDA.

1 Ответ

0 голосов
/ 30 апреля 2019

Хорошо, это подтверждено - защита конфиденциальности Mojave применяется даже к привилегированным инструментам.Решение состояло в том, чтобы сделать исполняемый двоичный файл помощником всеми, чтобы его можно было добавить в таблицу полного доступа к диску.

Надеюсь, это поможет кому-то в будущем, кто изначально озадачен увиденным.

Надеемся, что Apple добавит стандартизированный, более простой способ для пользователя, чтобы предоставить этот доступхелперы.

...