Konflikte mit PAM-Konfigurationsdateien beim Upgrade des Systems

7

Ich habe einen VPS, auf dem Ubuntu 14.04.4 LTS ausgeführt wird. Es wurde als Ganzes mit Plesk von OVH installiert. Ich habe eine gemacht apt-get upgrade, und irgendwann hatte ich eine Nachricht bezüglich PAM. Das System ist auf Französisch, aber im Grunde heißt es:

Mindestens eine Datei von /etc/pam.d/common-{auth,account,password,session} wurde lokal geändert. Bitte geben Sie an, ob lokale Änderungen verworfen werden sollen, und halten Sie sich an die Standardkonfiguration. Andernfalls müssen Sie das Authentifizierungssystem selbst konfigurieren.

Ich beschloss, die lokalen Änderungen beizubehalten, und APT berichtete auch:

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

Ich möchte wissen, was die Unterschiede zwischen den lokalen Änderungen und den Dateien sind, die das Update einrichten möchte. Wie kann ich das machen?

piwi
quelle
2
Wenn ich mir die beiden Versuche ansehe, die Frage und ein bisschen Dokumentation zu beantworten, kann ich mir vorstellen, wo das Problem liegt. Ich werde dies eher als Kommentar als als Antwort hinterlassen, da ich noch nicht sicher bin, ob es richtig ist. Ich denke, wer auch immer das Bild erstellt hat, hat eine Datei bearbeitet, /etc/pam.dohne die Warnung oben in der Datei zu bemerken. Stattdessen sollte eine Datei hinzugefügt und /usr/share/pam-configsanschließend ausgeführt werden pam-auth-update, um Dateien in zu generieren /etc/pam.d.
Kasperd

Antworten:

4

Da ich die Live-Konfiguration von PAM auf dem System nicht ändern wollte, habe ich ein chrootGefängnis verwendet, um eine Standard-PAM-Konfiguration einzurichten, damit ich die Unterschiede anzeigen kann:

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

Unterschiede anzeigen:

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
piwi
quelle
2

dpkg sollte Sie auffordern und Ihnen erlauben, einen Unterschied (mit D) zu sehen, falls Änderungen an Ihren Konfigurationsdateien vorgenommen werden:

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] 

Update: Aus dem Kommentar unten geht hervor, dass das Problem bei Paketen liegt, bei denen keine vollständigen Konfigurationsdateien abgelegt werden (wo das obige Verhalten ausgelöst wird), sondern bei Dateien, die einen Skriptansatz zum Generieren von Konfigurationsdateien verwenden. Das Debian-Richtlinienhandbuch beschreibt dies wie folgt :

E.2 Vollständige Handhabung der Konfiguration des Betreuerskripts

Für Dateien, die standortspezifische Informationen wie den Hostnamen, Netzwerkdetails usw. enthalten, ist es besser , die Datei im postinstSkript des Pakets zu erstellen .

Dies beinhaltet normalerweise das Untersuchen des Zustands des restlichen Systems, um Werte und andere Informationen zu bestimmen, und kann das Auffordern des Benutzers zur Eingabe einiger Informationen beinhalten, die auf andere Weise nicht erhalten werden können.

Bei der Verwendung dieser Methode sind einige wichtige Punkte zu beachten:

Wenn Sie einen Fehler im Programm entdecken, der die Konfigurationsdatei generiert, oder wenn sich das Format der Datei von einer Version zur nächsten ändert, müssen Sie dies arrangieren postinst Skript etwas Sinnvolles tut - normalerweise bedeutet dies das Bearbeiten der installierten Konfiguration Datei, um das Problem zu beheben oder die Syntax zu ändern. Sie müssen dies sehr sorgfältig tun, da der Benutzer möglicherweise die Datei geändert hat, um möglicherweise genau das Problem zu beheben, mit dem sich Ihr Skript befasst. Sie müssen diese Situationen erkennen und korrekt behandeln.

