GNU/Linux >> Linux Esercitazione >  >> Linux

Configurazione Linux:comprensione delle directory *.d in /etc

I file di configurazione, che includono altri file, non sono nuovi. Anche l'inserimento dei file inclusi nelle sottodirectory è stata un'opzione sin dall'inizio. Esaminiamo i casi d'uso e vediamo come ottenere il massimo da questo metodo di organizzazione.

Alcune persone trovano che un singolo file di configurazione sia l'approccio "semplice" e un intero albero di file sia più complesso. Tuttavia, fermati e pensa a quanto potrebbero crescere alcuni file di configurazione o quante persone o programmi diversi hanno bisogno di modificarli. Può essere davvero più semplice consentire a ciascun sottoprogetto di rilasciare la propria configurazione nel proprio file in una sottodirectory. Di recente, ad esempio in systemd documentazione, questi file sono talvolta chiamati file "drop-in".

Nel tempo, e soprattutto negli ultimi anni, l'uso di sottodirectory in /etc è aumentato. Due situazioni significative stanno guidando questo movimento:

  • Programmi più grandi hanno suddiviso file di configurazione complessi in più file più piccoli.
  • Molti altri programmi sono diventati dipendenti da una singola utilità. Ciascuna di queste utilità deve gestire una parte della configurazione.

Popola per pacchetto

Alcuni dei primi utilizzi di *.d le directory che ho incontrato erano per la registrazione e la pianificazione. Diamo un'occhiata al logrotate utilità. Il file di configurazione principale è /etc/logrotate.conf . Non è molto complicato, ma ogni file da ruotare deve essere specificato. Ogni file potrebbe anche richiedere diverse opzioni di configurazione. Invece di modificare questo singolo file ogni volta che viene aggiunta o aggiornata un'applicazione sul sistema, separiamo la configurazione di ciascuna applicazione in un file specifico.

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

Il file di configurazione principale include tutti i file in un'altra directory. I file nella directory possono provenire da diversi pacchetti RPM.

$ 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

Il proprietario di ogni pacchetto sa cosa deve essere ruotato e con quale frequenza. Forniscono un file di configurazione specifico per la loro applicazione e lo aggiungono a logrotate.d directory durante l'installazione. Viene anche rimosso da logrotate.d directory quando il pacchetto viene disinstallato dal sistema.

Altri esempi di questo caso d'uso sono la pianificazione con cron nel cron.d directory e configurazione dell'autenticazione con PAM nel pam.d directory. Utilizzando file separati, l'amministratore di sistema non ha bisogno di gestire le scritture in conflitto su un singolo file.

Organizza per funzione

Il server Web Apache è un programma completo con molte opzioni di configurazione. Apache utilizza un conf.d directory per l'organizzazione. Quando ho iniziato con Apache, era comune avere un unico server che ospitava più siti virtuali. Ciascuno di quegli host virtuali aveva il proprio file di configurazione. Questo approccio ci ha consentito di condividere i compiti di amministrazione dei file e di condividere i file su diversi sistemi durante la migrazione, il ripristino e il bilanciamento del carico. Oggi vedo più casi in cui la configurazione è separata dalla funzione.

Un altro fattore è se la funzione è installata come modulo separato.

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

Il ssl.conf la configurazione è resa disponibile solo quando il mod_ssl pacchetto è installato. Altri moduli possono anche rilasciare file in conf.d directory. Alcune applicazioni, come mod_auth_kerb pacchetto, fornisci un esempio in un /usr/share/doc directory. Spetta all'amministratore web creare o gestire i file di produzione.

[ Hai bisogno di ulteriore aiuto per imparare Linux? Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]

Gestione centralizzata

Come ho suggerito con i file di configurazione Web, un altro utilizzo di file di configurazione separati consiste nel semplificare la gestione centralizzata di questi file e distribuire solo i componenti pertinenti a ciascun nodo gestito.

Il modules.d contiene la configurazione per le impostazioni del modulo del kernel e il sysctl.d contiene le impostazioni di ottimizzazione del kernel. Queste impostazioni potrebbero essere necessarie solo su alcuni sistemi o potrebbero richiedere impostazioni specifiche dell'hardware. Le impostazioni possono essere organizzate per hardware, funzione o una combinazione.

I programmi di gestione della configurazione possono inviare solo i file pertinenti a host gestiti specifici o generare i file su ciascun host in base a un modello. Se stai distribuendo questi file con una soluzione di gestione della configurazione come Ansible, usa qualcosa come ansible_managed variabile per includere un commento che indica che il file è gestito in remoto.

Determina un nome e una posizione

Sebbene le directory punto-d abbiano casi d'uso comuni per l'assistenza con l'organizzazione e la distribuzione, esistono molti modi diversi per gestire le inclusioni. Per ogni applicazione o utilità, dobbiamo determinare il modo migliore per denominare i nostri file. Alcune configurazioni riconoscono solo i file con un'estensione specifica, come .conf , mentre altri fanno riferimento a tutti i file nella directory.

