web-dev-qa-db-ja.com

システムのアップグレード時にPAM構成ファイルと競合する

Ubuntu 14.04.4 LTSを実行するVPSがあります。 OVHによってPleskとともに全体としてインストールされました。私はapt-get upgradeをやったし、ある時点でPAMに関するメッセージが届いた。システムはフランス語ですが、基本的には次のように書かれています。

/etc/pam.d/common-{auth,account,password,session}の少なくとも1つのファイルがローカルで変更されました。ローカルの変更を破棄する必要があるかどうかを示し、標準の設定を使用してください。それ以外の場合は、認証システムを自分で構成する必要があります。

私はローカルの変更を保持することを決定し、APTも報告しました:

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

ローカルでの変更と、更新によってセットアップされるファイルの違いを知りたい。どうやってやるの?

7
piwi

システム上の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
4
piwi

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スクリプトにファイルを作成するにはを使用することをお勧めします。

これには通常、システムの残りの状態を調べて値やその他の情報を確認する必要があり、他の方法では取得できない情報をユーザーに要求する必要がある場合があります。

この方法を使用する場合、考慮すべきいくつかの重要な問題があります。

構成ファイルを生成するプログラムのバグを発見した場合、またはファイルの形式が1つのバージョンから次のバージョンに変更された場合、postinstスクリプトが適切な処理を行うように調整する必要があります-通常これはインストールされた構成ファイルを編集して問題を削除するか、構文を変更することを意味します。ユーザーがファイルを変更した可能性があるため、これは非常に慎重に行う必要があります。おそらく、スクリプトが処理しようとしている問題そのものを修正するためです。これらの状況を検出して正しく処理する必要があります。

このルートをたどる場合は、設定ファイルを生成するプログラムを、慣習的にpackageconfigと呼ばれる/usr/sbinの別のプログラムにすることをお勧めします。そして、必要に応じて、インストール後スクリプトからそれを実行します。 packageconfigプログラムは、疑いもなく既存の構成を上書きするべきではありません-その動作モードが(後で任意の再構成ではなく)初めてパッケージをセットアップすることに向けられている場合は、設定がすでに存在するかどうかをチェックし、それを上書きするには--forceフラグが必要です。

つまり、PAM /usr/sbin/pam-auth-updateの-​​packageconfigプログラムに依存して、予行演習またはプレビューオプションを提供する必要があります。

そして、私が知る限り、/usr/sbin/pam-auth-updateはそのような機能を提供していません。

2
HBruijn

ディレクトリ全体のコピーを作成し、各ファイルでdiffを実行して違いを確認することができます

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

各diffを注意深く確認したら、変更を保持するか、古い変更に戻すかを決定できます。元に戻すのは、ファイルを元の場所にコピーするのと同じくらい簡単です。

1

私はこの問題を抱えていました。最後に、私は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. 古いファイルと新しいファイルを比較します
0
Steve Almond