Можно ли создать пакет (pkg) для macOS, который устанавливается без ввода пароля?

Я занимаюсь экспериментами по созданию .pkg пакетов в macOS Monterey 12.7 Intel, используя как pkgbuild, так и приложение Packages. 

В процессе работы с приложением Packages, я заметил, что при создании Raw Package есть чекбокс "Require admin password for installation". Логично предположить, что если снять этот чекбокс, созданный пакет не должен запрашивать пароль администратора во время установки. 

Я попытался создать пакет, который содержит только postinstall скрипт со следующим содержимым: 
<pre><code>#!/bin/bash
echo 'Installation complete!' &gt; ~/Desktop/test.txt</code></pre> 
Также я создал пакет, который просто распаковывает файл icons.7z в директорию /Users/Shared. 

Тем не менее, итоговый .pkg-файл каждый раз запрашивает пароль во время установки. 

У меня возникли несколько вопросов:
1. Возможно ли создать .pkg файл в macOS, который не требует ввода пароля во время установки?
2. Если да, то каким образом это можно сделать?
3. Почему .pkg файл всегда запрашивает пароль, даже если он содержит всего лишь один скрипт с командой echo?
  • 7 декабря 2024 г. 19:53
Ответы на вопрос 2
Создание .pkg файла для macOS, который устанавливается без ввода пароля, в общем случае возможно, но с определенными ограничениями. Давайте разберем ваши вопросы.

### 1. Возможно ли создать .pkg файл в macOS, который не требует ввода пароля во время установки?

Да, можно создать пакет, который не требует ввода пароля, но только если устанавливаемые файлы не требуют привилегий администратора. Например, вы можете устанавливать файлы только в директорию пользователя, такую как `~/`, или в директории, не защищенные привилегиями администратора.

### 2. Если да, то каким образом это можно сделать?

Чтобы создать .pkg файл, который не требует ввода пароля, следуйте этим шагам:

1. **Использование `pkgbuild`**: 
   - Убедитесь, что вы используете правильные пути установки. Файлы должны устанавливаться в пользовательские директории (например, `~/Applications`, `~/Documents` и т. д.), а не в системные (например, `/Applications`, `/Library` и т. д.).
   
   Пример команды для создания пакета, который устанавливает файл в домашнюю директорию пользователя:
   ```bash
   pkgbuild --root /path/to/root/directory --identifier com.example.yourpackage --version 1.0 --install-location ~/ YourPackage.pkg
   ```

2. **Не указывать "Require admin password"**: 
   - Если вы используете приложение Packages, то действительно, отключите галочку "Require admin password for installation". Однако, это сработает только если установка выполняется в рамках действительных для пользователя директорий.

3. **Изменение файла установки**: 
   - Убедитесь, что ваши скрипты и файлы установки не требуют административных привилегий, как упоминалось выше. Например, избегайте операций, которые пытаются записать в системные директории или изменяют настройки системы.

### 3. Почему .pkg файл всегда запрашивает пароль, даже если он содержит всего лишь один скрипт с командой echo?

Если .pkg файл содержит какие-либо операции, которые должны выполняться с привилегиями администратора (например, запись в защищенные директории), система будет запрашивать пароль для подтверждения административных прав. Это также может происходить, если ваше `postinstall`-скрипт, даже если он не выполняет таких операций, связан с пакетом, который был неправильно настроен и попадает под требования безопасности.

Для того чтобы избежать запроса пароля:

- Убедитесь, что все файлы установлены в действительные пользовательские директории.
- Проверьте ваш скрипт на наличие команд, которые могут требовать привилегий (например, доступ к /Library или /System).
- Вы можете провести тестирование, создавая минимальные .pkg файлы, которые содержат только файлы или простые операции, не требующие привилегий. 

Таким образом, если ваш пакет корректно нацелен на пользовательские директории и не требует административных прав, он не должен запрашивать пароль при установке.
Судя по ответам на stackoverflow, потому что по умолчанию приложуха ставится в Applications, а для доступа туда нужен пароль. Но можно ставить в папку юзера, для этого что-то такое нужно указать: 

Distribution.xml: <domains enable_anywhere="false" enable_currentUserHome="true"/>
Похожие вопросы