GNU/Linux >> Belajar Linux >  >> Linux

Konfigurasi Linux:Memahami direktori *.d di /etc

File konfigurasi, yang mencakup file lain, bukanlah hal baru. Menempatkan file-file yang disertakan di sub-direktori juga telah menjadi pilihan sejak awal. Mari kita tinjau kasus penggunaan dan lihat cara mendapatkan hasil maksimal dari metode organisasi ini.

Beberapa orang menganggap satu file konfigurasi sebagai pendekatan "sederhana" dan seluruh pohon file menjadi lebih kompleks. Namun, berhentilah dan pikirkan seberapa besar beberapa file konfigurasi dapat bertambah, atau berapa banyak orang atau program yang perlu mengeditnya. Mengizinkan setiap subproyek untuk memasukkan konfigurasi mereka ke dalam file mereka sendiri dalam subdirektori akan menjadi lebih mudah. Baru-baru ini, seperti di systemd dokumentasi, file-file ini kadang-kadang disebut file "drop-in".

Seiring waktu, dan terutama dalam beberapa tahun terakhir, penggunaan subdirektori di /etc telah meningkat. Dua situasi signifikan yang mendorong gerakan ini:

  • Program yang lebih besar telah membagi file konfigurasi yang kompleks menjadi beberapa file yang lebih kecil.
  • Banyak program lain menjadi bergantung pada satu utilitas. Masing-masing utilitas tersebut perlu mengelola sebagian konfigurasi.

Isi per paket

Beberapa penggunaan pertama *.d direktori yang saya temui adalah untuk logging dan penjadwalan. Mari kita lihat logrotate kegunaan. File konfigurasi utama adalah /etc/logrotate.conf . Ini tidak terlalu rumit, tetapi setiap file yang akan dirotasi perlu ditentukan. Setiap file mungkin juga memerlukan opsi konfigurasi yang berbeda. Alih-alih mengedit file tunggal ini setiap kali aplikasi ditambahkan atau diperbarui pada sistem, kami memisahkan konfigurasi untuk setiap aplikasi ke file tertentu.

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

File konfigurasi utama mencakup semua file di direktori lain. File dalam direktori mungkin berasal dari paket RPM yang berbeda.

$ 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

Pemilik setiap paket tahu apa yang perlu dirotasi dan seberapa sering. Mereka menyediakan file konfigurasi khusus untuk aplikasi mereka dan menambahkannya ke logrotate.d direktori selama instalasi. Itu juga dihapus dari logrotate.d direktori saat paket di-uninstal dari sistem.

Contoh lain dari use case ini adalah penjadwalan dengan cron di cron.d direktori dan konfigurasi otentikasi dengan PAM di pam.d direktori. Dengan menggunakan file terpisah, administrator sistem tidak perlu mengelola konflik penulisan ke satu file.

Atur berdasarkan fungsi

Server web Apache adalah program ekstensif dengan banyak opsi konfigurasi. Apache menggunakan conf.d direktori untuk organisasi. Ketika saya mulai dengan Apache, sudah umum untuk memiliki satu server yang meng-host beberapa situs virtual. Masing-masing host virtual tersebut memiliki file konfigurasinya sendiri. Pendekatan ini memungkinkan kami untuk berbagi tugas administrasi file serta berbagi file di sistem yang berbeda selama migrasi, pemulihan, dan penyeimbangan beban. Hari ini, saya melihat lebih banyak kasus di mana konfigurasi dipisahkan oleh fungsi.

Faktor lainnya adalah jika fitur tersebut dipasang sebagai modul terpisah.

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

ssl.conf konfigurasi hanya tersedia bila mod_ssl paket diinstal. Modul lain juga dapat memasukkan file ke conf.d direktori. Beberapa aplikasi, seperti mod_auth_kerb paket, berikan contoh dalam /usr/share/doc direktori. Terserah administrator web untuk membuat atau mengelola file produksi.

[ Butuh bantuan lebih lanjut untuk mempelajari Linux? Kursus online gratis:Tinjauan teknis Red Hat Enterprise Linux. ]

Pengelolaan terpusat

Seperti yang saya sarankan dengan file konfigurasi web, penggunaan lain dari file konfigurasi terpisah adalah untuk mempermudah pengelolaan terpusat file ini, dan hanya mendistribusikan komponen yang relevan ke setiap node yang dikelola.

modules.d direktori menyimpan konfigurasi untuk pengaturan modul kernel dan sysctl.d direktori berisi setelan penyetelan kernel. Setelan ini mungkin hanya diperlukan pada beberapa sistem, atau mungkin memerlukan setelan khusus perangkat keras. Pengaturan dapat diatur oleh perangkat keras, fungsi, atau kombinasi.

Program pengelolaan konfigurasi hanya dapat mendorong file yang relevan ke host terkelola tertentu atau menghasilkan file di setiap host berdasarkan template. Jika Anda mendistribusikan file-file ini dengan solusi manajemen konfigurasi seperti Ansible, gunakan sesuatu seperti ansible_managed variabel untuk menyertakan komentar yang menunjukkan bahwa file tersebut dikelola dari jarak jauh.

Tentukan nama dan lokasi

Sementara direktori dot-d memiliki kasus penggunaan umum untuk membantu organisasi dan distribusi, ada banyak cara berbeda untuk menangani penyertaan. Untuk setiap aplikasi atau utilitas, kita perlu menentukan cara terbaik untuk memberi nama file kita. Beberapa konfigurasi hanya mengenali file dengan ekstensi tertentu, seperti .conf , sementara yang lain merujuk semua file dalam direktori.

man halaman untuk file konfigurasi utama, seperti man logrotate.conf , biasanya akan menjelaskan opsi. Namun, saya mulai dengan mencari pernyataan include dalam file konfigurasi.

Saat saya mencari termasuk, saya melihat berbagai metode (diformat agar mudah dibaca):

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

ld.so dan rsyslog konfigurasi keduanya mengharapkan file yang disertakan diakhiri dengan .conf . Yang lain sepertinya menyertakan semua file, tetapi penyelidikan lebih lanjut mungkin menunjukkan metode untuk mengecualikan file. Misalnya, man logrotate.conf menunjukkan bahwa tabooext dan taboopat dapat digunakan untuk menyaring .orig , .bak , .rpmnew , atau file lain yang mungkin dihasilkan dari pembuatan versi atau pembaruan. Untuk krb5.conf file, ada keduanya include dan includedir pengarahan. Halaman manual menunjukkan bahwa includedir direktif mencakup "semua file dalam direktori yang namanya hanya terdiri dari karakter alfanumerik, tanda hubung, atau garis bawah." Selanjutnya ditunjukkan bahwa file yang dimulai dengan titik (.) diabaikan.

Pertimbangan lain untuk file yang disertakan adalah urutan baca dan gabung. Saya telah melihat beberapa yang membaca dalam urutan acak, tetapi sebagian besar menyertakan file dalam urutan yang ditemukan di direktori. Jika urutannya sangat penting, seperti untuk modul atau skrip startup, biasanya nama file diawali dengan angka. Standar penamaan lain seperti "pra" atau "pos" juga umum.

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

Beberapa utilitas bahkan mungkin memiliki simbol ekspansi yang membantu mengelola dan mendistribusikan file terpusat. sudoers konfigurasi adalah contoh di mana %h mewakili bentuk pendek dari nama host.

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

Baris sertakan di atas menentukan file konfigurasi untuk host saat ini, meskipun direktori berisi file lain. Lihat man sudoers untuk lebih banyak contoh.

Verifikasi file

Bahaya lain dalam menggunakan direktori dot-d adalah Anda mungkin harus memodifikasi perintah pemeriksaan sintaks.

Dalam beberapa kasus, semua file konfigurasi harus diperiksa sekaligus. Misalnya, dengan Apache, apachectl configtest perintah selalu memeriksa file konfigurasi utama, yang dapat menyertakan file lain. Ini menggunakan opsi default. Anda dapat menjalankan httpd -t perintah dengan opsi tambahan. Misalnya, ada opsi untuk membuat daftar semua file yang disertakan.

$ 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

httpd perintah juga mengambil -f pilihan untuk menentukan file tertentu. Namun, file itu harus lulus semua pemeriksaan konfigurasi, jadi memeriksa file yang disertakan mungkin tidak memberikan hasil yang diinginkan. Kesalahan berikut terjadi saat memeriksa ssl.conf default file konfigurasi yang disediakan oleh mod_ssl paket.

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

Aplikasi lain memang memiliki metode untuk memverifikasi sintaks untuk file yang disertakan. sudo konfigurasi biasanya dimodifikasi dengan menggunakan visudo perintah sehingga validasi sintaks dapat dilakukan sebelum menyimpan dan keluar. Utilitas ini mengedit /etc/sudoers file secara default tetapi juga mendukung -f opsi untuk menentukan file yang berbeda.

$ 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

Perintah yang sama juga mendukung --check opsi untuk hanya memvalidasi file tanpa mengedit.

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

Gabungkan ini dengan opsi validasi dalam program manajemen konfigurasi Anda untuk memastikan bahwa perluasan template tidak merusak file konfigurasi. Ada contoh dalam dokumentasi untuk modul salinan dan template Ansible. Saya juga telah memberikan contoh berikut dari ansible-doc template untuk 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

Menggali sedikit melalui baris komentar dan halaman manual akan membantu Anda mendapatkan hasil maksimal dari metode organisasi ini dengan menampilkan opsi distribusi, konvensi penamaan, dan informasi validasi sintaks.

Selesai

Mengatur file konfigurasi ke dalam direktori dapat membuat administrasi lebih mudah untuk dikelola dan didelegasikan. File dapat diatur menurut paket atau fungsi dan solusi manajemen konfigurasi seperti Ansible bahkan dapat mengambil manfaat dari file template yang lebih kecil. Anda mungkin perlu menstandardisasi nama dan lokasi file, dan Anda mungkin perlu memperbarui alat verifikasi file, tetapi menggunakan folder dot d untuk menampung beberapa file konfigurasi dapat menghemat banyak usaha.

[ Ingin mencoba Red Hat Enterprise Linux? Unduh sekarang secara gratis. ]


Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Bagaimana /etc/motd Diperbarui?

  3. Memahami file /etc/xinetd.conf di Linux

  1. Salin file &direktori di Linux

  2. Memahami direktori /etc/skel di Linux

  3. Memahami file /etc/hosts di Linux

  1. Linux Hapus File dan Direktori

  2. Memahami File /etc/inittab di Linux

  3. Memahami File Konfigurasi /etc/profile di Linux