Wenn Sie diesen Weg gehen, ist es wahrscheinlich eine gute Idee, das Programm, das die Konfigurationsdatei (en) generiert, in ein separates Programm zu verwandeln, das gemäß der /usr/sbinKonvention aufgerufen wird, packageconfigund dieses dann gegebenenfalls über das Skript nach der Installation auszuführen. Das packageconfigProgramm sollte eine vorhandene Konfiguration nicht ohne Frage überschreiben. Wenn seine Funktionsweise darauf ausgerichtet ist, ein Paket zum ersten Mal einzurichten (und nicht auf eine spätere willkürliche Neukonfiguration), sollte es überprüfen, ob die Konfiguration bereits vorhanden ist, und ein --forceFlag für erforderlich sein überschreibe es.

Das bedeutet, dass Sie sich packageconfigfür PAM auf das Programm verlassen müssen /usr/sbin/pam-auth-update, um eine Trockenlauf- oder Vorschauoption bereitzustellen.

Und soweit ich das beurteilen kann, /usr/sbin/pam-auth-updatebietet eine solche Funktion nicht an.

HBruijn
quelle
3
Ich denke du liegst falsch. Die von Ihnen erwähnte Eingabeaufforderung funktioniert für Dateien, die von apt-getoder direkt aus dem Paket installiert wurden dpkg. Die Dateien in /etc/pam.dwerden jedoch nicht auf diese Weise installiert. Stattdessen werden sie von einem Post-Installationsskript installiert. Beachten Sie den Unterschied in der Ausgabe zwischen dpkg-query -S /etc/bash.bashrcund dpkg-query -S /etc/pam.d/common-auth.
Kasperd
1

Sie können eine Kopie des gesamten Verzeichnisses erstellen und dann für jede Datei einen Unterschied ausführen, um nach Unterschieden zu suchen

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

Sobald Sie die einzelnen Diff sorgfältig durchgearbeitet haben, können Sie entscheiden, ob Sie die Änderungen beibehalten oder zu den alten zurückkehren möchten. Das Zurücksetzen ist so einfach wie das Kopieren der Dateien an ihren ursprünglichen Standort

Frederik Nielsen
quelle
1
Ich habe über diese Lösung nachgedacht, möchte aber die PAM-Konfiguration nicht ändern, bevor ich die Änderungen überprüfe. Ich suche nach einem Mittel, um die Änderungen zu überprüfen, ohne das Verhalten des Systems zu ändern.
Piwi
Ich kann Ihnen in diesem Fall folgen, aber ich kann mir anscheinend keinen anderen Weg vorstellen, dies zu tun. Ein weniger störender Weg wäre, ein Skript zu erstellen, das zuerst ein Backup erstellt, die alten überschreibt und sie an einen anderen Ort kopiert, bevor die ursprünglichen wieder an den Ort zurückgesetzt werden, an dem sie sein sollten. Dieser Vorgang sollte die Zeitspanne begrenzen, in der die PAM-Konfiguration geändert wird.
Frederik Nielsen
Die Sache ist, ich nehme pam-auth-updatean, muss seine neue Konfiguration von irgendwoher bekommen; wo ist es?
Piwi
1
@piwi Wenn Sie eingeben, werden Sie feststellen man pam-auth-update, dass die neue Konfiguration von erhalten wird /usr/share/pam-configs/.
Kasperd
1
@piwi Diesen Teil kenne ich auch nicht. Eine Antwort, die erklärt, dass dies eine bessere Chance hätte, das Kopfgeld zu erhalten. Es wäre auch sehr praktisch, wenn es eine Möglichkeit gäbe pam-auth-update, die Ausgabe in ein anderes Verzeichnis zu schreiben. Das könnte sogar als nicht privilegierter Benutzer verwendet werden.
Kasperd
0

Ich hatte gerade dieses Problem. Am Ende ließ ich pam-auth-update --forcedie Dateien ändern - dann bemerkte ich, dass es auch eine Kopie der alten Dateien gespeichert hatte (zB als /etc/pam.d/common-foo.pam.old). Der folgende Einzeiler zeigte mir dann die Unterschiede:

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

Es:

  1. Schleifen durch Sicherungskopien;
  2. Entfernt die letzten 8 Zeichen, um den Namen der neuen Datei zu erhalten.
  3. Echos den Dateinamen (damit wir sehen können, welcher jede Änderung enthält); und
  4. Diffs die alten und neuen Dateien
Steve Almond
quelle