Это модуль PAM для перезагрузки для аутентификации пользователя для начальной загрузки в MacOS. Это позволяет пользователям использовать модуль pam_tid (Touch ID) из TMUX.
Хотя в MacOS пользовательская программа может выжить в фоновом режиме между сеансами входа в систему, несколько сервисов (в основном связаны с графическим интерфейсом, например, к идентификатору Pathboard и Touch) строго связаны с сеансом входа в систему и как таковые недоступны для программ в фоновой сессии. Пользователи программ, таких как TMUX и Screen GNU, которые работают в фоновом режиме, чтобы выжить через сеансы входа в систему, обнаруживают, что несколько сервисов, таких как Touch ID, недоступны или не работают должным образом.
Этот модуль PAM попытается перенести текущую программу (например, sudo ) в текущий сеанс активного входа в систему, после чего оставшиеся модули PAM будут иметь доступ к службам для каждого сеанса, таких как Touch ID.
Если вы установили дополнительную программу reattach-to-session-namespace(8) , вы также можете выполнить произвольные программы из фона в сеансе входа в систему пользователя.
См. TN2083 для более подробной информации о пространствах имен начальной загрузки в MacOS.
Этот модуль должен быть вызван перед модулем, который вы хотите поместить в пространство имен начальной загрузки аутентификации пользователя. Модуль работает на этапе аутентификации и должен быть помечен как optional или required (я предлагаю использовать optional , чтобы предотвратить заблокированные в случае ошибок)
Измените целевую службу в /etc/pam.d/ (например, /etc/pam.d/sudo ), как объяснено:
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
Убедитесь, что у вас установлен модуль. Обратите внимание, что когда модуль не установлен в /usr/lib/pam или /usr/local/lib/pam (например, на Mac Mac, где Homebrew установлен в /opt/homebrew ), вы должны указать полный путь к модулю в файле сервиса PAM, как показано ниже:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
Модуль pam_tid постарается избежать подключения при подключении через SSH или другой метод удаленного входа в систему. Тем не менее, существуют ситуации (например, использование TMUX и экрана), где текущий TTY может быть порожден удаленным сеансом, но не обнаружена как таковой pam_tid . Чтобы помочь смягчить это, опция ignore_ssh можно добавить в конфигурацию pam_reattach следующим образом:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
Это обнаружит наличие любого из $SSH_CLIENT , $SSH_CONNECTION или $SSH_TTY в окружающей среде, и приведет к тому, что этот модуль станет новой.
Для получения дополнительной информации см. reattach_aqua(3) , pam_reattach(8) и reattach-to-session-namespace(8) .
Модуль доступен через Homebrew. Используйте следующую команду для установки:
$ brew install pam-reattachВы также можете установить этот модуль с MacPorts, используя следующую команду:
$ sudo port install pam-reattachВ качестве альтернативы вы можете вручную построить модуль. Модуль построен с использованием CMAKE 3. Введите следующие команды в вашу командную строку в каталоге проекта:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build buildЧтобы создать универсальный двоичный файл для использования с Apple Silicon и x86 (например, для поддержки Rosetta), используйте:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_OSX_ARCHITECTURES= " arm64;x86_64 "
$ cmake --build build Если Cmake не сможет найти libpam автоматически (например, на NIX), вам может потребоваться указать путь префикса вручную:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_PREFIX_PATH= " /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/ "
$ cmake --build buildЗатем, чтобы установить модуль, просто запустите следующую команду:
$ cmake --install build Убедитесь, что вы сохраняете сгенерированный файл install_manifest.txt в папке сборки после установки.
Запустите следующую команду в вашей командной строке, чтобы удалить установку из вашей системы:
$ xargs rm < build/install_manifest.txt Если вы потеряли install_manifest.txt , это список установленных файлов:
/usr/local/lib/libreattach.a
/usr/local/include/reattach.h
/usr/local/share/man/man3/reattach_aqua.3
/usr/local/lib/pam/pam_reattach.so
/usr/local/share/man/man8/pam_reattach.8
/usr/local/bin/reattach-to-session-namespace
/usr/local/share/man/man8/reattach-to-session-namespace.8
Кроме того, вы можете построить утилиту командной строки reattach-to-session-namespace , указав опцию -DENABLE_CLI=ON вызове Cmake. Эта команда позволяет вам приехать в пространство имен сеанса пользователя из командной строки.
См. reattach-to-session-namespace(8) для получения дополнительной информации.
Чтобы включить авторизацию Touch ID для sudo , см. Эта статья.
Код выпускается по лицензии MIT. См. License.txt.