Wie kann man auf einem Debian-System nach geänderten Konfigurationsdateien suchen?

62

Wie finde ich alle von Debian verwalteten Konfigurationsdateien, die vom Standard geändert wurden?

malclocke
quelle
1
Die Frage geht hier. Die Antwort geht weiter unten.
Dennis Williamson
Ich habe die von Ihnen angegebene Antwort in Ihre Antwort verschoben.
Zoredache

Antworten:

78

Um alle von Debian verwalteten Konfigurationsdateien zu finden, die vom Standard geändert wurden, können Sie einen Befehl wie diesen verwenden.

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}'

Bearbeiten (funktioniert mit lokalisierten Systemen):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}' | sort | less

Bearbeiten (funktioniert mit Paketen mit OK im Dateinamen):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK$/{print $1}' | sort | less
malclocke
quelle
Funktioniert wie ein Zauber auf Ubuntu 10.4, ich würde dich tausendmal verbessern :-)
Ludwig Weinzierl
funktioniert super. Sie könnten jedoch verwenden md5sum --quiet, um das Filtern von OK-Dateien zu vermeiden awk(und damit die Lokalisierungsprobleme?). Übrigens: Sie wissen nicht, wie Sie nicht verfolgte Dateien in / etc einfügen sollen? Wie zum Beispiel die in / etc / apache2 / sites-available?
sfussenegger
Es wäre interessant zu wissen, wie meine answer ( debsums -ec) tatsächlich funktioniert, da sie anscheinend viel weniger Ergebnisse liefert.
Naught101
Außerdem werden anscheinend nur die Conf-Dateien auf Paketversionen überprüft, die dann eingehen debsums -ec: Wenn ich diese Methode verwende, um Paketversionen erneut zu installieren , werden einige der über diese Methode aufgelisteten Dateien nicht geändert.
Naught101
Als zusätzliche Überprüfung , welche Konfigurationsänderungen ausstehen oder veraltet sein könntenfind /etc -type f \( -iname '*.ucf-dist' -o -iname '*.ucf-old' -o -iname '*.dpkg-old' -o -iname '*.dpkg-dist' \) -print | sort
sphakka
47

von man debsums:

  debsums -ce
          List changed configuration files.
naught101
quelle
1
Dies ist mit Abstand die einfachste und beste Antwort.
mfisch
1
Nur debsums ist nicht standardmäßig installiert, und Sie möchten es möglicherweise nicht installieren.
Alexis Wilke
1
@ AlexisWilke: Es ist 218kb und hat minimale Abhängigkeiten ...
naught101
11

Tut mir leid, Necro, aber während die Antwort von @ naught101 für geänderte Dateien richtig war , half es nicht für hinzugefügte Dateien. @ Graemes Lösung ist nett, hängt aber vom Etckeeper ab; Ich möchte das Dateisystem nicht ändern.

find /etc -type f | grep -vFf <(debsums -e -r /etc | sed 's/[[:space:]]*OK$//')

Suchen Sie nach Dateien in / etc /, debsumsdie nicht als gültig gemeldet werden. Dies bedeutet entweder nicht verfolgte Dateien oder Dateien, die nicht "OK" sind (Hashes stimmen nicht überein).

Explosion_Hartkäse
quelle
Man sollte auch debsums --list-missingprüfen, ob in einem oder mehreren Paketen die Prüfsummen der enthaltenen Dateien fehlen. Heutzutage sollte die Ausgabe leer sein.
Mikko Rantalainen
6

Oder debsums -e | grep FAILED zeigt auch alle fehlenden Conffiles an

(aus dem debsums-paket)

Wookey
quelle
2

Das mag übertrieben sein, aber da jemand etckeeper erwähnt hat und ich nachforschte, dass ich auf dieses andere Juwel gestoßen bin, ist es möglicherweise nützlicher, wenn Sie versuchen, Dinge "nachträglich" herauszufinden.

http://devstructure.com/blueprint/

Blueprint ist ein einfaches Konfigurationsmanagement-Tool, mit dem Server zurückentwickelt werden. Es stellt fest, was Sie manuell getan haben, speichert es lokal in einem Git-Repository, generiert Code, mit dem Sie Ihre Bemühungen neu erstellen können, und unterstützt Sie bei der Bereitstellung dieser Änderungen in der Produktion.

dragon788
quelle
Nicht klar von ihrer Homepage (sieht ein bisschen veraltet aus), ob Python-3 unterstützt wird. Hat es jemand versucht?
Sphakka
Dem GitHub-Repo nach zu urteilen, das vor einigen Jahren zuletzt aktiv war, würde ich nicht zu viel Geld darauf setzen, wenn ich in Python3 ohne weiteres arbeite, aber es scheint ziemlich gut geschrieben zu sein Unterstützung.
dragon788
1

Dies weicht ein wenig von der ursprünglichen Frage ab, da ADDED-Konfigurationsdateien im Gegensatz zu nur den geänderten Dateien angezeigt werden. Obwohl Dateien, die in keinem Deb-Paket enthalten sind, auch abgefangen werden. Beide Verhaltensweisen können durchaus wünschenswert sein.

Dies hängt davon ab, dass Sie etckeeper im Idealfall von Anfang an mit git vcs verwendet haben. Dies sollte jedoch auch funktionieren, wenn Sie zuvor geänderte Dateien nach dem ersten Commit hinzufügen und festschreiben . Beachten Sie, dass Ubuntu etckeeper so konfiguriert, dass es standardmäßig Bazaar verwendet (Canonical Sponsor Bazaar), und nicht den von den etckeeper-Entwicklern festgelegten Git-Standard.

Die Idee ist, eine Liste aller Commits zu erhalten, die nach und nach nicht automatisch ausgeführt werden. Listen Sie dann die Dateien auf, die mit Ausnahme des ersten Commits geändert wurden:

filter_sed="/committing changes in \/etc after apt run\$/d"

etckeeper vcs log --oneline |
  sed "$filter_sed; \$d; s/ .*//" |
  xargs etckeeper vcs show --name-only --format=format: |
  sort |
  uniq |
  sed "/^\$/d"

Die Filterzeichenfolge kann auch erweitert werden, um andere Festschreibungen einzuschließen, wenn sie konsistent benannt sind. Könnte für Installationen direkt aus einer Deb-Datei oder aus dem Quellcode gut sein.

Eine bemerkenswerte Datei, die dies für mich aufnimmt, ist meine xorg.conf- Sie müssen sie derzeit selbst zu / etc / X11 hinzufügen, wenn Sie sie benötigen. Auch meine default/grubÄnderungen wurden übernommen, anscheinend wurde dies von einem Post-Installationsskript aus / usr / share kopiert, anstatt als Teil eines Pakets aufgelistet zu werden. Wenn an einer Datei wie dieser eine Änderung vorgenommen wurde, wird sie von dpkg-bezogenen Methoden nicht angezeigt.

Graeme
quelle
1
Zu Ihrer Information: Es gibt git logjetzt eine --invert-grepOption, mit der Sie uninteressante Commits herausfiltern können, ohne die Verwendung von sed.
Neil Mayhew