Назад | Перейти на главную страницу

Конфликты с файлами конфигурации PAM при обновлении системы

У меня есть VPS с Ubuntu 14.04.4 LTS; он был установлен вместе с Plesk компанией OVH. Я просто сделал apt-get upgrade, и в какой-то момент у меня появилось сообщение по поводу PAM. Система на французском, но в основном она гласит:

По крайней мере один файл /etc/pam.d/common-{auth,account,password,session} был изменен локально. Укажите, следует ли отказаться от локальных изменений и придерживаться стандартной конфигурации. В противном случае вам придется самостоятельно настраивать систему аутентификации.

Я решил оставить локальные изменения, и APT также сообщил:

pam-auth-update: Local modifications to /etc/pam.d/common-*, not updating.
pam-auth-update: Run pam-auth-update --force to override.

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

Поскольку я не хотел изменять текущую конфигурацию PAM в системе, я в конечном итоге использовал chroot jail, чтобы установить конфигурацию PAM по умолчанию, чтобы я мог видеть различия:

# lsb_release --codename
Codename:       trusty
# debootstrap trusty /tmp/foo
I: Retrieving Release 
I: Retrieving Release.gpg 
  ...

Посмотреть различия:

for f in common-{account,auth,password,session,session-noninteractive}; do
  echo ==== $f ====
  diff --unified /etc/pam.d/$f /tmp/foo/etc/pam.d/$f
done

dpkg должен запросить и позволить вам увидеть разницу (с D) на случай, если в ваши файлы конфигурации внесены изменения:

Configuration file `/etc/bash.bashrc'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** bash.bashrc (Y/I/N/O/D/Z) [default=N] 

Обновить: из комментария ниже проблема связана с пакетами, которые не удаляют полные файлы конфигурации (именно здесь запускается указанное выше поведение), но с файлами, которые используют сценарий для создания файлов конфигурации. В Руководство по политике Debian описывает это как:

E.2 Полнофункциональная обработка конфигурации сценария сопровождающего

Для файлов, содержащих специфичную для сайта информацию, такую ​​как имя хоста, сетевые данные и т. Д., Лучше создать файл в пакете postinst сценарий.

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

При использовании этого метода следует учитывать несколько важных моментов:

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

Если вы все же пойдете по этому пути, вероятно, будет хорошей идеей сделать программу, которая генерирует файл (ы) конфигурации, отдельной программой в /usr/sbinпо соглашению называется packageconfig а затем при необходимости запустите это из сценария после установки. В packageconfig Программа не должна безоговорочно перезаписывать существующую конфигурацию - если ее режим работы ориентирован на настройку пакета в первый раз (а не на любую произвольную реконфигурацию позже), вы должны проверить, существует ли конфигурация, и потребовать --force флаг, чтобы перезаписать его.

Это означает, что вам нужно полагаться на packageconfig программа, для PAM /usr/sbin/pam-auth-update, чтобы обеспечить возможность пробного прогона или предварительного просмотра.

И насколько я могу судить /usr/sbin/pam-auth-update не предлагает такой функции.

Вы можете сделать копию всего каталога, а затем запустить diff для каждого файла, чтобы проверить различия.

cp -r /etc/pam.d/ /home/<user>/
pam-auth-update --force
diff /etc/pam.d/ /home/<user>/pam.d

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

Просто у меня была эта проблема. В конце концов, я позволил pam-auth-update --force измените файлы - затем заметил, что он также сохранил копию старых файлов (например, как /etc/pam.d/common-foo.pam.old). Затем нижеследующий однострочный текст показал мне различия:

for old in *.pam-old; do new="${old:0:-8}"; echo "=== $new ==="; diff $old $new; done

Это:

  1. Перебирает резервные копии;
  2. Удаляет последние 8 символов, чтобы получить имя нового файла;
  3. Отображает имя файла (чтобы мы могли видеть который содержит каждое изменение); и
  4. Различает старые и новые файлы