tst - ACA
Transcrição
tst - ACA
Kurze Einführung in die Linux-Systemverwaltung mit RHEL/CentOS 7 Version vom 2016-01-21 (C) 2005-2016 Chris Mair (CC-BY) [email protected] http://www.1006.org 1 2 Unix 1971. Bell Labs (Teil von AT&T) präsentiert Unix (Dennis Ritchie und Ken Thompson) • läuft auf unterschiedlicher Hardware (Programmiersprache C); multitasking- und multiuser-fähig 1978. University of California at Berkeley • die Universität entwickelt eine eigene Unix-Version: die Berkeley Software Distribution (BSD) unter einer sehr liberalen Lizenz ("hier ist der Sourcecode, mach' damit was du willst") - OS X ist ein BSD-Urenkel! 1980. Unix-Clones • verschiedene Hersteller bieten Unix-Clones an: SunOS/Solaris, HP-UX, AIX, IRIX, Digital OSF, SCO, Xenix, NeXTSTEP 1984. Projekt GNU • Richard Stallmann beginnt mit der Entwicklung seiner Unix-Variante (GNU) unter der GPL (GNU General Public License) und begründet damit das Free-Software-Konzept ("hier ist der Sourcecode, mach' damit was du willst, aber wenn du ihn weitergibst oder erweiterst, musst Du die selben Rechte weitergeben") 3 Linux 1991. Linux • Linus Torvalds schreibt einen Unix-kompatiblen Betriebssystem-Kern ("kernel") namens Linux und stellt den Source-Code unter der GPL zur Verfügung • aus GNU + Linux ergibt sich GNU/Linux: ein komplettes Betriebssystem Aktueller Status • durch die GPL muss jeder jeder Hersteller, der Linux-Driver und Anpassungen für die eigene Hardware entwickelt diese wiederum unter die GPL stellen, so dass (gute) Zugaben den Weg zurück in den offiziellen Kernel finden • dadurch läuft Linux auf nahezu jeder Hardware von den kleinsten eingebetteten Systemen bis zu den größten Super-Computern und wird von so gut wie allen Herstellern eingesetzt • jeder von euch hat vermutlich mehrere Linux-Systeme zu Hause: einen Router (Beispiel Netgear), ein Navi (Beispiel Tomtom), ein Smartphone (Beispiel: alle AndroidGeräte) oder irgendein anderes Gadget (Beispiel: alle Tizen-Geräte z.B. von Samsung) • wenn ihr im Internet seid, verwendet ihr indirekt Linux (Beispiele: die Datencenter von Google, Facebook oder AWS), der größte Teil des WWW läuft mit Linux 4 Freie Software / Open Source Software Freie Software ist eine ältere (GNU, 1984) und Open Source Software ist eine jüngere (1997) Definition von Softwarelizenzen, die sich in 2 Punkten wesentlich von den proprietären EULAs unterscheiden. Die Lizenz räumt dem Lizenznehmer wesentlich mehr Rechte ein: • die Software darf beliebig eingesetzt werden; der Sourcecode darf eingesehen und verändert werden; Sourcecode und Änderungen dürfen weitergegeben werden • speziell bei der GPL: falls eine Änderungen weitergegeben wird, muss diese ihrerseits unter der GPL lizensiert werden Das Entwicklungsmodell ist grundsätzlich anders: • meist viele beteiligte Parteien; stark dezentrale Entwicklung; auch kleine und mittlere Unternehmen können komplexe Projekte angehen ohne bei 0 beginnen zu müssen • neben dem Linux Kernel und der Software von GNU sind Compiler und Umgebungen für Programmiersprachen, Developer-Frameworks, Firewalls, Datenbanksysteme und alles was mit dem WWW zu tun hat Bereiche, in denen FS/OSS marktführend ist Der Begriff Freie Software wird gerne im ethischen Zusammenhang verwendet, Open Source Software eher im kommerziellen Umfeld (die legale Bedeutung ist die selbe). 5 Linux Distributionen In diesem Modul befassen wir uns mit Linux als Server-Betriebssystem Ein solches System besteht nicht nur aus dem Linux-Kernel, sondern aus tausenden einzelnen Software Paketen • • • • wer wählt die geeigneten Pakete aus und testet sie? wer zertifiziert Hardware und eventuell proprietäre Software? wer sorgt für Updates, die genau auf das installierte System abgestimmt sind? wer liefert Support? Distributoren - es gibt zwei große Familien (und mehrere kleinere): • • die Distributionen von Red Hat (RHEL/CentOS, Fedora) + Derivate Debian + Derivate, darunter das bekannte Ubuntu Für den Servereinsatz empfehlen sich Distributionen mit Long-Term-Support • • RHEL / Centos Debian LTS oder Ubuntu LTS Server 6 CentOS 7 Red Hat Enterprise Linux (RHEL) ist prima geeignet für den Produktionseinsatz im Unternehmen: • offizieller Support (Red Hat ist ein globales Unternehmen mit 7300 Mitarbeitern, darunter ein Sterzinger ;) • • lange Releasezyklen (2-3 Jahre) und Lebensdauer (10 Jahre Updates) Zertifizierung durch Hardware-Hersteller (wie etwa HP oder Dell) und Hersteller proprietärer Software (etwa Oracle DB) Wir können CentOS verwenden: CentOS ist ein von Red Hat abgesegnetes ComunityProjekt, das eine unbranded Version von RHEL heraus bringt - ideal zum Ausprobieren und für alle, die nicht auf offiziellen Support angewiesen sind. • Red Hat Enterprise Linux: http://www.redhat.com/ • Projekt CentOS: http://www.centos.org/ Falls Ihr in euren Firmen Debian oder Ubuntu verwenden möchtet: prima, aber bitte immer auf die LTS Versionen achten! Eine Server ohne Updates geht gar nicht. 7 Installation 1/2 Die Installation erfolgt in einer virtuellen Umgebung wie z.B.VMWare Player oder Virtual Box (aber nicht Virtual PC). Die Maschine sollte folgende Eigenschaften haben und lokal abgelegt werden (also nicht auf den Fileserver der Schule - Vorsicht wenn euer Profil auf dem Fileserver liegt): • • • 1 CPU-Kern Festplatte mit 10 GB + CD-Laufwerk (virtuell) 1 NIC ( im "bridged"-Modus, damit wir gegenseitig darauf zugreifen können). Holt euch von meinem lokalen Webserver die CentOS 7 Boot-ISO (376 MB), verbindet sie mit dem virtuelle CD-Laufwerk, bootet die Maschine und wählt "Install CentOS 7"! Ich empfehle dringend die Sprache sowohl der Installation als auch des Systems auf USEnglisch zu lassen... Zeitzone: "Europe/Rome" und Keyboard: was ihr wollt, vermutlich "german". Security Policy: "Apply Security Policy" auf "off". Network (unten): ihr müsst die Ethernet-Schnittstelle aktivieren, Standard-Einstellung ist DHCP - das passt. Hinweis: manchmal liefert der DHCP Server der Schule nicht genug IP-Adressen, in dem Fall improvisieren wir ;) 8 Installation 2/2 Installation Source: "On the Network" http://10.0.0.1/c7/ (wir installieren über's LAN von meinem lokalen Webserver). Software Selection: aus den Installationsprofilen wählen wir aus: "Basic Web Server". Add-Ons brauchen wir vorerst keine. Da ist noch ein Hinweis: Automatic Partitioning: das ist OK, die Platte wird automatisch partitioniert. Zur Bestätigung einfach anklicken und "done" auswählen. KDump: das schalten wir ab. Beginn der Installation. Währenddessen kann man das Root-Passwort eingeben (wählt etwas einfaches, das Ihr in 1 Woche noch wisst ;). Zusätzliche Benutzerkonten brauchen wir vorerst keine. Mit diesem Setup müssen 483 Pakete installiert werden, was normalerweise nur wenige Minuten dauert, aber da wir alle im gleichen Netz sind, kann's etwas länger dauern... Zeit für einen Kaffee :) Nach der Installation rebooten wir die Maschine. Da wir keine GUI installiert haben, werden wir mit einer Eingabeaufforderung begrüßt: ihr wisst das Root-Passwort noch, nicht wahr? Falls nicht, kann man sich das über den Bootloader resetten (fragt mich). 9 Linux ohne GUI Wir setzen Linux als Server ein, wo es üblich ist ohne GUI zu arbeiten. Der einzige Zugang zum System erfolgt dann über das SSH Protokoll: dieses erlaubt es eine Shell zu öffnen und alle Systemverwaltungsaufgaben auf der Kommandozeile remote zu erledigen! Das ist vielleicht nicht sehr anfänger-freundlich, dafür aber sehr profi-freundlich: alle anfallenden Aufgaben kann man sich in Skripten zusammen fassen, automatisieren und in Sekundenschnelle ganze Serverfarmen verwalten. Microsoft hat das auch erkannt und vor einigen Jahren im Window Server die Kommandozeile massiv aufgewertet (Powershell!) In unserer neuen CentOS-Installation läuft bereits ein SSH-Server. Linux und OS-X Benutzer haben Glück: ein SSH-Client ist auf ihren Systemen bereits vorinstalliert. Windows Benutzer müssen sich erst mal einen SSH-Client nachinstallieren: es gibt mehrere Clients für Windows: empfehlenswert ist PuTTY (Download von meinem lokalen Webserver). Ihr könnt nun in der virtuellen Console einloggen um eure IP-Adresse rauszukriegen (Befehl: ifconfig ). Danach könnt Ihr euch mit PuTTY als Benutzer root über SSH anmelden und braucht die virtuelle Console nicht mehr. Im PuTTY Fenster wird mit der linken Maustaste ausgewählter Text übrigens automatisch kopiert und mit der rechten Maustaste eingefügt. CTRL-C und CTRL-V klappen hier nicht, weil die Tasten zum Server weiter geschickt werden (wo sie eine andere Bedeutung haben). 10 Linux mit GUI (wir verwenden keine) Im GUI-Betrieb (graphical user interface) benutzt Linux das X Window System als graphisches Subsystem und Gnome, KDE, Unity, o.a. als graphische Benutzeroberflächen. Linux arbeitet mit mehreren "Consolen": Umschaltung erfolgt mit CTRL-ALT-Fx. Normalerweise ist F1 - F6 den Textconsolen zugewiesen, F7 dem X Window System. Auch unter Gnome ist die Shell nach wie vor das mächtigste Werkzeug zur Systemverwaltung. Unter Gnome kann man eine Shell mit der Anwendung GnomeTerminal öffnen. Unter Unix GUIs ist es traditionell üblich Text mit der linken Maustaste zu kopieren und mit der mittleren Maustaste einzufügen. Moderne Anwendungen benutzen auch das bekannte CTRL-C und CTRL-V, mit einer Ausnahme: im Gnome-Terminal, lauten die Tastenkombinationen SHIFT-CTRL-C und SHIFT-CTRL-V , weil CTRL-C und CTRL-V dort ja eine andere Bedeutung haben. Dank der Netzwerktransparenz des X Window Systems ist es möglich graphische Anwendung auf dem entfernten Rechner zu starten während die graphische Darstellung auf dem lokalen Rechner erfolgt und zwar nicht nur den ganzen Desktop, sondern auch einzelne Fenster (das geht übrigens auch mit OS X als Client). 11 Erste Schritte Befehle zu Systeminformationen: free df w uptime # # # # freier Hauptspeicher (RAM) freier Plattenplatz Liste der eingeloggten Benutzer Uptime und Systemlast Goldene Regel Nr. 1 für angehende Systemverwalter: niemals als root arbeiten, wenn es nicht unbedingt nötig ist! Immer mit einem nicht privilegiertes Benutzerkonto arbeiten. useradd name passwd name su name # # # # # # Benutzer <name> zufügen... ...und Password von <name> setzen neue Shell als Benutzer name öffnen - (das Minuszeichen) ist wichtig um die Umgebungsvariablen des Zielbenutzers zu übernehmen! exit CTRL-D # neue Shell wieder verlassen # wie exit 12 Das DL 196/2003 und sudo Wir haben nun ein nicht privilegiertes Benutzerkonto. Mit dem können wir uns anmelden aber nicht viel auf dem System machen. Um Verwaltungsaufgaben zu erledigen können wir mit su - root eine Root-Shell öffnen... dafür müssen wir allerdings das Root-Password kennen. Das ist unpraktisch und erfüllt die Auflagen des Datenschutz-Gesetzes nicht: Mitarbeiter sollten sich keine Passwörter teilen. Um dieses Problem zu lösen, können wir das eben erstellte Benutzerkonto der Gruppe "wheel" zuweisen: usermod -G wheel name Die Gruppe "wheel" hat unter RHEL/CentOS sogenannte sudo-Rechte. Der Benutzer name kann nun mit folgendem Befehl eine Root-Shell öffnen (dazu muss er oder sie nur sein eigenes Passwort eingeben und das wird gecached): sudo -i Viele Systeme gehen sogar soweit, dass sie den Benutzer Root gar kein Passwort zuweisen (er kann also nicht direkt einloggen) sondern nur mit sudo-Benutzern arbeiten (Ubuntu und OS X zum Beispiel!) 13 Shell Grundlagen 1/4 Grundlegende Befehle zur Dateiverwaltung: ls ls -l ls -al cd verz cd /etc cd etc pwd # Verzeichnis Liste anzeigen # idem, ausführlich # idem, auch “versteckte” Dateien # ins Verzeichnis verz wechseln # absolute Pfadangabe # relative Pfadangabe # in welchem Verzeichnis befinde ich mich gerade? wget http://10.0.0.1/gedicht.txt # gedicht.txt von einem Webserver downloaden cat cp mv rm touch grep wc file file1 file2 file1 file2 file file str file file # # # # # # # file ausgeben (anzeigen) file1 nach file2 kopieren (-r für rekursiv) file1 nach file2 umbenennen o. verschieben file löschen(-r für rekursiv, Vorsicht!) leeres file anlegen oder Zeitstempel updaten str in file suchen (-i case insensitive, -v invertiert) Zeilen, Worte und Buchstabe in file zählen 14 Shell Grundlagen 2/4 Dateien komfortabel betrachten tail file less file # Ende von file anzeigen (-f für live update) # Datei file interaktiv betrachten (q-Taste um auszusteigen) Dateien suchen (allgemeine Form: find wo was): find /etc -newer file find /home -iname "*txt" find /home -type f find /home -type d # # # # # Dateien in /etc neuer als file finden Dateien in /home mit Endung "txt" finden, die "" sind wichtig um * zu schützen! alle Dateien in /home finden alle Verzeichnisse in /home finden Dateien schnell suchen # Dateien, die <str> enthalten finden # Index jetzt erneuern (als root ausführen) locate str updatedb Dateityp erkennen # Dateityp von file erkennen file file 15 Shell Grundlagen 3/4 Unix Prozess Verwaltung ps aux top kill pid kill -9 pid # # # # alle Prozesse anzeigen (Optionen: aux ) alle Prozesse interaktiv anzeigen (mit q aussteigen) Prozess mit PID <pid> abbrechen idem, aber ohne Reaktionsmöglichkeit (d.h. crash!) Verzeichnisse und symbolische Verknüpfungen . .. ~ mkdir verz rmdir verz ln -s datei link # # # # # # aktuelles Verzeichnis übergeordnetes Verzeichnis Heimatverzeichnis Verzeichnis verz erstellen Verzeichnis verz löschen symbolische Verknüpfung von link nach datei Hilfe ;-) man befehl # zeigt die Handbuchseite zu Befehl <befehl> an 16 Shell Grundlagen 4/4 Shell Ein- und Ausgabe Umleitung # # # # # prog > file prog >> file prog < file prog1 | prog2 prog 2> file Ausgabe von prog in file umleiten Ausgabe von prog in file umleiten (hinzufügen) file in die Eingabe von prog leiten Ausgabe von prog1 in die Eingabe von prog2 leiten Fehlerausgabe von prog in file umleiten Spezielle Zeichen in der Shell • das Leerzeichen trennt Befehle und Argumente voneinander. Um etwa ein Verzeichnis mit einem Leerzeichen im Namen anzulegen muss ich so vorgehen: mkdir "My Documents" • der Stern ist eines der Zeichen, die zum file globbing dienen - die Shell ersetzt ihn mit einer Liste von "passenden" Dateinamen. Z.B.: echo /home/* • wichtig ist zu verstehen, dass die Shell den Stern ersetzt, nicht der Befehl. Daher klappt auch das Schützen des Sterns mit "*" - die Shell ersetzt dann nichts. 17 Texteditoren/vi Texteditoren sind unter Unix für Systemverwalter sehr wichtig, da viele Verwaltungsaufgaben über die Shell und mit Konfigurations- und Skriptdateien erledigt werden. Für die Shell sind sowohl sehr einfach Texteditoren (wie nano) als auch sehr mächtige (wie emacs) verfügbar. Der Standardeditor in der Unix Befehlszeile ist aber nach wie vor vi, bzw. sein Nachfolger vim. Um eine neue Datei namens test.txt zu erstellen gebt Ihr ein: vim test.txt # Vorsicht, nach Enter keine Taste betätigen! Es gibt 2 Modi unter vim: der Editor startet im Befehlsmodus; mit i wechselt man in den Eingabemodus; mit ESC zurück in den Befehlsmodus. Nur im Eingabemodus darf man drauf los tippen! Im Befehlsmodus wird jede Eingabe als Befehl interpretiert, Beispiele: :w :q # abspeichern # aussteigen :wq :q! # abspeichern und aussteigen # Änderungen verwerfen Man lernt vim am besten mit dem eingebauten Tutorial: vimtutor de 18 Und wo ist jetzt mein Basic Web Server? Er läuft noch nicht... ;) • Services werden neuerdings mit systemd gesteuert (in RHEL/CentOS seit Version 7): systemctl start httpd.service systemctl enable httpd.service • # startet httpd (jetzt) # automatischer Start beim Boot Unter älteren RHEL/CentOS 5 Versionen hat man noch die folgenden Befehle verwendet: service httpd start # startet httpd (jetzt) chkconfig httpd on # automatischer Start beim Boot Er läuft immer noch nicht... :( • RHEL/CentOS 7 richtet standardmäßig eine Firewall ein, die nur Zugriff auf Port 22 (SSH) erlaubt. Um Port 80 (HTTP) zu öffnen, können wir eingeben: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload • Oder wir schalten die Firewall gleich ganz aus: systemctl stop firewalld.service systemctl disable firewalld.service 19 Und wie krieg ich meine Webseite drauf? Der Webserver ist jetzt über HTTP erreichbar und grüßt die Besucher mit einer Standardseite. Die Webserversoftware ist übrigens der bekannte Apache httpd. Der Webserver liefert standardmäßig Dateien unter /var/www/html/ aus. Erstellt doch dort einmal mit vim eine Datei namens index.html und schreibt einen Gruß rein! Man kann Webseiten natürlich nicht am Server mit vim erstellen (oder zumindest würden die meisten Leute das nicht praktisch finden...). Wie können wir Dateien auf den Server laden? Früher ging das mit FTP. Heute verwendet man meist SFTP. Dieses Protokoll wird von unserem SSH-Server gleich mit unterstützt - wir brauchen also gar keinen neuen Service dafür! Linux und OS-X bringen einen SFTP-Client bereits mit. Windows-Benutzer müssen nachrüsten: die beliebtesten SFTP-Clients für Windows sind Filezilla und WinSCP (beide Downloads auf meinem lokalen Webserver). • Probiert nun ein paar HTML-Dateien und oder Bilder hochzuladen und seht euch das Ergebnis im Webbrowser an! 20 Dateien und Zugriffsrechte 1/2 Die Metadaten und Zugriffsrechte einer Datei sind: Dateityp (-: normale Datei, d: dir, c,b: device file, ...) rwx Rechte des Benutzers rwx rwx Benutzer, dem die Datei gehört rwx rwx Rechte der Gruppe user Gruppe, der die Datei gehört group rwx Rechte für alle anderen rwx steht dabei für die 3 Rechte: r (read): Leserecht Dateien bzw. ls-Recht Verzeichnisse w (write): Schreibrecht Dateien bzw. create/mv Recht in Verzeichnissen x (execute): Ausführrecht bei Dateien, bzw. cd-Recht bei Verzeichnissen Es gibt noch drei Spezialrechte (set-uid, set-gid und sticky)... Root ist wie üblich allmächtig und diesen Rechten nicht unterworfen. 21 Dateien und Zugriffsrechte 2/2 Jedes Recht ist durch die Zahlen von 0 - 7, entsprechend dem Bit-Muster des rwx-Feldes bestimmt, wobei 4-7 typische Werte sind: 4 5 6 7 = = = = r-r-x rwrwx Mit chmod können die Dateirechte verändert werden: chmod ugo file u = 0 ... 7 steht für die Rechte des Besitzers (User) g = 0 ... 7 steht für die Rechte der Gruppe (Group) o = 0 ... 7 steht für die Rechte aller anderen (Others) Mit der Option -R erfolgt die Rechteänderung rekursiv auf alle Unterverzeichnisse. Mit chown können der Dateibenutzer und die Gruppe verändert werden:: chown user:group file 22 SSH 1/2 Die SSH-Software OpenSSH macht es möglich auf einem entfernten Rechner eine Shell zu benutzen oder Befehle auszuführen, Dateien zwischen Systemen zu transferieren, Netzwerktraffic zu tunneln ("lightweight VPN") u.a.m. Aus Sicherheitsgründen hat SSH die “klassischen” Werkzeuge telnet, rlogin und auch ftp weitest gehend abgelöst. Der OpenSSH Dienst (sshd) gehört zur Grundinstallation jeder Linux Distribution und läuft standardmäßig out of the box (bei RHEL/CentOS 7 in in allen Installationsprofilen außer "Minimal"). Steht der Server im Internet ohne Zugangsbeschränkung per Firewall, ist es meist eine gute Idee die Konfiguration etwas einzuschränken (z.B. Parameter PermitRootLogin und AllowUsers, evtl. auch Port): man sshd_config vim /etc/ssh/sshd_config systemctl reload sshd.service # Manual Konfiguration # Konfiguration anpassen # Konfigurationsänderung übernehmen Einige Beispiele, wie man den Dienst nutzen kann: ssh user@rechner sftp user@rechner scp file1 user@rechner:file2 # verbinden (-X für GUI Anwendungen) # Dateien austauschen (wie ftp) # einzelne Datei übertragen (wie cp) 23 SSH 2/2 SSH unterstützt neben der Passwort-Authentifizierung auch Authentifizierung mittels Schlüssel. Jedes Benutzerkonto kann sich ein Schlüsselpaar erstellen: ssh-keygen # ~/.ssh/id_rsa # ~/.ssh/id_rsa.pub # erstelle Schlüsselpaar in ~/.ssh/ # optional geschützt mit einem Password # privater Schlüssel (nie weitergeben!) # öffentlicher Schlüssel Nun kann der öffentliche Schlüssel auf jedem beliebigen Zielbenutzerkonto (auf jedem beliebigen Rechner) hinterlegt werden, und zwar in die Datei ~/.ssh/ authorized_keys. Dabei wird ein Schlüssel pro Zeile abgelegt, falls mehrere Konten Zugriff erhalten sollen. Wichtig ist, dass ~/.ssh/authorized_keys nicht zu "offen" ist. Typische Rechte sollten so aussehen, sonst weigert sich OpenSSH die Dateien zu berücksichtigen: # rwx --- --- ~/.ssh # rw- --- --- ~/.ssh/authorized_keys 24 Paketverwaltung 1/2 Eine Linux-Installation ist in Pakete unterteilt. Es gibt zwei populäre Paketformate: RPM (Red Hat Package Manager) und DEB (Debian). Auf RPM-Distributionen, wie RHEL/CentOS oder Fedora können Pakete mit dem gleichnamige Befehl (rpm) verwaltet werden. Hier einige Beispiele (ein Beispiel für einen Paketnamen ist "httpd"): rpm -qa # alle installierten Pakete anzeigen rpm -qi Paketname # Informationen über <Paketname> anzeigen rpm -ql Paketname # mit <Paketname> installierte Dateien auflisten rpm -V Paketname # Dateien in installiertem <Paketname> überprüfen rpm -qf file # in welchem Paket ist file enthalten? rpm -ivh Paket.rpm # Paket.rpm installieren (vh für info & progress bar) rpm -e Paketname # <Paketname> löschen Auf DEB-basierten Distributionen, wie Debian oder Ubuntu, lautet der entsprechende Befehl dpkg. 25 Paketverwaltung 2/2 Der Befehl rpm überprüft automatisch Abhängigkeiten und warnt gegebenenfalls, ohne die Anweisung auszuführen,wenn Probleme erwartet werden. Allerdings ist es sehr mühsam, entsprechend alle RPMs selbst zu finden und bereitzustellen! Man verwendet in der Praxis also normalerweise nicht händische rpm-Anweisungen um Software (nach) zu installieren! YUM ist ein bequemes Werkzeug, das Pakete automatisch von einem Server holt, Abhängigkeiten auflöst und alle benötigten Pakete einspielt. Die Benutzung ist denkbar einfach: yum install Paketname yum search Suchbegriff yum update # installiere <Paketname> # Infos über Pakete ~ <Suchbegriff> # update alle installierten Pakete Die Informationen zu den Paket-Download-Servern (genannt "Repositories" oder kurz "Repos"), die yum verwendet sind im Verzeichnis /etc/yum.repos.d abgelegt. Unter Debian, Ubuntu, etc. wird apt anstatt yum verwendet: apt-get install Paketname apt-cache search Suchbegriff apt-get update; apt-get upgrade 26 # installiere <Paketname> # Infos über Pakete ~ <Suchbegriff> # update alle installierten Pakete Paketverwaltung: ein Beispiel Da war noch... unser Webserver! Im Moment ist PHP nicht installiert: cd /var/www/html wget http://10.0.0.1/beispiel.php Das Öffnen von beispiel.php im Browser von eurem Webserver liefert aber nur den Download der Datei... :( Wir wollen nun PHP nachinstallieren. Da wir von unserem Klassen-LAN aus nicht ins Internet kommen, ersetzen wir die Standard-Repo-Dateien von CentOS mit einer RepoDatei, die auf das Installations-Repo auf meinem Notebook zeigt: cd /etc/yum.repos.d mkdir original-repos mv CentOS-* original-repos wget http://10.0.0.1/Chris.repo Die Installation von PHP mit yum ist sehr einfach: yum install php systemctl restart httpd.service # und mit y bestätigen # Webserver neu starten Euer Webserver zeigt nun beispiel.php im Browser als PHP-Seite an :) 27 TCP/IP Netzwerk-Konfiguration Im Bereich Netzwerke hat Linux ein Heimspiel. Wir werfen allerdings nur einen Blick auf die grundlegende Konfiguration. Für fortgeschrittene Themen wie Bonding, VLAN oder spezielle low-latency Netzwerk-Stacks wie Infiniband und RDMA verweise ich auf die dedizierten Manuals von Red Hat (RHEL 7 Networking Guide, evtl. auch RHEL 7 Load Balancer Administration). Die meisten Distributionen haben Tools um die grundlegende Netzwerkkonfiguration durchzuführen. In der RHEL/CentOS-Familie sind das (neu in Version 7!): nmcli ...optionen... # siehe Networking Guide nmtui # idem, aber mit TUI! systemctl restart network.service # ...Änderungen übernehmen Wie allgemein unter Linux üblich, liegen die Konfigurationsdetails als Text-Dateien unter /etc und können auch direkt editiert werden. In RHEL/CentOS ab V. 7: /etc/sysconfig/network-scripts/ifcfg-XXX # statische IP Infos zum NIC XXX (in unserer VMWare eno16777736) /etc/hostname # eigener Hostname /etc/resolv.conf # welche DNS Server sollen benutzt werden? 28 TCP/IP - Diagnose 1/2 Die Netzwerkparameter können abgefragt werden: ifconfig ip addr # IP Adressen anzeigen (traditioneller Befehl) # mit dem neueren, allgemeinen Befehl ip route ip route # Route anzeigen Wichtige, klassische Diagnose Tools (MS-Windows hat sie auch): netstat netstat -lnp # (Server-)Sockets abfragen # typische Optionen (MS-Windows: netstat -aon ) arp -a # MAC Cache anzeigen (um MACs / IPs im LAN zu finden) ping host # ICPM-Paket senden und empfangen 29 TCP/IP - Diagnose 2/2 Befehle um Hostnamen aufzulösen und Infos zu Domains und IP-Netzwerken abzufragen: host www.1006.org # Namen auflösen (simpler Befehl) dig dig dig dig # idem, Befehl von den BIND-Leuten # wer ist zuständig für die Mail (MX Record) # idem, aber mit einem bestimmten DNS Server # reverse Lookup (PTR Record) www.1006.org www.1006.org mx www.1006.org @8.8.8.8 -x 54.93.168.85 whois 1006.org whois 54.93.168.85 # Registrierungsinfos zur Domain # Registrierungsinfos zum IP-Block (RIPE, etc.) Mächtiger Befehl um ganze Netzwerke nach Hosts/Services zu scannen: nmap 10.0.0.0/24 -p 22 # z.B.: alle Hosts im LAN mit offenem SSH-Port Befehl um TCP/IP Verkehr mitzuhören (“sniffen”): tcpdump 30 DHCP und DNS Server Ein DHCP-Server ist schnell installiert (Vorsicht, nicht mehrere im LAN starten!): yum install dhcp # installiere DHCP-Server vim /etc/dhcp/dhcpd.conf # Konfiguration editieren (siehe Beispiel) systemctl restart dhcpd.service # DHCP-Server (neu-)starten systemctl enable # ... beim Boot automatisch starten dhcpd.service Mindestens ein (oder zwei) DNS-Server sollten im LAN auch zur Verfügung stellen (zumindest als DNS-Caches), RHEL/CentOS verwenden den altbekannten BIND (Berkeley Internet Name Domain): yum install bind # installiere BIND (DNS-Server) systemctl restart named.service # der Service heißt "named" systemctl enable named.service # rndc ist der Befehl um BIND rndc flush # zu steuern: flush löscht den Cache! • Seht in der RHEL 7 Networking Guide nach, wie man einen autoritativen Nameserver für eigene Zonen einrichten kann. Tip: Die Uhrzeit eines DNS Server muss exakt sein, es empfiehlt sich den NTP-Service chronyd zu benutzen! 31 Archive mit tar Das klassische Archivierungswerkzeug unter Linux ist tar (steht für “tape archiver”). tar wird folgendermaßen verwendet: tar cf bu.tar /home tar xf bu.tar tar tf bu.tar # Create File: archiviert /home in die Datei bu.tar # eXtract File: extrahiert den Inhalt von bu.tar in # das aktuelle Verzeichnis # lisT File: zeigt die Dateien in bu.tar an Die Optionen zcf (bzw. zxf, ztf) erzeugen (bzw. extrahieren, listen) eine komprimierte Datei (Endung meist .tar.gz oder .tgz). Die Komprimierung kann auch unabhängig von tar mit den Befehlen gzip (komprimieren) oder gunzip (dekomprimieren) erfolgen. Anstatt eine Datei (wie bu.tar) kann auch direkt ein Bandlaufwerk angegeben werden, das Linux erkannt hat (siehe dmesg). Das könnte zum Beispiel /dev/st0 (das erste SCSI Bandlaufwerk) sein. In dem Falle wird der Buchstabe f weggelassen. • (wer verwendet aber noch Bandlaufwerke? ;) Die Befehle zip und unzip gibt’s aber natürlich auch. 32 Festplatten und Dateisystem 1/3 Festplattenspeicher (aller Art, muss nicht eine Platte sein ;) ist "roh" als Gerätedatei (engl. device file) sichtbar. Hier habe ich zwei Platten à 1GB hinzugefügt: [root@chrisbox ~]# brw-rw----. 1 root brw-rw----. 1 root brw-rw----. 1 root brw-rw----. 1 root brw-rw----. 1 root ls -l /dev/sd* disk 8, 0 Jan disk 8, 1 Jan disk 8, 2 Jan disk 8, 16 Jan disk 8, 32 Jan 15 15 15 15 15 07:20 07:20 07:20 07:20 07:20 /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc • Die "A"-Platte /dev/sda ist die Installationsplatte (sie wurde vom Installer bereits in zwei Partitionen unterteilt (/dev/sda1 und /dev/sda2). DIe "B" und "C" Platten sind neu. Beachtet auch den Dateityp "b" (erstes Zeichen im Listing): "block device". Mit dem Befehl fdisk kann man (klassische) Partitionen einrichten: fdisk /dev/sdb # interaktiver Befehl mit eigenem Prompt! # »n« und dann 4 mal bestätigen # neuen Partitionstabelle mit »p« anzeigen # mit »w« abspeichern und aussteigen • Die "B"-Platte /dev/sdb hat nun eine neue Partition /dev/sdb1 erhalten! 33 Festplatten und Dateisystem 2/3 Um eine Partition benutzen zu können, muss sie nun mit einem Dateisystem formatiert und in den Unix-Dateibaum eingebunden werden. Linux kennt mehrere verschiedene Dateisysteme - verwendet werden typischerweise: • ext4 - das traditionelle "Standard"-Dateisystem von Linux • xfs - ein high-performance Dateisystem, ursprünglich von Silicon Graphics, wird von Red Hat empfohlen und vom Installer als Default-Dateisystem gewählt • btrfs - ein Dateisystem (und mehr als das!) von Oracle, das ständig an Bedeutung gewinnt und in Zukunft eventuell eine große Rolle spielen könnte Außerdem unterstützt Linux das uralte FAT32 (genannt "vfat") für Sticks etc, die auf dem Server aber keine Rolle spielen. Für die Microsoft-Dateisysteme NTFS und exFAT und das Apple Dateisystem HFS+ gibt es mehr oder weniger offizielle Treiber, die Red Hat aber nicht mitliefert (Ubuntu schon): auch sie spielen nur für Heimanwender eine Rolle. Ein Dateisystem wird nun mit mkfs.ext4 (bzw. mkfs.xfs etc...) erstellt und mit mount in den Unix-Dateibaum eingebunden: # Dateisystem erstellen # Mountpoint (beliebig!) erstellen # einbinden # Ja, da ist der neue Platz :) mkfs.ext4 /dev/sdb1 mkdir /nochneplatte mount /dev/sdb1 /nochneplatte df 34 Festplatten und Dateisystem 3/3 Um den eben erstellen Mount-Point persistent zu machen (d.h. so, dass er nach einem Reboot automatisch eingebunden wird), muss ein entsprechender Eintrag ans Ende der Datei /etc/fstab angefügt werden (die "file system table"). An sich könnte man direkt die Gerätedatei /dev/sdb1 benennen und dem Mountpoint /nochneplatte zuordnen, allerdings ist das nicht sehr robust. Was, wenn die Platte einmal nicht mehr als "B"-Platte gesehen wird, weil sie z.B. in einen anderen SATA Kanal steckt? Es hat sich daher eingebürgert mit UUIDs zu arbeiten, wobei für jede Partition eine global eindeutige ID definiert wird. Eine solche UUID kann man mit dem Befehl blkid anzeigen: [root@chrisbox ~]# blkid /dev/sdb1 /dev/sdb1: UUID="56b3958b-8884-4d3a-9e15-df23a763eb36" TYPE="ext4" Entsprechend kann folgende Zeile an /etc/fstab angefügt werden. Das fstab-Format ist in man fstab genauer erklärt (Vorsicht beim Editieren): UUID=56b3958b-8884-4d3a-9e15-df23a763eb36 /nochneplatte ext4 defaults 0 0 Nun wird die neue Partition bei einem Boot automatisch eingebunden. 35 36 LVM - der Logical Volume Manager 1/2 Dass Dateisysteme aller Art an beliebigen Stellen in den Unix-Dateibaum "eingehängt" werden können, ist schon recht flexibel. Es gibt allerdings klassische Situationen wo diese Flexibilität nicht ausreicht. Daher kennt Linux mit dem LVM noch eine weitere Abstraktionsschicht zwischen Plattenspeicher und Mountpoints. • In der LVM-Notation wird Plattenspeicher als physical volume (PV) bezeichnet. Ein oder mehrere PVs werden zu einer volume group (VG) zusammen geschlossen. In dieser VG werden dann logical volumes (LVs) definiert. Die Dateisystemgröße eines LV ist somit nicht mehr von der Größe der physischen Partition abhängig (und kann im laufenden Betrieb erweitert werden)! Der Installer hat in sda2 eine VG namens "centos" erstellt! LVM wird mit dem Befehl lvm verwaltet (der eine eigene Shell öffnet): [root@chrisbox ~]# lvm lvm> pvscan PV /dev/sda2 VG centos lvm2 [9.51 GiB / 40.00 MiB free] Total: 1 [9.51 GiB] / in use: 1 [9.51 GiB] / in no VG: 0 [0 ei zw s e ibt t" " g "roo s nto nd "ce ap" u G r V "sw lvm> lvscan ACTIVE '/dev/centos/swap' [1.00 GiB] inherit ACTIVE '/dev/centos/root' [8.47 GiB] inherit In lvm> exit ] s: LV de 37 LVM - der Logical Volume Manager 2/2 Beispiel: wir möchten nun die 1-GB-Platte /dev/sdc (die noch unbenutzt ist!) zum LV "centos/root" hinzufügen (es also von ~ 8.5 GB auf ~ 9.5 GB vergrößern). • Schritt eins - die neue Platte partitionieren: # »n«, dann 4 mal bestätigen, dann »w« fdisk /dev/sdc • Schritt zwei - LVM benutzen um die neue Partition an das LV : [root@chrisbox ~]# lvm lvm> pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created lvm> vgextend centos /dev/sdc1 Volume group "centos" successfully extended lvm> lvresize -r /dev/centos/root /dev/sdc1 Size of logical volume centos/root changed from 8.47 GiB (2168 extents) to 9.46 GiB (2423 extents). Logical volume root successfully resized. meta-data=[...] afür, orgt d rt wird! lvm> exit s ) e iz res röße r (für h mitverg Exiting. n ptio gleic Die O teisystem a D as dass d 38 Wo befindet sich was? 1/2 Diese Pfade sind standardisiert durch die File System Hierarchie (FSH) und (zu 99%) unabhängig von der Distribution! Hier ist der erste Teil: /boot # Systemdateien für den Bootvorgang, z.B. Bootloader und Linux (der Kernel) /home /root # die Home-Verzeichnisse der gewöhnlichen Benutzer # das Home-Verzeichnis des Benutzers root /usr # alle Software ist grundsätzlich hier installiert, evtl. ein read-only Dateisystem /usr/bin bzw. /bin # ausführbare Programme (was unter MS Windows EXEs sind) /usr/sbin bzw. /sbin # idem, aber Programme für die Administration /usr/lib* bzw. /lib* # Programmbibliotheken (was unter MS Windows DLLs sind) /usr/share # Doku, Icons, Skripte, Allerlei /usr/src und /usr/include # Sachen für Entwickler /usr/local # repo-fremde Software kann hier installiert werden /var /var/log /var/www /var/... # alles was nicht in /usr kann, weil es r/w sein muss, wie Logs, Spools, Queues, ... # Logdateien # besser wäre /srv/www, bei RHEL aber hier # und einige weitere... 39 Wo befindet sich was? 2/2 Fortsetzung: /etc # Konfigurationsdateien des Systems und der Dienste /srv # hier können Daten von Diensten (FTP-Server, Web-Server) liegen, bei RHEL leer /opt # third-party Software /dev # im laufenden Betrieb werden hier die Gerätedateien eingeblendet /proc /sys # im laufenden Betrieb ist hier ein virtuelles Dateisystem (Kernelschnittstelle) eingebunden # ähnlich wie /proc, aber hierarchisch organisiert, neuer (und aufgeräumter ;) als /proc /run /tmp # temporäres Arbeitsverzeichnis für Dienste (früher /var/run) # temporäre Dateien (alle User können hier schreibend zugreifen) /mnt /media # leer, hier hängt man zeitweilig Dateisysteme ein # leer, hier hängen die Desktops automatisch mobile Dateisysteme wie USB-Sticks ein 40 Logdateien 1/2 Traditionell gibt es in Unix-Systemen einen Dienst (syslogd), der Logmeldungen des Systems oder der Dienste entgegen nimmt und je nach Konfiguration an einen anderen Server sendet (zentraler Log-Server) oder in Dateien im Verzeichnis /var/log ablegt. • Bei den meisten Distributionen, so auch RHEL/CentOS, kümmert sich der Dienst rsyslogd darum - eine kompatible Erweiterung des originalen syslogd. Die neue Software systemd, die wir bereits zum Kontrollieren von Diensten (Befehl systemctl) kennengelernt haben, kümmert sich neuerdings auch um Logging, und zwar mit dem Dienst journald. Die Umstellung ist zur Zeit bei praktisch allen Distributionen im Gange. Bei RedHat/CentOS 7 ist sie noch nicht abgeschlossen, so dass im Moment default-mäßig beide Dienste laufen (rsyslogd und journald) und sich die Aufgabe teilen. Details dazu gibt es im Kapitel 20 der RHEL 7 System Administration Guide. In der Standardkonfiguration sind zur Zeit nur die Logeinträge von rsyslogd persistent (d.h. werden auf Platte gespeichert). Diese werden als Textdateien im Verzeichnis /var/ log abgelegt und können mit einem der üblichen Befehle wie less oder tail betrachtet werden (siehe Slide15). Die Einträge von journald werden nur im RAM abgelegt (Achtung: momentane Standardkonfiguration) und lassen sich mit dem Befehl journalctl betrachten. 41 Logdateien 2/2 Einige der traditionellen rsyslogd-Logdateien in /var/log : /var/log/messages # Hauptlogdatei, hier zuerst nachgucken :) /var/log/secure # Alles, was mit Logins zu tun hat (sshd-Logs landen hier) /var/log/dmesg # Logmeldungen des Kernels (NB: auch Befehl dmesg) /var/log/httpd/* # Logdateien des httpd Dienstes • Diese Dateien werden vom Dienst logrotated automatisch rotiert und schließlich verworfen (siehe /etc/logrotate.conf), sonst wäre /var/log irgendwann voll! Beispielaufrufe von journalctl: journalctl # zeigt alle Logeinträge mit less an (q zum Aussteigen) journalctl -n 15 # idem, nur die neuesten 15 Einträge journalctl -f # live view (mit CTRL-C abbrechen) journalctl -p err # nur Meldungen mit einem Level >= err 42 Und wie geht's weiter? Wer bis zu diesem Punkt den Slides gefolgt ist, hat jetzt diese Dienste laufen: • sshd (SSH/SFTP) • httpd (HTTP) • named (DNS) - nur lokaler Cache, siehe Kap. 11 der Networking Guide um einen autoritativen DNS einzurichten • dhcpd (DHCP) • smtpd (SMTP) - nur zum Versenden von E-Mail, siehe Kapitel 12 der System Adminitrator's Guide um einen kompletten E-Mail Server einzurichten Damit ist natürlich noch lange nicht Schluss. RHEL/CentOS 7 bringt eine Menge an an Diensten mit, die wir nicht installiert haben (siehe die "Software Selection" bei der Installation). Ihr könnt diese Dienste per yum nachinstallieren und per systemctl starten und ausprobieren. Fragt mich oder seht in den RHEL-Manuals nach. Außerdem kann die Installation auch die Rolle eines Gateways (Router+Firewall) übernehmen oder selbst ein Virtualisierungshost sein (Linux bringt mit Xen und KVM gleich zwei Hypervisoren mit) - das sprengt den Rahmen dieser Einführung etwas... Last but not least bringt das System Interpreter und Compiler für (fast) alle Programmiersprachen mit (ich bin eigentlich Entwickler, also fragt mich was dazu ;) 43 systemctl poweroff ;) [email protected] http://www.1006.org 44