PDF-Version
Transcription
PDF-Version
Foliensatz 1 Grundlagen Inhalt • Aufgaben eines Systemadministrators • Arbeiten als root • Wichtige Verzeichnisse • procfs und sysfs • Geräte und das Gerätedateisystem • Kernelverwaltung • Hilfsmittel für Systemadministration • Puppet Typische Aufgaben eines Systemadministrators • Installation und Konfiguration von Servern und Arbeitsplatzcomputern (möglichst automatisiert, ev. über ein Netzwerk, wiederholbar) • Installation und Konfiguration von Software (System- bzw. Benutzerapplikationen, Konfiguration der automatischen Sicherheitsupdates, Erstellung systemweiter Standardkonfigurationen) • Benutzerverwaltung (Anlegen, modifizieren und löschen von Benutzern und Gruppen) • Behebung von Softwareproblemen • Backups (einrichten, kontrollieren, wiederherstellen) • Monitoring (überwachen von Serversoftware, Netzwerk, … auf Probleme bzw. Angriffe) • Erstellen einer Benutzungsordnung („Policy“, politischer Aspekt) • Tausch von fehlerhafter Hardware (einzelne Komponenten, ganzer Computer, Peripheriegeräte) Arbeiten als root • Systemadministration muss als Benutzer root durchgeführt werden, da nur dieser die nötigen Berechtigungen hat → birgt großes Gefahrenpotential! • Es ist empfehlenswert, nicht direkt als root einzuloggen, sondern über su oder sudo kurzfristig root zu werden (besser nachvollziehbar, wer wann etwas als root gemacht hat). • Die einzelnen Rechte von root können nicht (leicht) auf mehrere Benutzer aufgeteilt werden. Über den Befehl sudo kann man aber trotzdem relativ einfach andere Benutzer Systemadministrationsaufgaben durchführen lassen. • Unter Ubuntu hat der Benutzer root kein Passwort gesetzt, sondern es ist generell vorgesehen, mittels sudo Aufgaben als root auszuführen. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 1 von 16 sudo - Überblick sudo - Führt Befehle mit den Rechten eines anderen Benutzers aus. » Syntax: sudo [Optionen] [Befehl]. » Standardmäßig werden die Befehle als root ausgeführt. » Konfigurationsdatei ist /etc/sudoers (editieren mit visudo). » Man muss sein eigenes Passwort eingeben (nicht das des anderen Benutzers) und über die Konfigurationsdatei die Rechte zum Ausführen des Befehls haben. » Optionen: • -u Benutzername|UID → Befehl als dieser Benutzer ausführen • -i → Login-Shell ausführen • -l → Erlaubte Befehle anzeigen » $ sudo head -n 1 /etc/shadow root:*:15779:0:99999:7::: $ sudo -i [sudo] password for thomas: root@noweto:~# sudo - Konfigurationsdatei /etc/sudoers 1 • Über die Konfigurationsdatei /etc/sudoers wird spezifiziert, welcher Benutzer welche Befehle ausführen darf. Detaillierte Informationen zu der Datei findet man in der Manpage sudoers(5). • Die (vereinfachte) Syntax ist: wer wo = (als wer) was: • • „wer“: Man kann Benutzernamen („thomas“), UIDs („1000“) und auch zum Beispiel Gruppennamen („%gruppe“) verwenden. Der eingebaute Alias „ALL“ steht für alle Benutzer. • „wo“: Die Computer, auf denen die Befehle ausgeführt werden dürfen. Auch hier steht „ALL“ für alle Computer. • „als wer“: Angaben wie bei „wer“, aber bestimmt, als welcher Benutzer die Befehle ausgeführt werden dürfen. • „was“: Der Befehl und die Befehle, die ausgeführt werden dürfen. Wiederum steht „ALL“ für alle Befehle. Die Zeilen werden der Reihe nach abgearbeitet und die letzte, die zutrifft, wird verwendet. sudo - Konfigurationsdatei /etc/sudoers 2 Beispiele: • root,%sudo ALL=(ALL:ALL) ALL Der Benutzer „root“ und alle Benutzer der Gruppe „sudo“ dürfen auf allen Computern alle Befehle als jeder Benutzer und jede Gruppe (wegen „:ALL“) ausführen. • thomas praxis = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm Der Benutzer „thomas“ darf auf dem Computer „praxis“ den Befehl /bin/ls als „operator“ und /bin/kill sowie /usr/bin/lprm als „root“ ausführen. • thomas ALL = (root) /sbin/* ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 2 von 16 Der Benutzer „thomas“ darf auf allen Computern jeden Befehl im Verzeichnis /sbin/ als „root“ ausführen. sudo - Real Life Manche versuchen sudo auch im realen Leben (meist mit weniger Erfolg): XKCD Comic 149 Syntax von Konfigurationsdateien • Die Konfigurationsdateien unter Linux (Unix) sind (fast) alles Textdateien. Daher braucht man nur einen Texteditor (z.B. Vim), um sie zu bearbeiten. • Textdateien haben einige Vorteile: • • Wird die Datei korrupt, kann man den Großteil trotzdem richtig auslesen. • Man braucht nur einen Texteditor. • Man wird sie auf zukünftigen Computern ohne spezielle Hilfsmittel sicher lesen können. Ein großer Nachteil ist, dass es keinen Standard für die Syntax von Konfigurationsdateien gibt: • Tabellenstruktur (z.B. /etc/passwd) • Ausführbare Datei (z.B. /etc/bash.bashrc) • XML (z.B. /etc/fonts/fonts.conf) • Assoziation von Parametern /etc/systemd/system.conf) • Spezielles Format (/etc/sudoers) mit Werten, eventuell unterteil ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 in Sektionen (z.B. Seite 3 von 16 Wichtige Verzeichnisse 1 • Die Lage der Konfigurations-, Daten- und Systemdateien ist bei den meisten Linux-Distributionen FHS-konform. Ausnahmen sind z.B. NixOS und GoboLinux. • /boot/ → Wichtige Dateien für das Booten (z.B. Kernel und initiale RAM-Disk), Unterverzeichnis efi/ für den Zugriff auf die EFI-Partition • /dev/ → Gerätedateisystem für die benötigten Gerätedateien • /etc/ → Systemkonfigurationsdateien (werden an den entsprechenden Stellen genauer erklärt) • /lib/ → Systembibliotheken, u.a. auch für Kernel (modules/) und systemd (systemd/) • /proc/ → Datendateien des Kernels (auch Informationen zu Prozessen) Wichtige Verzeichnisse 2 • /run/ → Laufzeitdaten von Prozessen • /sys/ → Informationen über alle Geräte, die der Kernel kennt, und Möglichkeit, diese zu konfigurieren (Linux-spezifisch) • /tmp/ → Speicherort für temporäre Dateien aller Benutzer • /var/ → Veränderbare Datendateien: • /var/cache/ → Cachedaten von Applikationen (z.B. apt) • /var/log/ → Logdateien (bei Verwendung von klassischen Logging-Daemonen) • /var/run/ → Nur mehr Symlink auf /run/ • /var/spool/ → Spooling von Daten (Spool = Simultaneous Peripheral Operation On-Line, aufspulen/abspulen; Zwischenlagerung von Druckjobs, Mails, …) procfs • Das procfs (process filesystem) ist ein virtuelle Dateisystem, das auf vielen unixartigen Betriebssystemen eingesetzt wird und üblicherweise im Verzeichnis /proc eingehängt ist. • Es dient zur Anzeige und zur Änderung von Prozess- und Systeminformationen. Da die Informationen im Dateisystem dargestellt werden, können die Dateien darin mit den üblichen Befehlen bearbeitet werden (z.B. cat für das Anzeigen und echo zusammen mit der Ausgabeumleitung für das Ändern). • In der Kernel-Dokumentation des procfs findet sich eine genaue Auflistung der vom Kernel zur Verfügung gestellten Dateien und Verzeichnissen. Wir betrachten ein paar nützliche Teile davon. procfs - Allgemeine Informationen • /proc/cpuinfo → Informationen zu den vorhandenen CPUs • /proc/devices, /proc/bus/input/devices, vorhandenen Geräten • /proc/filesystems → Vom Kernel unterstützte Dateisysteme • /proc/loadavg → Informationen zur Systemauslastung • /proc/meminfo → Detailierte Speicherinformationen /proc/bus/pci/devices → ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Informationen zu Seite 4 von 16 • /proc/mounts → Liste der aktuell eingehängten Dateisysteme • /proc/net/ → Verzeichnis mit Netzwerkinformationen • /proc/stat → Allgemeine Statistiken • /proc/uptime → Betriebszeit des Systems • /proc/version → Kernelversion procfs - Prozessinformationen • Jedem Prozess ist über seine PID ein Verzeichnis unterhalb von /proc zugeordnet. Ein Prozess kann sich seine Informationen über den symbolischen Link /proc/self holen. • Einige nützlichen Dateien und Verzeichnisse in einem Prozessinformationsverzeichnis: • cmdline → Kommandozeilenargumente • cwd → Symbolischer Link zum aktuellen Arbeitsverzeichnis • environ → Umgebungsvariablen • status → Prozessstatus • fd → Verzeichnis mit Informationen zu Dateideskriptoren procfs - Kernelparameter 1 • Im Verzeichnis /proc/sys werden alle Kernelparameter aufgelistet. • Die Parameter können temporär durch direktes Schreiben in Verzeichnisses geändert werden oder mittels des Programms sysctl. • Um die Parameterwerte permanent zu speichern, können diese in der Konfigurationsdatei /etc/sysctl.conf (alte Variante) bzw. in *.conf-Dateien im Verzeichnis /etc/sysctl.d hinterlegt werden. • Die Einträge werden zeilenweise in diese Dateien geschrieben, Kommentare können mit # oder ; eingetragen werden: Dateien unterhalb dieses # Deaktivieren des Swapspeichers vm.swappiness = 0 • Beim Start des Systems werden die Parameterwerte aus diesen Dateien ausgelesen und in den Kernelspeicher geschrieben. Das wird bei systemd durch die Unit systemd-sysctl.service erledigt. procfs - Kernelparameter 2 • Einige interessante Parameter: • vm/swappiness → Beeinflusst die Benutzung des Swap-Speichers (auf 0 gesetzt, wird er nicht mehr benutzt) • kernel/sysrq → (De)aktivieren des magic SysRq key (erlaubt Tastenkombinationen, die der Kernel direkt verarbeitet, z.B. Neustart des Systems) • net/ipv4/tcp_syncookies → (De)aktivieren des SYN-Flood-Schutzes • net/ipv4/ip_forward Netzwerkschnittstellen → (De)aktivieren der Weiterleitung von ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Paketen zwischen Seite 5 von 16 • • net/ipv4/neigh/default/gc_thresh3 → Maximale Anzahl von Einträgen in der ARP-Tabelle Eine Dokumentation der Parameter findet sich in der Kernel sysctl-Dokumentation bzw. für Netzwerkparameter in IP-sysctl Dokumentation procfs - sysctl sysctl - Zeigt Kernelparameter an oder konfiguriert sie zur Laufzeit. » Optionen: • -a → alle Parameter anzeigen • -w → Parameter schreiben • -r REGEX → nur Parameter benutzen, auf die der reguläre Ausdruck zutrifft » $ sysctl vm.swappiness vm.swappiness = 0 $ sysctl -w vm.swappiness=50 vm.swappiness = 50 $ sysctl -a -r gc_thresh[123] net.ipv4.neigh.default.gc_thresh1 net.ipv4.neigh.default.gc_thresh2 net.ipv4.neigh.default.gc_thresh3 net.ipv6.neigh.default.gc_thresh1 net.ipv6.neigh.default.gc_thresh2 net.ipv6.neigh.default.gc_thresh3 = = = = = = 128 512 1024 128 512 1024 sysfs • Das sysfs ist ein virtuelles Dateisystem von Linux, welches Kernel-interne Informationen zu Geräten und Treibern darstellt bzw. sie auch verändern lässt. Es existiert seit der Kernelversion 2.5 und ist üblicherweise im Verzeichnis /sys eingehängt. • Durch die Einführung von sysfs wurden unter anderem Informationen, die früher verstreut im procfs zu finden waren, an einem Ort zusammengefasst. • Einige interessante Verzeichnisse/Dateien: • devices/ → Informationen zu allen Geräten (z.B. devices/system/cpu/cpu0/ für Informationen zur ersten CPU) • modules/ → Informationen zu Kernel-Modulen (z.B. modules/MODUL_NAME/parameters/* für Informationen zu den Parametern des Moduls MODUL_NAME) • power/ → Energiesteuerung Geräte und das Gerätedateisystem • Damit Applikationen auf Geräte zugreifen können, müssen diese Geräte über Dateien mit den Typen „block device“ oder „character device“ im Dateisystem abgebildet sein. Diese Gerätedateien liegen standardmäßig im Verzeichnis /dev. • Jedes Gerät wird über major und minor Zahlen eindeutig identifiziert. Die major Zahl gibt üblicherweise den Treiber, die minor Zahl das Gerät an. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 6 von 16 • Früher wurden die Gerätedateien bei der Installation einmal statisch mittels mknod angelegt. Der Nachteil dieser Vorgehensweise war, dass man alle möglichen Gerätedateien im Vorhinein anlegen musste. Das machte das /dev-Verzeichnis sehr unübersichtlich und schwerer benutzbar. • Daher wurden Lösungen gesucht, um das Anlegen der benötigten Gerätedateien zu automatisieren. Eine der ersten Lösungen war das devfs-Dateisystem, welches aber einige Nachteile hatte. • Derzeit wird das devtmpfs-Dateisystem für diesen Zweck verwendet. Es legt nur für die Geräte die benötigten Gerätedateien an, die bei der Ausführung aktuell im Kernel vorhanden sind. Weiters kann es alleine oder in Kombination mit udev verwendet werden. Geräte und das Gerätedateisystem - lsusb, lspci lsusb - Zeigt vorhandene USB-Geräte an. » Optionen: -t → physische USB-Gerätehierachie anzeigen, -v → Details anzeigen » $ lsusb | head -n 3 Bus 004 Device 039: ID 045e:07a5 Microsoft Corp. Bus 004 Device 037: ID 17ef:100a Lenovo ThinkPad Mini Dock Plus Series 3 Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub $ lsusb -t | head -n 4 /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M |__ Port 8: Dev 37, If 0, Class=Hub, Driver=hub/6p, 480M |__ Port 4: Dev 39, If 0, Class=Human Interface Device, Driver=usbhid, 12M lspci - Zeigt vorhanden PCI-Geräte an. » Optionen: -v → Details anzeigen, -k → Treiber für das Gerät anzeigen » $ lspci | head -n 3 00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09) 00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) 00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04) $ lspci -k -s 14.0 00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04) Subsystem: Lenovo Device 21fa Kernel driver in use: xhci_hcd Geräte und das Gerätedateisystem - lshw lshw - Zeigt detaillierte Hardwareinformationen an. » Es gibt auch eine GUI-Version lshw-gtk. » Die Ausgabe kann sowohl im Textformat als auch in HTML, XML oder JSON erfolgen. » Optionen: -short → Überblick über Gerätebaum ausgeben; -businfo → wie -short, aber mit BusInformation, -class → nur Geräte einer bestimmten Klasse anzeigen » $ lshw -short | head -n 6 H/W path Device Class Description ========================================================= system Computer /0 bus Motherboard /0/0 memory 15GiB System memory ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 7 von 16 /0/1 processor Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz $ sudo lshw -class processor | head -n 7 *-cpu product: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz vendor: Intel Corp. physical id: 1 bus info: cpu@0 size: 1399MHz capacity: 3300MHz Geräte und das Gerätedateisystem - udev • Durch das devtmpfs-Dateisystem werden die Gerätedateien in /dev automatisch erstellt. Allerdings werden dadurch keine (Userspace-)Ereignisse ausgelöst, Berechtigungen richtig gesetzt oder sinnvolle, permanente Namen für Geräte vergeben. Diese Aufgaben übernimmt udev. • udev wird über Dateien in den Verzeichnissen /lib/udev/rules.d, /run/udev/rules.d und /etc/udev/rules.d konfiguriert. Die in diesen Verzeichnissen liegenden *.rules Dateien enthalten die Regeln, wie der udev-Daemon auf die Kernelereignisse reagieren sollen. • Die Syntax dieser Konfigurationsdateien ist in udev(7) genau beschrieben. • Hier z.B. eine Regel, die einer bestimmten Netzwerkkarte immer den selben Namen zuweist: # PCI device 0x8086:/sys/devices/pci0000:00/0000:00:19.0 (e1000e) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="3c:97:0e:79:b8:0a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" • Mittels des Befehls udevadm können die Informationen von udev abgefragt werden, was aber im Normalbetrieb meist nicht nötig ist. Kernel - Allgemeines • Früher hat man den Linux-Kernel oft selbst kompiliert, um ihn auf die benutzte Hardware abzustimmen. Das richtige Konfigurieren und Kompilieren eines Linux-Kernels ist aber nicht einfach und es können leicht Fehler passieren. • Heutzutage wird üblicherweise der Kernel verwendet, den die Distribution liefert. Dieser ist getestet, beinhaltet die wichtigsten Komponenten und stellt alle sonstigen Komponenten als KernelModule zur Verfügung. Das ist dann ein generischer Kernel, der nicht speziell auf die persönliche Hardware zugeschnitten wurde, sondern auf unterschiedlichster Hardware läuft. • Wichtig: Alle Treiber, die der Kernel beim Booten benötigt, müssen entweder fix in den Kernel eingebunden oder in einer sogenannten Initial Ramdisk (wird als Root-Dateisystem benutzt bis das echte Root-Dateisystem geladen werden kann) vorhanden sein. • Der Kernel selbst und die zusätzlich benötigten Dateien (wie z.B. eine initiale RAM-Disk) liegen im Verzeichnis /boot. Üblicherweise heißt die Datei für den Kernel vmlinuz-RELEASE (wobei RELEASE die Kernel-Release ist). ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 8 von 16 Kernel-Module • Kernel-Module erlauben es dem Kernel, im Nachhinein zusätzliche Funktionalitäten wie z.B. neue Treiber oder neue Dateisysteme zu verwenden. Üblicherweise werden z.B. die Treiber für die Soundkarte oder die Netzwerkkarte als Kernel-Module zur Verfügung gestellt. • Kann der Kernel mit einem Gerät nicht umgehen/kommunizieren, so wird automatisch versucht, den richtigen Treiber (i.e. das richtige Kernel-Modul) für das Gerät zu laden. Das funktioniert mittlerweile sehr gut, d.h. nur in Ausnahmefällen muss man das richtige Kernel-Modul händisch laden. • Die Kernel-Module liegen unterhalb des Verzeichnisses /lib/modules/RELEASE. • Über die Konfigurationsdatei /etc/modules bzw. Dateien mit der Endung .conf im Verzeichnis /etc/modules-load.d/ kann man festlegen, welche Kernel-Module beim Start geladen werden sollen. Kernel - Sonstiges • Unter Ubuntu findet man den Standardkernel im Paket linux-image-generic und die zugehörigen Header-Dateien im Paket linux-headers-generic. • Weiters werden die initiale RAM-Disks über die initramfs-tools verwaltet, mehr Informationen dazu unter initramfs-tools(8). Dynamic Kernel Module Support (DKMS) • Früher hat es immer das Problem gegeben, dass man Kernel-Module, die nicht mit dem Kernel selbst mitinstalliert wurden, bei einem Kernelupdate selbst neu kompilieren musste. • Das Dynamic Kernel Module Support-System (DKMS) wurde aus diesem Grund 2003 bei Dell entwickelt. Es erlaubt unter anderem das automatische Kompilieren von Kernel-Modulen nach Installation eines neuen Kernels bzw. bei Installation eines Kernel-Moduls. • Damit das DKMS funktionieren kann, braucht man natürlich die Header-Dateien des verwendeten Kernels sowie die benötigten Programme zur Kompilation der Kernel-Module. • Unter Ubuntu wird das DKMS mit Hilfe des Pakets dkms installiert. Pakete, die Kernel-Module enthalten, die über DKMS verwaltet werden, haben üblicherweise das Suffix „-dkms“ im Paketnamen. Befehle zur Kernelverwaltung - uname, dmesg uname - Zeigt Systeminformationen an. » Nützliche Optionen: -a → alle Informationen anzeigen, -r → Kernel-Release anzeigen. » $ uname -a Linux noweto 4.2.0-27-generic #32-Ubuntu SMP Fri Jan 22 04:49:08 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux $ ls -l /lib/modules/`uname -r` | head -4 total 4380 lrwxrwxrwx 1 root root 39 Jän 22 08:14 build -> /usr/src/linux-headers-4.2.027-generic drwxr-xr-x 2 root root 4096 Jän 22 08:06 initrd ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 9 von 16 drwxr-xr-x 12 root root 4096 Jän 25 09:03 kernel dmesg - Zeigt den Kernel-Buffer an. » Ist zum Beispiel nützlich um zu sehen, ob beim Laden oder Entfernen eines Kernel-Moduls ein Problem aufgetreten ist. » Optionen: -e → lesbare Zeitstempel verwenden » $ dmesg -e | head [Feb16 19:32] usb [ +0,094753] usb [ +0,000007] usb [ +0,000004] usb -n 4 3-1.2: 3-1.2: 3-1.2: 3-1.2: new high-speed USB device number 6 using ehci-pci New USB device found, idVendor=0781, idProduct=5580 New USB device strings: Mfr=1, Product=2, SerialNumber=3 Product: Extreme Befehle für Kernel und Kernel-Module - lsmod, insmod lsmod - Zeigt die Liste der geladenen Kernel-Module an. » $ lsmod | head -5 Module Size Used by uvcvideo 80847 0 videobuf2_vmalloc 13056 1 uvcvideo videobuf2_memops 13202 1 videobuf2_vmalloc videobuf2_core 40513 1 uvcvideo insmod - Lädt ein Kernel-Modul. » Beachtet keine Abhängigkeiten, sondern versucht einfach, das gegebene Kernel-Modul zu in den Kernel zu laden. Besser ist modprobe. » Syntax: insmod Modulpfad [Optionen] Befehle für Kernel und Kernel-Module - rmmod, modinfo rmmod - Entfernt ein Kernel-Modul aus dem Kernel. » Sehr einfaches Programm; besser ist modprobe. » Syntax: rmmod Modulname modinfo - Zeigt Informationen zu einem Kernel-Modul an. » Syntax: modinfo Modulname » $ modinfo snd filename: alias: license: description: author: srcversion: depends: intree: vermagic: signer: sig_key: sig_hashalgo: parm: parm: parm: /lib/modules/4.2.0-27-generic/kernel/sound/core/snd.ko char-major-116-* GPL Advanced Linux Sound Architecture driver for soundcards. Jaroslav Kysela <perex@perex.cz> FBB791631E8C58B815FCEAD soundcore Y 4.2.0-27-generic SMP mod_unload modversions Build time autogenerated kernel key 94:21:CE:78:F7:DD:69:32:D7:A7:1D:3B:AB:89:BB:03:6A:FA:29:EB sha512 slots:Module names assigned to the slots. (array of charp) major:Major # for sound driver. (int) cards_limit:Count of auto-loadable soundcards. (int) ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 10 von 16 Befehle für Kernel und Kernel-Module - modprobe modprobe - Lädt oder entfernt ein Kernel-Modul. » Löst automatisch die Abhängigkeiten zwischen Kernel-Modulen auf (dazu wird eine von depmod generierte Datei verwendet), d.h. benötigte Kernel-Module werden automatisch geladen bzw. nicht mehr gebrauchte automatisch entfernt. » Es muss nicht der Pfad zu einem Modul angegeben werden, sondern nur der Modulname. » Modul-Parameter können als Argumente übergeben werden. Es werden dabei aber auch die Konfigurationsdateien im Verzeichnis /etc/modprobe.d/ beachtet (siehe man modprobe.d). » Optionen: -r → Entfernen eines Kernel-Moduls. » Syntax: modprobe [-r] Modulname [Optionen] » $ modprobe iwlwifi 11n_disable=2 Hilfsmittel für Systemadministration 1 • Es gibt einige Programme, über die zentral ein Linuxsystem administriert werden kann (z.B. Webmin). • Die Benutzung von Webmin (oder anderer solcher Programme) hat Vor- aber auch Nachteile: • Pro: Man muss die unterschiedlichen Konfigurationsdateien und deren Syntax nicht kennen, um Änderungen vorzunehmen. • Pro: Einheitliche Oberfläche, gut aufbereitet, leicht verständlich. • Contra: Die Version des Admin-Programms muss zu den Versionen der Programme passen, die man konfigurieren will. Ist ein Programm neuer und hat es Änderungen in der Syntax oder der Konfigurationsparameter gegeben, muss man warten, bis das Admin-Programm nachzieht. • Contra: Automatisches Ändern von Konfigurationsdateien über Tools kann gefährlich sein. • Contra: Man wird eventuell „abhängig“ von dem Admin-Programm. Hilfsmittel für Systemadministration 2 • Besser sind Konfigurationsmanagementprogramme (z.B. Puppet oder Chef), die meist aus einer Server- und einer Client-Komponente bestehen (siehe Vergleich von mehreren dieser Programme auf Wikipedia). • Diese erlauben es, einen Computer reproduzierbar in einen bestimmten Zustand zu versetzen. Dazu wird der gewünschte Zustand mittels Konfigurationsdateien definiert und das Programm weiß, was es ändern muss, um diesen Zustand zu erreichen. • Sobald man mehrere Server/Arbeitsplatzcomputer verwalten muss, sollte man sich überlegen, ob man nicht so ein Programm einsetzen sollte. • Einige der Programme (z.B. Puppet und Chef) erlauben auch die Ausführung ohne Serverdienst. Das ist z.B. sehr nützlich, um nach einer Neuinstallation des eigenen Computers schnell wieder alles richtig konfiguriert zu haben. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 11 von 16 Puppet • Bei Puppet wird der gewünschte Zustand, in dem sich das System befinden soll, mit Hilfe einer deklarativen Sprache in Dateien mit der Endung .pp (sogenannten Manifesten) definiert. Die Sprache erlaubt unter anderem die Definition von Ressourcen, die auf dem System (nicht) vorhanden sein sollen, wobei konditionelle Ausdrücke verwendet werden können. • Die Client-Software von Puppet interpretiert das Manifest und erstellt daraus einen Katalog, der spezifisch für das System ist. Der Inhalt des Katalog wird dann mit dem aktuellen Zustand des Systems abgeglichen und nötige Änderungen werden durchgeführt. • Die Dokumentation zu Puppet ist sehr ausführlich, beginnen sollte man mit Introduction to Puppet oder mit der Learning VM. Puppet - Nutzungsvarianten • Puppet kann sowohl mit als auch ohne Server betrieben werden. Beide Varianten haben Vor- und Nachteile. Werden viele System mit Puppet verwaltet, sollte man die Server-Variante verwenden. • Zum Betrieb ohne Server braucht man nur das Paket puppet-common installieren. Diese Variante ist zum Beispiel ideal für die Konfiguration eines oder weniger Systeme (z.B. zur Konfiguration des eigenen Computers). • Für den Server-Betrieb benötigt man das Paket puppetmaster für den Server und das Paket puppet für die Clients. Nach der Installation läuft der Server mit einer Standardkonfiguration. • Das globale Konfigurationsverzeichnis /etc/puppet enthält folgende Dateien: • • auth.conf → Allgemeine Zugriffssteuerung für die Serverkomponente • fileserver.conf → Zugriffssteuerung für die Dateiserverkomponente • puppet.conf → Konfigurationsdatei Die Konfigurationsdatei enthält Blöcke für die verschiedenen Komponenten (agent, master, …), in denen die Konfigurationsoptionen gesetzt werden können. Puppet - Facter • Puppet benutzt das Programm Facter, um Informationen über ein System herauszufinden. Wie Puppet ist auch Facter in Ruby implementiert und kann um zusätzliche Informationsmodule erweitert werden. • Die durch Facter gewonnen Informationen können in Manifesten als Variablen und somit auch in Bedingungen benutzt werden. • Beispielausgabe: $ facter | head -n 5 architecture => amd64 augeasversion => 0.10.0 boardmanufacturer => Oracle Corporation boardproductname => VirtualBox boardserialnumber => 0 ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 12 von 16 Puppet - Module und Umgebungen • Neben der Definition von Ressourcen in Manifesten können auch Dateien und Templates zur Verwendung hinterlegt werden. • Um die Wiederverwendbarkeit zu erhöhen, können zusammengehörige Manifeste, Dateien und Templates in Module verpackt werden. • In der aktuellen Version von Puppet können einzelne Manifeste und „lose“ Dateien und Templates weiterhin verwendet werden, allerdings ist das gesamte System nun primär auf Module ausgelegt. • Es gibt mittlerweile schon sehr viele vorgefertigte Module, die man einbinden kann. Die Webseite Puppet Forge wird von den Entwicklern von Puppet betreut und enthält eine Vielzahl an Modulen. • Weiters unterstützt Puppet Umgebungen (Environments), wobei jede Umgebung unterschiedliche Module verwenden kann. Damit ist es z.B. leicht, eine Testumgebung für nur ein paar Computer aufzusetzen. Puppet - Ressourcen • Ressourcen definieren über Attribute, wie das System auszusehen hat. Es müssen dabei nicht alle Attribute angegeben werden. Falls benötigte Attribute fehlen, benutzt Puppet, wenn möglich, die systemabhängigen Standardwerte dafür. Ansonsten wird eine Fehlermeldung produziert. • Wichtig: Nur wirklich in einer Ressource definierte Attribute werden über Puppet verwaltet, alle anderen Attribute bleiben unverändert! • In Puppet sind schon die wichtigsten Ressourcetypen inkludiert, z.B. zur Paketverwaltung (package), Benutzer- und Gruppenverwaltung (user und group) und Dateiverwaltung (file). • Für jede Plattform gibt es unterschiedliche Provider für einen Ressourcetyp. Puppet erkennt üblicherweise automatisch den zu benutzenden Provider, man kann aber auch einen spezifizieren. Diese Provider sind unterschiedlich gut, d.h. manche unterstützen mehr Operationen als andere. Puppet - Ressourcendeklarationen • Jede Ressource besitzt immer einen Typ, einen Titel und optional ressourcespezifische Attribute. • Zusätzlich besitzt jeder Ressourcetyp ein spezielles namevar Attribut, um eine Ressource eindeutig identifizieren zu können. Wird dieses namevar Attribute nicht gesetzt, so wird standardmäßig der Wert des Titels dafür genommen. Über die Kombination Ressourcetyp/namevar kann die Ressource später eindeutig referenziert werden. • Die Syntax für eine Ressourcendeklaration sieht so aus: type {'title': attribute => value, } • Zusätzlich kann man bei jedem Ressourcetyp sogenannte Metaparameter (wie Attribute) verwenden, die es z.B. erlauben, Abhängigen zwischen Ressourcen zu definieren. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 13 von 16 Puppet - Beispielmanifest case $operatingsystem { centos, redhat: { $service_name = 'ntpd' } debian, ubuntu: { $service_name = 'ntp' } } package { 'ntp': ensure => installed } service { 'ntp': name => $service_name, ensure => running, enable => true, subscribe => File['ntp.conf'], } file { 'ntp.conf': path => '/etc/ntp.conf', ensure => file, require => Package['ntp'], source => "puppet:///files/ntp.conf", } Um dieses Manifest anzuwenden, muss noch die Datei ntp.conf im aktuellen Vereichnis angelegt und folgenden Befehl ausgeführt werden: $ puppet apply --fileserverconfig=<(echo -e "[files]\npath `pwd`\nallow *") manifest.pp Puppet - ohne Server • Einzelne Änderungen an Ressourcen können über puppet resource gemacht werden bzw. kann über diesen Befehl der Zustand einer Ressource als Puppet-Manifest ausgegeben werden. $ puppet resource user root shell=/bin/sh notice: /User[root]/shell: shell changed '/bin/bash' to '/bin/sh' user { 'root': ensure => 'present', shell => '/bin/sh', } • Der Befehl puppet apply wird benutzt, um ein ganzes Manifest auf ein System anzuwenden. Dazu wird nicht unbedingt ein Server benötigt, man kann auch eine Manifestdatei angeben: $ puppet apply manifest.pp • Wenn man seine Manifeste in Module gegliedert hat, muss man über die Option --modulepath diesen Pfad angeben, damit Puppet sie findet. • Zum Testen sind die Optionen --test (mehr anzeigen) und --noop (nichts wirklich ändern) nützlich. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 14 von 16 Puppet - mit Server • Die Standardserverkonfiguration nach der Installation des Pakets reicht für wenige Clients aus (bei vielen Clients sollte man einen anderen als den eingebauten Webserver Webrick verwenden). • Damit ein Client weiß, wie der zu nutzende Server heißt, muss man in der Hauptkonfigurationsdatei im Block agent die Variable server auf die IP-Adresse (oder den DNS-Namen) des Servers setzen. • Die Kommunikation zwischen Client und Server wird über SSL verschlüsselt und jeder Client braucht ein gültiges, vom Server signiertes Zertifikat, um einen Katalog zu bekommen. Daher wird beim erstmaligen Aufruf von puppet agent ein Zertifikatsfehler ausgegebgen. • Um diesen Fehler zu beheben, muss am Server die Zertifikatsanfrage bestätigt und das ClientZertifikat mittels puppet cert sign HOSTNAME signiert werden. Danach sollte der Client ohne Problem auf den Server zugreifen können. • Bei einer Anfrage des Clients interpretiert der Server die in /etc/puppet/environments/production/manifests/ definierten Manifeste und erstellt daraus einen Katalog, der an den Client zurückgesandt und auf das System angewandt wird. Dateiverwaltung mit Puppet • Dateien werden in Puppet über die Ressource file verwaltet. • Unter Ubuntu wird standardmäßig der Provider posix verwendet. • Wichtige Attribute: • path: Der absolute Pfad der Datei (falls nicht angegeben, wird der Titel verwendet). • ensure: Der gewünschte Zustand (present, absent, file, directory oder link) • backup: Spezifiziert, ob und wie ein Backup gemacht werden soll (false, Zeichenkette beginnend mit Punkt oder sonstige Zeichenkette) • content: Der Inhalt der Datei (nicht gleichzeitig mit source verwendbar). • source: Eine URI, deren Inhalt verwendet werden soll (lokale Datei oder vom Puppetserver). • target: Linkziel. • owner: Der Besitzer der Datei. • group: Der Gruppenbesitzer der Datei. • mode: Die Rechte der Datei. Dateiverwaltung mit Puppet - Beispiele • Anlegen eines Verzeichnisses: file {'/var/local': ensure => directory} • Erstellen eines symbolischen Links: file {'/var/local/test': ensure => link, target => '/etc/modules' } • Erstellen einer Datei mit einem bestimmten Inhalt: file {'/etc/my.secret': ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 15 von 16 owner => root, group => root, mode => 600, content => 'My secret secret' } • Kopieren einer Datei von der Dateisektion ‚common‘ vom Puppetserver: file {'/etc/ssh/sshd_config': ensure => present, owner => root, group => root, mode => 644, source => ["puppet:///common/sshd_config.$fqdn", 'puppet:///common/sshd_config'] } Puppet - Weitere Beispiele Es werden in dieser Lehrveranstaltung immer wieder Beispielmanifeste verwendet, um zu zeigen, wie man mit Puppet Aufgabenstellung lösen könnte. Zum Beispiel: • Anlegen eines lokalen Benutzers und einer lokalen Gruppe (Ressourcen user und group) • Installation von Paketen, die verschiedene Namen unter verschiedenen Distributionen haben (Ressource package) • Verwenden eines Moduls zur Einrichtung eines OpenSSH-Servers • Ändern von Dateien mit Hilfe von Augeas ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-02 17:10 Seite 16 von 16