GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Konfiguration:Verstehen von *.d-Verzeichnissen in /etc

Konfigurationsdateien, die andere Dateien enthalten, sind nicht neu. Auch das Ablegen dieser enthaltenen Dateien in Unterverzeichnissen war von Anfang an eine Option. Lassen Sie uns Anwendungsfälle durchgehen und sehen, wie Sie das Beste aus dieser Organisationsmethode herausholen können.

Einige Leute halten eine einzelne Konfigurationsdatei für den "einfachen" Ansatz und einen ganzen Baum von Dateien für komplexer. Halten Sie jedoch inne und denken Sie darüber nach, wie groß einige Konfigurationsdateien werden könnten oder wie viele verschiedene Personen oder Programme sie bearbeiten müssen. Es kann wirklich einfacher sein, jedem Unterprojekt zu erlauben, seine Konfiguration in einer eigenen Datei in einem Unterverzeichnis abzulegen. Kürzlich, wie in systemd Dokumentation werden diese Dateien manchmal als "Drop-in"-Dateien bezeichnet.

Im Laufe der Zeit und insbesondere in den letzten Jahren hat sich die Verwendung von Unterverzeichnissen in /etc ist angestiegen. Zwei wichtige Situationen treiben diese Bewegung voran:

  • Größere Programme haben komplexe Konfigurationsdateien in mehrere kleinere Dateien aufgeteilt.
  • Viele andere Programme sind von einem einzigen Dienstprogramm abhängig geworden. Jedes dieser Dienstprogramme muss einen Teil der Konfiguration verwalten.

Pro Paket auffüllen

Einige der ersten Verwendungen von *.d Verzeichnisse, auf die ich stieß, dienten der Protokollierung und Planung. Schauen wir uns das logrotate an Nützlichkeit. Die Hauptkonfigurationsdatei ist /etc/logrotate.conf . Es ist nicht sehr kompliziert, aber jede zu drehende Datei muss angegeben werden. Jede Datei kann auch unterschiedliche Konfigurationsoptionen benötigen. Anstatt diese einzelne Datei jedes Mal zu bearbeiten, wenn eine Anwendung auf dem System hinzugefügt oder aktualisiert wird, trennen wir die Konfiguration für jede Anwendung in einer bestimmten Datei.

$ grep ^include /etc/logrotate.conf 
include /etc/logrotate.d

Die Hauptkonfigurationsdatei enthält alle Dateien in einem anderen Verzeichnis. Dateien im Verzeichnis können aus verschiedenen RPM-Paketen stammen.

$ rpm -qf /etc/logrotate.d/aide
aide-0.16-12.fc31.x86_64
$rpm -qf /etc/logrotate.d/rsyslog
rsyslog-8.2002.0-1.fc31.x86_64
$ rpm -qf /etc/logrotate.d/chrony
chrony-3.5-4.fc31.x86_64

Der Eigentümer jeder Verpackung weiß, was gedreht werden muss und wie oft. Sie stellen eine spezifische Konfigurationsdatei für ihre Anwendung bereit und fügen sie zu logrotate.d hinzu Verzeichnis während der Installation. Es wird auch aus logrotate.d entfernt Verzeichnis, wenn das Paket vom System deinstalliert wird.

Andere Beispiele für diesen Anwendungsfall sind die Planung mit cron in der cron.d Verzeichnis- und Authentifizierungskonfiguration mit PAM in der pam.d Verzeichnis. Durch die Verwendung separater Dateien muss der Systemadministrator widersprüchliche Schreibvorgänge in eine einzelne Datei nicht verwalten.

Nach Funktion organisieren

Der Apache-Webserver ist ein umfangreiches Programm mit vielen Konfigurationsmöglichkeiten. Apache verwendet eine conf.d Verzeichnis für Organisation. Als ich mit Apache anfing, war es üblich, dass ein einzelner Server mehrere virtuelle Sites hostete. Jeder dieser virtuellen Hosts hatte seine eigene Konfigurationsdatei. Dieser Ansatz ermöglichte es uns, die Verwaltungsaufgaben der Dateien zu teilen sowie die Dateien während der Migration, Wiederherstellung und des Lastausgleichs auf verschiedenen Systemen zu teilen. Heute sehe ich mehr Fälle, in denen die Konfiguration nach Funktionen getrennt ist.

Ein weiterer Faktor ist, ob das Feature als separates Modul installiert ist.

$ rpm -qf /etc/httpd/conf.d/ssl.conf 
mod_ssl-2.4.43-1.fc31.x86_64

Die ssl.conf Konfiguration wird nur verfügbar gemacht, wenn mod_ssl Paket installiert ist. Andere Module können auch Dateien in conf.d ablegen Verzeichnis. Einige Anwendungen wie mod_auth_kerb Paket, stellen Sie ein Beispiel in /usr/share/doc bereit Verzeichnis. Es obliegt dem Webadministrator, die Produktionsdateien zu erstellen oder zu verwalten.

[ Benötigen Sie weitere Hilfe beim Erlernen von Linux? Kostenloser Online-Kurs:Technischer Überblick zu Red Hat Enterprise Linux. ]

Zentralisierte Verwaltung

Wie ich bei Webkonfigurationsdateien vorgeschlagen habe, besteht eine weitere Verwendung separater Konfigurationsdateien darin, die zentrale Verwaltung dieser Dateien zu vereinfachen und nur relevante Komponenten an jeden verwalteten Knoten zu verteilen.

Die modules.d Verzeichnis enthält die Konfiguration für Kernelmoduleinstellungen und die sysctl.d Verzeichnis enthält Kernel-Tuning-Einstellungen. Diese Einstellungen sind möglicherweise nur auf einigen Systemen erforderlich oder erfordern hardwarespezifische Einstellungen. Die Einstellungen können nach Hardware, Funktion oder einer Kombination organisiert werden.

Konfigurationsverwaltungsprogramme können nur die relevanten Dateien auf bestimmte verwaltete Hosts übertragen oder die Dateien basierend auf einer Vorlage auf jedem Host generieren. Wenn Sie diese Dateien mit einer Konfigurationsverwaltungslösung wie Ansible verteilen, verwenden Sie so etwas wie ansible_managed -Variable, um einen Kommentar einzufügen, der angibt, dass die Datei remote verwaltet wird.

Legen Sie einen Namen und einen Ort fest

Während dot-d-Verzeichnisse häufige Anwendungsfälle für die Unterstützung bei der Organisation und Verteilung haben, gibt es viele verschiedene Möglichkeiten, mit den Includes umzugehen. Für jede Anwendung oder jedes Dienstprogramm müssen wir bestimmen, wie wir unsere Dateien am besten benennen. Einige Konfigurationen erkennen nur Dateien mit einer bestimmten Erweiterung, wie z. B. .conf , während andere auf alle Dateien im Verzeichnis verweisen.

Der man Seiten für die Hauptkonfigurationsdatei, wie z. B. man logrotate.conf , beschreibt normalerweise die Optionen. Trotzdem suche ich zunächst nach einer Include-Anweisung in der Konfigurationsdatei.

Wenn ich nach "includes" suche, sehe ich eine Vielzahl von Methoden (zur besseren Lesbarkeit formatiert):

$ grep ^include /etc/*conf
krb5.conf :     includedir /etc/krb5.conf.d/
ld.so.conf :     include ld.so.conf.d/*.conf
logrotate.conf :  include /etc/logrotate.d
rsyslog.conf :    include(file="/etc/rsyslog.d/*.conf" mode="optional")

Die ld.so und rsyslog Konfigurationen erwarten beide, dass enthaltene Dateien mit .conf enden . Die anderen sehen so aus, als ob sie alle Dateien enthalten, aber weitere Untersuchungen zeigen möglicherweise eine Methode zum Ausschließen von Dateien. Beispiel:man logrotate.conf zeigt, dass tabooext und taboopat kann verwendet werden, um .orig herauszufiltern , .bak , .rpmnew , oder andere Dateien, die aus der Versionsverwaltung oder Updates resultieren können. Für die krb5.conf Datei gibt es sowohl ein include und includedir Richtlinie. Die Manpage gibt an, dass das includedir Direktive umfasst "alle Dateien im Verzeichnis, deren Namen ausschließlich aus alphanumerischen Zeichen, Bindestrichen oder Unterstrichen bestehen." Weiter wird darauf hingewiesen, dass Dateien, die mit einem Punkt (.) beginnen, ignoriert werden.

Eine weitere Überlegung für eingeschlossene Dateien ist die Lese- und Zusammenführungsreihenfolge. Ich habe einige gesehen, die in zufälliger Reihenfolge gelesen wurden, aber die meisten enthalten Dateien in der Reihenfolge, in der sie im Verzeichnis gefunden wurden. Wenn die Reihenfolge besonders wichtig ist, z. B. bei Modulen oder Startskripten, ist es üblich, die Dateinamen mit einer Zahl zu beginnen. Andere Benennungsstandards wie „pre“ oder „post“ sind ebenfalls üblich.

$ ls /etc/NetworkManager/dispatcher.d/
04-iscsi  20-chrony  no-wait.d  pre-down.d  pre-up.d

Einige Dienstprogramme haben möglicherweise sogar Erweiterungssymbole, die bei der Verwaltung und Verteilung zentralisierter Dateien helfen. Die sudoers Konfiguration ist ein Beispiel, bei dem ein %h steht für die Kurzform des Hostnamens.

include /etc/sudoers.d/sudoers.%h

Die obige Include-Zeile gibt die Konfigurationsdatei für den aktuellen Host an, auch wenn das Verzeichnis andere Dateien enthält. Siehe man sudoers für weitere Beispiele.

 Dateien überprüfen

Eine weitere Gefahr bei der Verwendung von Punkt-d-Verzeichnissen besteht darin, dass Sie möglicherweise Ihre Befehle zur Syntaxprüfung ändern müssen.

In einigen Fällen müssen alle Konfigurationsdateien auf einmal überprüft werden. Bei Apache beispielsweise der apachectl configtest überprüft immer die Hauptkonfigurationsdatei, die andere Dateien enthalten kann. Es verwendet Standardoptionen. Sie können httpd -t ausführen Befehl mit zusätzlichen Optionen. Beispielsweise gibt es eine Option, um alle enthaltenen Dateien aufzulisten.

$ httpd -t -D DUMP_INCLUDES
Included configuration files:
  (*) /etc/httpd/conf/httpd.conf
    (59) /etc/httpd/conf.modules.d/00-base.conf
    (59) /etc/httpd/conf.modules.d/00-dav.conf

Der httpd Befehl akzeptiert auch ein -f Option, um eine bestimmte Datei anzugeben. Diese Datei muss jedoch alle Konfigurationsprüfungen bestehen, sodass die Überprüfung einer enthaltenen Datei möglicherweise nicht die gewünschten Ergebnisse liefert. Der folgende Fehler tritt auf, wenn die standardmäßige ssl.conf überprüft wird Konfigurationsdatei, die von mod_ssl bereitgestellt wird Paket.

$ httpd -t -f /etc/httpd/conf.d/ssl.conf
AH00534: httpd: Configuration error: No MPM loaded.

Andere Anwendungen verfügen über Methoden zum Überprüfen der Syntax für eine enthaltene Datei. Das sudo Die Konfiguration wird normalerweise mit visudo geändert Befehl, damit vor dem Speichern und Beenden eine Syntaxprüfung durchgeführt werden kann. Dieses Dienstprogramm bearbeitet die Datei /etc/sudoers Datei standardmäßig, unterstützt aber auch ein -f Option, um eine andere Datei anzugeben.

$ sudo visudo -f /etc/sudoers.d/demo
>>> /etc/sudoers.d/demo: syntax error near line 1 <<<
What now? q
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)

What now? x

Derselbe Befehl unterstützt auch ein --check Option, um eine Datei nur ohne Bearbeitung zu validieren.

$ visudo -c demo.sudo
>>> demo.sudo: syntax error near line 1 <<<
parse error in demo.sudo near line 1

Kombinieren Sie dies mit einer Validierungsoption in Ihrem Konfigurationsverwaltungsprogramm, um sicherzustellen, dass Vorlagenerweiterungen eine Konfigurationsdatei nicht beschädigen. In der Dokumentation finden Sie Beispiele für die Module Copy und Template von Ansible. Ich habe auch das folgende Beispiel aus der ansible-doc template bereitgestellt für sshd :

- name: Update sshd configuration safely, avoid locking yourself out
  template:
    src: etc/ssh/sshd_config.j2
    dest: /etc/ssh/sshd_config
    owner: root
    group: root
    mode: '0600'
    validate: /usr/sbin/sshd -t -f %s
    backup: yes

Ein wenig Stöbern in kommentierten Zeilen und Handbuchseiten wird Ihnen helfen, das Beste aus dieser Organisationsmethode herauszuholen, indem Sie Verteilungsoptionen, Namenskonventionen und Informationen zur Syntaxüberprüfung anzeigen.

Schluß

Das Organisieren von Konfigurationsdateien in Verzeichnissen kann die Verwaltung und Delegierung der Verwaltung vereinfachen. Dateien können nach Paket oder Funktion organisiert werden, und Konfigurationsmanagementlösungen wie Ansible können sogar von kleineren Vorlagendateien profitieren. Möglicherweise müssen Sie Dateinamen und Speicherorte standardisieren und Dateiüberprüfungstools aktualisieren, aber die Verwendung eines Punkt-d-Ordners zum Speichern mehrerer Konfigurationsdateien kann Ihnen viel Aufwand ersparen.

[ Möchten Sie Red Hat Enterprise Linux ausprobieren? Laden Sie es jetzt kostenlos herunter. ]


Linux
  1. Wie wird /etc/motd aktualisiert?

  2. Verstehen der /etc/inittab-Datei unter Linux

  3. Verstehen des Verzeichnisses /etc/skel unter Linux

  4. /etc/hosts-Datei unter Linux verstehen

  5. Grundlegendes zur Konfigurationsdatei /etc/profile unter Linux

So komprimieren Sie Dateien und Verzeichnisse unter Linux

Der richtige Weg zum Bearbeiten von /etc/passwd- und /etc/group-Dateien unter Linux

So entfernen Sie Dateien und Verzeichnisse unter Linux

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

Verstehen der /etc/fstab-Datei unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen