===== Wichtige Konfigurationsdateien =====
**Kurzfassung:** Linux-Systeme verwenden hunderte Konfigurationsdateien. Dieser Guide dokumentiert die wichtigsten Dateien, ihre Funktionen und Ort. Zielgruppe: Systemadministratoren zur Verwaltung und Konfiguration.
==== Übersicht ====
Konfigurationsdateien sind das Herzstück von Linux-Systemen. Sie befinden sich überwiegend unter ''/etc'' und werden meist im Textformat gespeichert. Dieser Guide dokumentiert die wichtigsten Dateien, ihre Funktionen, Locations und Backup-Strategien.
==== Struktur von /etc ====
/etc/ # Systemweite Konfiguration
├── systemd/ # systemd-Konfiguration
├── init.d/ # SysV Init-Skripte
├── default/ # Service-Defaults
├── network/ # Netzwerk (systemd-networkd)
├── netplan/ # netplan (Netzwerk-Abstraktionslayer)
├── NetworkManager/ # NetworkManager-Konfiguration
├── ssh/ # SSH-Konfiguration
├── ssl/ oder tls/ # SSL/TLS-Zertifikate
├── security/ # Sicherheits-Konfiguration
├── pam.d/ # PAM (Authentifizierung)
├── sudoers.d/ # Sudo-Konfiguration
├── cron.d/ # Cron-Jobs
├── apt/ oder yum.repos/ # Paketquellen
├── rsyslog.d/ # Logging-Konfiguration
├── hostname # Hostname
├── hosts # Host-IP-Mapping
├── fstab # Dateisystem-Mountpoints
├── grub.d/ # Bootloader-Konfiguration
└── ...
==== Wichtigste Konfigurationsdateien ====
=== System und Boot ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/hostname'' | Hostname des Systems | ✓ |
| ''/etc/hosts'' | Lokales Host-Mapping (IP → Hostname) | ✓ |
| ''/boot/grub/grub.cfg'' | GRUB Bootloader-Konfiguration (Auto-generiert) | - |
| ''/etc/default/grub'' | GRUB Einstellungen (bearbeiten, nicht grub.cfg!) | ✓ |
| ''/etc/fstab'' | Dateisystem-Mountpoints (kritisch!) | ✓ |
| ''/etc/default/locale'' | Spracheinstellungen | ✓ |
| ''/etc/timezone'' | Zeitzonen-Konfiguration | ✓ |
| ''/etc/os-release'' | System-Informationen | - |
| ''/proc/cmdline'' | Kernel Boot-Parameter | - |
**Beispiele:**
# Hostname anzeigen/ändern
cat /etc/hostname
sudo hostnamectl set-hostname newname
# Hosts-Datei (für Tests)
cat /etc/hosts
# 127.0.0.1 localhost
# 192.168.1.10 webserver.local
# fstab - KRITISCH bei Änderung überprüfen!
cat /etc/fstab
# UUID=abc123 /home ext4 defaults 0 2
sudo mount -a # Syntax testen (bevor Reboot!)
# GRUB-Konfiguration
sudo vim /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
=== Netzwerk-Konfiguration ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/netplan/*.yaml'' | netplan-Netzwerk-Konfiguration (Ubuntu/Debian) | ✓ |
| ''/etc/systemd/network/*.network'' | systemd-networkd Konfiguration | ✓ |
| ''/etc/NetworkManager/conf.d/'' | NetworkManager-Konfiguration | ✓ |
| ''/etc/resolv.conf'' | DNS-Resolver (wird meist automatisch generiert!) | - |
| ''/run/systemd/resolve/resolv.conf'' | systemd-resolved aktuelle Konfiguration | - |
| ''/etc/wpa_supplicant/wpa_supplicant.conf'' | WLAN-Passwörter | ✓ |
| ''/etc/hosts.allow'' | TCP Wrapper - IP-Whitelist | ✓ |
| ''/etc/hosts.deny'' | TCP Wrapper - IP-Blacklist | ✓ |
**Beispiele:**
# netplan-Konfiguration
sudo cat /etc/netplan/01-netcfg.yaml
# systemd-resolved (moderne Systeme)
resolvectl status
cat /run/systemd/resolve/resolv.conf
# TCP Wrapper (beschränke SSH)
sudo vim /etc/hosts.allow
# sshd: 192.168.1.0/24
sudo vim /etc/hosts.deny
# sshd: ALL
=== Benutzer und Authentifizierung ===
| **Datei** | **Funktion** | **Beachten** |
| ''/etc/passwd'' | Benutzer-Datenbank (Passwörter verschlüsselt!) | - |
| ''/etc/shadow'' | Verschlüsselte Passwörter (root only) | ✓ |
| ''/etc/group'' | Gruppen-Datenbank | - |
| ''/etc/gshadow'' | Verschlüsselte Gruppen-Passwörter | ✓ |
| ''/etc/sudoers'' | Sudo-Konfiguration (IMMER mit visudo editieren!) | ✓ |
| ''/etc/sudoers.d/'' | Sudo-Erweiterungen (drop-in) | ✓ |
| ''/etc/pam.d/'' | PAM-Authentifizierungs-Module | ✓ |
| ''/etc/login.defs'' | Login-Einstellungen (Passwords, UID-Range) | ✓ |
| ''/etc/nsswitch.conf'' | Name Service Switch (Benutzer-, Host-, DNS-Lookup) | ✓ |
| ''/home/*/'' | Home-Verzeichnisse | ✓ |
**Beispiele:**
# Sudoers editieren (NIEMALS direkt mit nano oder vim! Anpassen auf vim update-alternatives --config editor)
sudo visudo
# Passwort-Richtlinien
cat /etc/login.defs | grep PASS
# PAM-Module (z.B. für 2FA, LDAP)
ls /etc/pam.d/
cat /etc/pam.d/login
# User Info
cat /etc/passwd | grep username
# username:x:1000:1000:Full Name:/home/username:/bin/bash
# nsswitch.conf - Name Service Switch Konfiguration
cat /etc/nsswitch.conf
=== Name Service Switch (nsswitch.conf) ===
Die ''/etc/nsswitch.conf'' definiert, wie das System Informationen zu Benutzern, Gruppen, Hosts und anderen Services auflöst.
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/nsswitch.conf'' | Name Service Switch - Lookup-Reihenfolge | ✓ |
**Wichtige nsswitch-Zeilen:**
# Benutzer-Lookup (lokale Dateien → LDAP → NIS)
passwd: files ldap
# Gruppen-Lookup
group: files ldap
# Host-Lookup (lokale Datei → DNS)
hosts: files dns
# Netzwerk-Lookup
networks: files
# Service-Lookup
services: files
# Protokoll-Lookup
protocols: files
# RPC-Lookup
rpc: files
# Aliases-Lookup (Email)
aliases: files
# Shadow-Lookup (Passwörter)
shadow: files ldap
# Automount-Lookup
automount: files ldap
**Lookup-Module - Erklärung:**
| **Modul** | **Erklärung** | **Dateien/Services** | **Nutzung** |
| ''files'' | Lokale Dateien durchsuchen | /etc/passwd, /etc/group, /etc/hosts, /etc/shadow | Immer zuerst, Standard |
| ''dns'' | Internet-DNS abfragen | DNS-Server (8.8.8.8, etc.) | Hostname → IP-Auflösung |
| ''ldap'' | LDAP-Verzeichnisdienst | LDAP-Server (OpenLDAP, etc.) | Unternehmens-Verzeichnis |
| ''nis'' | Network Information Service | NIS/YP-Server | Ältere Unix-Netzwerke |
| ''hesiod'' | Hesiod Informationsdienst | Hesiod-Server | Akademische Netzwerke (veraltet) |
| ''sss'' | System Security Services (SSSD) | Active Directory, Kerberos, FreeIPA | Windows-Domain-Integration |
| ''db'' | Berkeley Database | /etc/db.passwd, etc. | Performance-Optimierung |
| ''compat'' | Kompatibilität mit +/- Syntax | /etc/passwd mit +/- Einträgen | Legacy NIS-Kompatibilität |
**Praktische Modul-Beispiele:**
**Nur lokale Dateien (einfaches System):**
passwd: files
group: files
hosts: files
shadow: files
**Lokale + DNS (Standard):**
passwd: files
group: files
hosts: files dns
shadow: files
**Lokale + LDAP (Unternehmens-Setup):**
passwd: files ldap
group: files ldap
hosts: files dns
shadow: files ldap
**SSSD für Active Directory (Windows-Integration):**
passwd: files sss
group: files sss
hosts: files dns myhostname
shadow: files sss
**Performance mit Berkeley Database Cache:**
passwd: db files
group: db files
hosts: db files dns
**Modul-Reihenfolge Erklärung:**
Beispiel: ''passwd: files ldap''
1. Erst in "files" suchen → /etc/passwd durchsuchen
2. Wenn nicht found → "ldap" befragen (LDAP-Server)
3. Wenn noch nicht found → Benutzer nicht vorhanden (Fehler)
**Testen welches Modul verwendet wird:**
# Welches Modul wird genutzt?
strace -e open getent passwd testuser 2>&1 | grep -E "/etc/|ldap|nis"
# Einfacher: Benutzer existiert?
getent passwd testuser # Sucht nach nsswitch-Konfiguration
# Wenn LDAP konfiguriert:
ldapwhoami -H ldap://ldap.example.com -D "uid=testuser,ou=people,dc=example,dc=com" -W
# Wenn SSSD (Active Directory):
sudo getent passwd domain\\\\testuser
**Praktisches Beispiel - LDAP + lokale Fallback:**
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns
Dies bedeutet:
1. Zuerst lokale Dateien durchsuchen
2. Falls nicht gefunden: LDAP abfragen
3. Für Hosts: lokale /etc/hosts, dann DNS
**Beispiel - SSSD (für Active Directory):**
passwd: files systemd sss
shadow: files sss
group: files systemd sss
hosts: files dns myhostname resolve
**Debugging und Testing:**
# nsswitch-Konfiguration anzeigen
cat /etc/nsswitch.conf
# Benutzer-Auflösung testen
getent passwd username # Zeigt Benutzer-Info
getent group groupname # Zeigt Gruppen-Info
getent hosts example.com # Zeigt Host-Auflösung
# DNS-Auflösung testen
nslookup example.com
dig example.com
host example.com
# LDAP-Verbindung testen (falls konfiguriert)
ldapwhoami -H ldap://ldap.example.com -D "cn=admin,dc=example,dc=com" -W
# SSSD Status (falls Active Directory)
sudo systemctl status sssd
sudo journalctl -u sssd -n 50
=== SSH und Remote Access ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/ssh/sshd_config'' | SSH-Server-Konfiguration (kritisch!) | ✓ |
|''/etc/ssh/sshd_config.d/'' | Modulear Einrichten | |
| ''/etc/ssh/ssh_config'' | SSH-Client-Konfiguration | ✓ |
| ''/etc/ssh/ssh_host_*'' | SSH-Host-Schlüssel (privat & public) | ✓✓✓ |
| ''~/.ssh/authorized_keys'' | Public-Keys für Passwort-loses Login | ✓ |
| ''~/.ssh/config'' | Benutzer-SSH-Konfiguration | ✓ |
| ''~/.ssh/id_rsa'' | Privater SSH-Schlüssel (Benutzer) | ✓✓✓ |
**Beispiele:**
# SSH-Daemon konfigurieren
sudo vim /etc/ssh/sshd_config
# Port 22
# PermitRootLogin no
# PasswordAuthentication no
# PubkeyAuthentication yes
# SSH-Config validieren vor Anwendung
sudo sshd -t
# SSH-Service neu starten
sudo systemctl restart sshd
# SSH-Schlüsseln-Backup (KRITISCH!)
sudo tar -czf /root/ssh_keys_backup.tar.gz /etc/ssh/
sudo chmod 600 /root/ssh_keys_backup.tar.gz
=== Firewall und Sicherheit ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/ufw/ufw.conf'' | UFW Firewall Konfiguration | ✓ |
| ''/etc/ufw/rules.d/'' | UFW Firewall-Regeln | ✓ |
| ''/etc/nftables.conf'' | nftables Firewall-Konfiguration | ✓ |
| ''/etc/iptables/rules.v4'' | iptables IPv4-Regeln | ✓ |
| ''/etc/iptables/rules.v6'' | iptables IPv6-Regeln | ✓ |
| ''/etc/fail2ban/jail.conf'' | fail2ban-Konfiguration | ✓ |
| ''/etc/apparmor.d/'' | AppArmor-Profile | ✓ |
| ''/etc/selinux/config'' | SELinux-Konfiguration | ✓ |
**Beispiele:**
# UFW Status und Regeln
sudo ufw status numbered
# nftables Regeln
sudo nft list ruleset
# fail2ban (Brute-Force-Schutz)
sudo cat /etc/fail2ban/jail.conf
sudo fail2ban-client status
# AppArmor Profile
sudo aa-status
=== Systemd ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/systemd/system.conf'' | systemd Haupt-Konfiguration | ✓ |
| ''/etc/systemd/journald.conf'' | Journal (Logging) Konfiguration | ✓ |
| ''/etc/systemd/logind.conf'' | Login-Manager Konfiguration | ✓ |
| ''/etc/systemd/timesyncd.conf'' | Zeit-Synchronisation | ✓ |
| ''/etc/systemd/resolved.conf'' | DNS-Resolver | ✓ |
| ''/etc/systemd/networkd.conf'' | systemd-networkd Konfiguration | ✓ |
| ''/etc/systemd/system/*.service'' | Benutzer-Services | ✓ |
| ''/etc/systemd/system/*.service.d/'' | Service-Overrides (Drop-In) | ✓ |
**Beispiele:**
# journald-Logging (Journal-Größe)
sudo vim /etc/systemd/journald.conf
# SystemMaxUse=2G
# RuntimeMaxUse=1G
# systemd-resolved DNS
sudo vim /etc/systemd/resolved.conf
# DNS=8.8.8.8 1.1.1.1
sudo systemctl restart systemd-resolved
# Service-Override (eigene Werte ohne Datei zu editieren)
sudo systemctl edit apache2
# [Service]
# Restart=always
# RestartSec=5s
=== Logging und Monitoring ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/rsyslog.conf'' | rsyslog (Syslog)-Konfiguration | ✓ |
| ''/etc/rsyslog.d/'' | rsyslog-Rules | ✓ |
| ''/etc/logrotate.conf'' | Log-Rotation | ✓ |
| ''/etc/logrotate.d/'' | Service-spezifische Log-Rotation | ✓ |
| ''/var/log/syslog'' oder ''/var/log/messages'' | System-Logs | - |
| ''/var/log/auth.log'' oder ''/var/log/secure'' | Authentifizierungs-Logs | - |
| ''/var/log/kern.log'' | Kernel-Logs | - |
| ''/var/log/journal/'' | systemd-journal (binary) | - |
**Beispiele:**
# rsyslog Konfiguration
sudo cat /etc/rsyslog.conf
sudo vim /etc/rsyslog.d/custom.conf
# Log-Rotation Konfiguration
cat /etc/logrotate.conf
cat /etc/logrotate.d/apache2
# Journald-Logs anzeigen
journalctl -n 50 # Letzte 50 Zeilen
journalctl -f # Live-Logs
journalctl -u apache2 -n 20 # Service-Logs
=== Paketmanagement ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/apt/sources.list'' | APT Paketquellen (Debian/Ubuntu) | ✓ |
| ''/etc/apt/sources.list.d/'' | APT Quellen (drop-in) | ✓ |
| ''/etc/apt/apt.conf'' | APT Konfiguration | ✓ |
| ''/etc/yum.repos.d/'' | YUM Repositories (RHEL/CentOS) | ✓ |
| ''/etc/yum.conf'' | YUM Konfiguration | ✓ |
| ''/etc/pacman.conf'' | Pacman Konfiguration (Arch) | ✓ |
| ''/var/cache/apt/'' | APT Cache | - |
**Beispiele:**
# Paketquellen (Debian/Ubuntu)
sudo vim /etc/apt/sources.list
# deb http://archive.ubuntu.com/ubuntu focal main universe
# PPA hinzufügen (moderner Weg)
sudo add-apt-repository ppa:user/ppa-name
# YUM Repositories (RHEL/CentOS)
sudo vim /etc/yum.repos.d/rhel.repo
=== Web Server (Apache, Nginx) ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/apache2/apache2.conf'' | Apache Haupt-Konfiguration | ✓ |
| ''/etc/apache2/mods-enabled/'' | Aktivierte Apache-Module | ✓ |
| ''/etc/apache2/sites-available/'' | Apache Virtual Hosts | ✓ |
| ''/etc/apache2/sites-enabled/'' | Aktivierte Virtual Hosts (Links) | - |
| ''/etc/nginx/nginx.conf'' | Nginx Haupt-Konfiguration | ✓ |
| ''/etc/nginx/sites-available/'' | Nginx Virtual Hosts | ✓ |
| ''/etc/nginx/sites-enabled/'' | Aktivierte Nginx Sites (Links) | - |
| ''/var/www/html/'' | Standard-Dokumenten-Root | ✓ |
**Beispiele:**
# Apache konfigurieren
sudo vim /etc/apache2/apache2.conf
sudo a2ensite example.com # Site aktivieren
sudo a2dissite default-ssl # Site deaktivieren
sudo apache2ctl configtest # Syntax-Test
sudo systemctl restart apache2
# Nginx konfigurieren
sudo vim /etc/nginx/nginx.conf
sudo vim /etc/nginx/sites-available/example.com
sudo ln -s ../sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # Syntax-Test
sudo systemctl restart nginx
=== Datenbank (MySQL/PostgreSQL) ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/mysql/mysql.conf.d/mysqld.cnf'' | MySQL Server-Konfiguration | ✓ |
| ''/etc/postgresql/*/main/postgresql.conf'' | PostgreSQL Konfiguration | ✓ |
| ''/var/lib/mysql/'' | MySQL Daten-Verzeichnis | ✓✓✓ |
| ''/var/lib/postgresql/'' | PostgreSQL Daten-Verzeichnis | ✓✓✓ |
**Beispiele:**
# MySQL konfigurieren
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql
# PostgreSQL Versionscheck
sudo -u postgres psql --version
sudo vim /etc/postgresql/14/main/postgresql.conf
sudo systemctl restart postgresql
=== Zeitplanung und Cron ===
| **Datei** | **Funktion** | **Backup?** |
| ''/etc/crontab'' | System-Crontab | ✓ |
| ''/etc/cron.d/'' | Cron-Jobs (drop-in) | ✓ |
| ''/etc/cron.daily/'' | Täglich ausgeführte Scripts | ✓ |
| ''/etc/cron.weekly/'' | Wöchentlich ausgeführte Scripts | ✓ |
| ''/etc/cron.monthly/'' | Monatlich ausgeführte Scripts | ✓ |
| ''~/.crontab'' | Benutzer-Crontab | ✓ |
**Beispiele:**
# System-Crontab
sudo vim /etc/crontab
# Benutzer-Crontab (sicherer)
crontab -e
# Cron-Jobs überprüfen
sudo crontab -l
crontab -l
=== Wichtige Lokationen zusammengefasst ===
# Kritische Backups (SEHR WICHTIG!)
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/ssh/ssh_host_*
/etc/fstab
/etc/hostname
/etc/sudoers
/root/.ssh/
# Netzwerk-Konfiguration
/etc/netplan/
/etc/systemd/network/
/etc/NetworkManager/
/etc/resolv.conf
# Sicherheit
/etc/ssh/sshd_config
/etc/ufw/
/etc/nftables.conf
/etc/fail2ban/
# Services
/etc/systemd/system/
/etc/systemd/system/*.service.d/
/etc/init.d/
# Logging
/etc/rsyslog.conf
/etc/logrotate.conf
# Anwendungen
/etc/apache2/ oder /etc/nginx/
/etc/mysql/ oder /etc/postgresql/
==== Backup-Strategie ====
# Kritische Dateien täglich backen
sudo tar -czf /root/etc-backup-$(date +%Y%m%d).tar.gz \
/etc/passwd /etc/shadow /etc/group /etc/gshadow \
/etc/ssh/ /etc/sudoers /etc/fstab /etc/hostname
# Gesamtes /etc-Verzeichnis monatlich
sudo tar -czf /root/etc-full-backup-$(date +%Y%m%d).tar.gz \
--exclude=/etc/ssl/private \
/etc/
# Wichtige Dateien in Git versionieren (privates Repo!)
cd /root/config-repo
sudo cp /etc/sudoers ./sudoers.bak
git add .
git commit -m "Backup vom $(date)"
==== Häufige Bearbeitungen ====
=== Vorher-Nachher: Hostname ändern ===
# Alt (System V)
sudo vim /etc/hostname
sudo vim /etc/hosts
sudo hostname new-name
# Neu (systemd)
sudo hostnamectl set-hostname new-name
=== Statische IP-Adresse setzen ===
# Ubuntu/Debian (netplan)
sudo vim /etc/netplan/01-netcfg.yaml
sudo netplan apply
# RHEL/CentOS (nmcli)
sudo nmcli connection add type ethernet con-name eth0 \
ifname eth0 ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 ipv4.method manual
# systemd-networkd
sudo vim /etc/systemd/network/10-eth0.network
sudo systemctl restart systemd-networkd
=== SSH für Root deaktivieren ===
sudo vim /etc/ssh/sshd_config
# Ändere: PermitRootLogin no
sudo sshd -t
sudo systemctl restart sshd
==== Hinweise ====
**KRITISCH bei Änderungen:**
- IMMER Backups vor Änderungen erstellen!
- ''/etc/fstab'' nicht fehlerhaft ändern → System startet nicht mehr!
- ''/etc/sudoers'' NUR mit ''visudo'' editieren!
- ''/etc/passwd'' und ''/etc/shadow'' synchronisieren!
- SSH-Konfiguration mit ''sshd -t'' testen!
- Netplan mit ''netplan try'' testen (Auto-Rollback)!
- NIEMALS /boot/grub/grub.cfg direkt editieren (Auto-generiert!)
**Best Practices:**
- ''/etc'' regelmäßig in Git versionieren (privates Repo)
- Automatische tägliche Backups: Cron-Job einrichten
- Änderungen dokumentieren: Wer, Wann, Warum
- Neue Konfiguration immer in separater Test-Umgebung prüfen
- SSH-Schlüssel separat backen und verschlüsseln
- ''sudo'' Logs überprüfen: ''sudo journalctl SUDO_COMMAND''
- Konfiguration versionen kontrollieren (z.B. Apache-Version in Kommentar)
==== Siehe auch ====
* [[sammlung:init_systeme|Init-Systeme]]
* [[sammlung:systemd|systemd]]
* [[sammlung:systemctl|systemctl]]
* [[sammlung:ssh|SSH]]
* [[sammlung:ufw|UFW Firewall]]
==== Quellen ====
* [[https://linux.die.net/man/5/sshd_config|sshd_config Manual]]
* [[https://linux.die.net/man/5/sudoers|sudoers Manual]]
* [[https://linux.die.net/man/5/fstab|fstab Manual]]
* [[https://wiki.debian.org/Debian_Filesystem_Hierarchy_Standard|Debian FHS]]
----
{{tag>konfiguration config /etc system administration linux}}
----