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

Documentos relacionados