L'man pagine per il file di configurazione principale, come man logrotate.conf , di solito descrive le opzioni. Tuttavia, inizio cercando un'istruzione include nel file di configurazione.

Quando cerco include, vedo una varietà di metodi (formattati per la leggibilità):

$ 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")

Il ld.so e rsyslog entrambe le configurazioni prevedono che i file inclusi finiscano con .conf . Gli altri sembrano includere tutti i file, ma ulteriori indagini potrebbero mostrare un metodo per escludere i file. Ad esempio, man logrotate.conf mostra che tabooext e taboopat può essere utilizzato per filtrare .orig , .bak , .rpmnew o altri file che potrebbero derivare dal controllo delle versioni o dagli aggiornamenti. Per il krb5.conf file, c'è sia un include e includedir direttiva. La pagina man indica che includedir la direttiva copre "tutti i file all'interno della directory i cui nomi sono costituiti esclusivamente da caratteri alfanumerici, trattini o trattini bassi". Continua sottolineando che i file che iniziano con un punto (.) vengono ignorati.

Un'altra considerazione per i file inclusi è l'ordine di lettura e unione. Ne ho visti alcuni che leggono in ordine casuale, ma la maggior parte include file nell'ordine in cui si trovano nella directory. Se la sequenza è particolarmente importante, ad esempio per moduli o script di avvio, è comune iniziare i nomi dei file con un numero. Sono comuni anche altri standard di denominazione come "pre" o "post".

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

Alcune utilità possono anche avere simboli di espansione che aiutano con la gestione e la distribuzione di file centralizzati. I sudoers la configurazione è un esempio in cui un %h rappresenta la forma abbreviata del nome host.

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

La riga di inclusione sopra specifica il file di configurazione per l'host corrente, anche se la directory contiene altri file. Vedi man sudoers per altri esempi.

Verifica i file

Un altro pericolo nell'usare le directory dot-d è che potrebbe essere necessario modificare i comandi di controllo della sintassi.

In alcuni casi, tutti i file di configurazione devono essere controllati contemporaneamente. Ad esempio, con Apache, il apachectl configtest comando controlla sempre il file di configurazione principale, che può includere altri file. Utilizza le opzioni predefinite. Puoi eseguire httpd -t comando con opzioni aggiuntive. Ad esempio, c'è un'opzione per elencare tutti i file inclusi.

$ 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

Il httpd il comando accetta anche un -f opzione per specificare un file particolare. Tuttavia, quel file deve superare tutti i controlli di configurazione, quindi il controllo di un file incluso potrebbe non fornire i risultati desiderati. Il seguente errore si verifica durante il controllo del ssl.conf predefinito file di configurazione fornito da mod_ssl pacchetto.

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

Altre applicazioni hanno metodi per verificare la sintassi per un file incluso. Il sudo la configurazione viene normalmente modificata utilizzando il visudo comando in modo che sia possibile eseguire una convalida della sintassi prima del salvataggio e dell'uscita. Questa utility modifica il /etc/sudoers per impostazione predefinita, ma supporta anche un -f opzione per specificare un file diverso.

$ 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

Lo stesso comando supporta anche un --check opzione per convalidare solo un file senza una modifica.

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

Combina questo con un'opzione di convalida nel tuo programma di gestione della configurazione per assicurarti che le espansioni del modello non interrompano un file di configurazione. Ci sono esempi nella documentazione per i moduli Ansible copy e template. Ho anche fornito il seguente esempio da ansible-doc template per 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

Un po' di ricerca nelle righe commentate e nelle pagine man ti aiuterà a ottenere il massimo da questo metodo organizzativo visualizzando le opzioni di distribuzione, le convenzioni di denominazione e le informazioni sulla convalida della sintassi.

Concludi

L'organizzazione dei file di configurazione in directory può semplificare la gestione e la delega dell'amministrazione. I file possono essere organizzati per pacchetto o funzione e soluzioni di gestione della configurazione come Ansible possono anche trarre vantaggio da file modello più piccoli. Potrebbe essere necessario standardizzare i nomi e le posizioni dei file e potrebbe essere necessario aggiornare gli strumenti di verifica dei file, ma l'utilizzo di una cartella punto d per ospitare più file di configurazione può farti risparmiare un sacco di fatica.

[ Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente. ]


Linux
  1. Comprensione del file /etc/xinetd.conf in Linux

  2. Comprendere la directory /etc/skel in Linux

  3. Comprensione del file /etc/hosts in Linux

  4. Qual è la connessione tra le directory /etc/init.d e /etc/rcX.d in Linux?

  5. I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?

Come comprimere file e directory in Linux

Il modo giusto per modificare i file /etc/passwd e /etc/group in Linux

Come rimuovere file e directory in Linux

/proc/cpuinfo e /proc/meminfo in Linux

Comprendere il file /etc/fstab in Linux

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions