GNU/Linux AdministrationLehrinhalt
InhalteÄhnlich wie im Grundkurs sind die vorgegebenen Inhalte zum Glück eng eingeschraenkt, was es auch hier ermöglicht, sehr gut auf den speziellen Bedarf der Teilnehmer einzugehen. Mögliche Inhalte sind unter anderem:
Nach der InstallationAls erstes sollte man nach der Installation die Quellen für zusätzliche Pakete freigeben (insbesondere für die Installation von Grafikkartentreibern etc.) und danach das System auf den neuesten Stand bringen. Im Textmode geht dies unter Verwendung jeglichen bereits installierten Editors (wie zum Beispiel sudo nano /etc/apt/sources.list sudo aptitude update sudo aptitude safe-upgrade Installation von ProgrammenWie in jedem Debian basierten System können Programme/ Pakete einfach mit sudo aptitude install program installiert werden. Weiss man den Namen des zu installierenden Paketes nicht genau, so hilft (die Spitzen Klammern sind nicht zu tippen) apt-cache search <search phrase> Um vor der Installation mehr Informationen zu dem Paket zu erhalten, hilft aptitude show program Falls ein Programm nicht in den vorgegebenen Paketquellen vorhanden ist, so kann die Liste der Quellen erweitert werden und gegebenenfalls um die fehlenden Sourcen ergänzt werden. sudo emacs -nw /etc/apt/sources.list sudo aptitude update Es ist auch möglich, eine in einer Textdatei vorhandene List von Programmen zu installieren (ein Packetname pro Zeile). aptitude install $(< package_list.txt) Falls ein Programm auf keinem (oder keinem vertrauenswürdigen apt Server zu finden ist, so kann man Debian Pakete auch ohne dpkg -i program.deb Wenn ein Programm jedoch überhaupt nicht als Debian Paket zur Verfügung steht, so kann dessen Source Code heruntergeladen, entpackt, konfiguriert, kompiliert und anschliessend installiert werden. Dies hört sich recht kompliziert an, ist aber wirklich nicht schwer. wget http://www.anyserver.com/path/to/program/program.tar.gz tar zvxf program.tar.gz cd program ./configure make sudo make install Damit ein Kompilieren möglich ist sind einige wichtige Packete zu installieren sudo apt-get install binutils gcc g++ libc6-dev make Viele auf diese Art installierte Programme verlangen auch nach einigen developer Paketen, dies sind Pakete, deren Name auf ./configure --prefix=/home/user/... make make install Shell ScriptingGrundsätzlich bevorzuge ich zur Erstellung von Administrationsskripten die Programmiersprache Python. Ein paar Grundzüge der Verwendung der Bash Shell sollten aber dennoch geläfig sein. Jedes solche Skript beginnt mit#!/bin/bashUm das Skript ausführbar zu machen, verwendet man chmod +x skript.sh Beachte auch die Hinweise zur IO Redirection in den Unterlagen zur Linux Einführung. VariableVariable werden in der Bash durch verwenden eines "=" Zeichens definiert, wobei weder vor noch hinter dem "=" Zeichen ein Leerzeichen sein darf. Zum Beispiel: myvar="any value" Um die Ausgabe eines Programms in eine Variable zu speichern, ist folgende Syntax zu verwenden output=$( ls -la ) Es ist auch möglich, User-Input in einer Variable zu speichern read userdata Den Wert der Variablen kann man durch vorstellen eines Dollar-Zeichens ($) auslesen. Zu beachten ist das doppelte Anführungszeichen ("), da bei Verwendung des eines einfachen Anführungszeichen (') Varibale nicht durch deren Inhalt ersetzt werden. echo "$myvar" Flusskontrolle und SchleifenUm Schleifen vorzeitig abzubrechen, stehen die
Befehle IfAm Besten ist die if [[ "$USER" == "gerald" ]]; then echo "IF: I'm gerald" else echo "IF: I'm not gerald" fi Die generelle Syntax lautet if expression_1; then # commands elif expression_2; then # commands else # commands fi CaseZu beachten ist der doppelte Strichpunkt, der jeden Fall abschließt und dass es im Gegensatz zu einigen anderen Sprachen kein "falling through" zu weiteren Fällen gibt. Sobald eine Bedingung wahr ist, wird der case Block nach Ausführen der darin enthaltenen Kommandos verlassen).case "$USER" in root) echo "I'm root";; gerald) echo "I'm gerald";; esac Forfor arg in list do # commands done Ein simples Beispiel ist for file in * do # commands using $file done Mit for n in `seq 5`; do # commands done Moderner und besser als die Verwendung von for n in {1..10..3}; do # commands done Whilewhile expression do # commands done Simple BerechnungenBash kann auch für simplere Rechnungen herangezogen werden. Dies geschieht mit der A=3 B=5 echo $((A * B)) Weitere InformationenEine Top-Referenz zum Thema Bash-Programmierung ist der Advanced Bash-Scripting Guide. Zum Beispiel ist dort beschrieben, wie mit Bash Zeichenketten manipuliert werden. ServerVon den zahllosen in Linux zur Verfügung stehenden Servern sollen hier nur ein paar der wichtigsten kurz besprochen werden.Samba FileserverSamba ist ein Softwarepacket, dass unter anderem eine Implementierung des Server-Message-Block-Protokolls (SMB) fuer Linux zur Verfuegung stellt. Zusammen mit NMB kann man mit SMB auf Linux einen Datei- und Druckserver fuer Windowsnetzwerke einrichten, der sehr stabil laeuft. Nach der Installation mit sudo apt-get install samba muessen einige Befehle ausgefuehrt werden und die Konfigurationsdatei sollte auch unbedingt angepasst werden. sudo mksmbpasswd erstellt nicht aktive Sambauser aus der Unix passwd Datei; dieser Befehl ist nur noetig, wenn man schon viele vorhandene Benutzer am Unix System hat, die auch zugriff mittels Windows Clients bekommen sollen. Bei manchen Distributionen (zB bei Ubuntu 6.06 Server) wird er automatisch im Zuge der Installation ausgefuehrt. Dieser Befehl sollte nur direkt nach der Installation und nur einmalig ausgefuehrt werden! Welche User bereits fuer Samba eingerichtet sind, kann man normalerweise in der Datei /etc/samba/smbpasswd nachlesen. Samba kann aber auch andere Backends als smbpasswd zur Userverwaltung verwenden, wie zB ldap, nis+, tdb,... Im Fall von Ubuntu Linux 6.06 wird tdbsam verwendet und die Daten der vorhandenen User können mit sudo pdbedit -w -L in einem smbpasswd aehnlichen Format ausgegeben werden. Wenn ein User neu in Unix erstellt wird, so muss er zusaetzlich in das Usersystem von Samba eingetragen werden sudo adduser --shell /bin/true username sudo smbpasswd -a username Wenn ein User bereits in der Datenbank von Samba vorhanden, jedoch nicht aktiv (enabled) ist, kann er mit sudo smbpasswd -e username aktiviert werden, bzw kann man mit sudo smbpasswd username ein Passwort erstellen oder veraendern. Ein SMB Share kann in Linux nach der Installation des Packetes sudo aptitude install smbfs mount -t cifs -o username=...,password=...,... //IP/Share /mnt/point zum Testen gemountet werden. Um dies beim Systemstart automatisch zu erledigen reicht ein entsprechender Eintrag in /etc/fstab, wobei man statt username und password in die Datei zu schreiben einen Verweis zu einer Credentials-Datei (zum Beispiel sudo cat >> /etc/fstab //IP/Share /mnt/point cifs credentials=/etc/cifspw,... 0 0 (Hinweis: bei einigen Distributionen muss man als Typ der Partition Apache 2 Webserver mit PHP 5sudo apt-get install apache2 php libapache2-mod-php Das war es eigentlich schon... damit jeder Benutzer eine eigene homepage unter localhost/~$USER/ zur Verfügung hat, muss das Modul userdir aktiviert werden sudo a2enmod userdir Wenn man jedoch PHP auch innerhalb der Benutzerverzeichnisse (~username/public_html) erlauben will, so muss je nach Distribution ev. noch sudo emacs -nw /etc/apache2/mods-available/php7.0.conf Um sichere Verbindungen (https) zu erlauben, muss ssl aktiviert werden. sudo a2enmod ssl sudo a2ensite default-ssl.conf Um automatisch auf eine sichere Verbindung umzuleiten, kann das
rewrite Modul verwendet werden. Dazu
muss RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} Abschließend ist der server noch neu zu starten, damit die Änderungen in Kraft treten. sudo /etc/init.d/apache2 restart Unter Umständen ist es auch interessant ein Programm zur automatischen Analyse der Logdateien des Webservers zu installieren. Ein bekanntes Beispiel ist sudo apt-get install webalizer sudo emacs -nw /etc/webalizer/webalizer.conf /etc/crontab Für mehr Informationen zum Thema Apache, siehe Linux Netzwerk Management. MySQL Datenbankserversudo apt-get install mysql-server php5-mysql Nach der Installation kann man bereits die gewünschten Datenbanken erstellen. Davor empfiehlt es sich jedoch, ein Passwort für den user "root" der Datenbank zu erstellen. Normale Benutzer für die Datenbank kann man zum Beispiel direkt beim Zuteilen der Rechte einrichten shell> mysql -h localhost -u root mysql> SET PASSWORD = PASSWORD('your_password'); mysql> CREATE DATABASE your_database; mysql> GRANT ALL ON your_database.* TO 'new_user'@'localhost' -> IDENTIFIED BY 'new_user_password'; mysql> quit In der Folge kann man sich nur mehr mit dem richtigen Passwort anmelden und der Aufruf von MySQL ändert sich zu mysql -h localhost -u username -p Wenn man MySQL mit einem schönen Webinterface verwalten möchte, muss man zusätzlich zu Apache und Php noch phpmyadmin installieren sudo apt-get install phpmyadmin Die Datenbanken von MySQL werden unter mysqldump -u user -p databaseName tableNames > filename.sql mysqldump -u user -p databaseName > filename.sql mysqldump -u root -p --all-databases > filename.sql Das Einspielen eines zuvor erstellten Backups ist ebensoleicht - will man nur eine Tabelle oder eine Datenbank wiederhergestellen, verwendet man die Syntax der ersten Zeile, für ein gesamtes "restore" verwendet man jene der zweiten Zeile mysql -u root -p -D databaseName < filename.sql mysql -u root -p < filename.sql Es ist auch möglich, alle Tabellen einer Datenbank in CSV Dateien zu exportieren mysqldump -u user -p --no-create-info \ --tab=/path/to/files \ --fields-terminated-by=',' databaseName bzw. Daten aus CSV Dateien zu importieren (der Name der Tabelle wird vom Dateinamen (ohne dessen Endung) genommen. Die (leere) Tabelle muss aber bereits in MySQL existieren, um CSV Dateien darin importieren zu können mysqlimport -u user -p \ --fields-terminated-by=',' databaseName filename.csv Eine kurze Einführung in die Benutzung von MySQL findet sich unter php_sql.php#mysql. PostgreSQL Datenbankserversudo apt-get install postgresql php-pgsql PostgreSQL kann wahlweise von der Shell des Betriebssystem mittels einiger Wrappers oder vom eigenen Prompt konfiguriert/ benutzt werde. Ich halte mich hier an die Kommandos, die man direkt in der Shell von Linux benutzt. Solange man noch keine Benutzerrechte festgelegt hat, muss man Eingriffe in die Datenbank als user sudo -u postgres createuser $USER --pwprompt sudo -u postgres createdb $DBNAME --owner=$USER [-E UNICODE] Möchte man einen User verwenden, der nicht im System existiert,
ist auch local $DBNAME $USER md5 Die Verbindung lässt sich mittels psql -h localhost -d $DBNAME -U $USER -W testen. Für die Administration der Datenbank(en) gibt es wahlweise ein Webinterface sudo apt-get install phppgadmin Oder ein lokales (plattformunabhängiges) Programm sudo apt-get install pgadmin3 Ein Backup kann entweder von einer einzelnen Datenbank pg_dump -c databaseName > databaseName_backup.sql oder von allen Datenbanken gleichzeitig erstellt werden pg_dumpall > postgres_backup.sql Natürlich kann das Backup auch gleich bei der Erstellung komprimiert werden pg_dumpall | gzip > postgres_backup.sql.gz Liegt ein Backup einer einzelnen Datenbank vor, so kann dieses mit psql databaseName < databaseName_backup.sql wiederhergestellt werden. Ein Gesamtbackup kann mit psql -f postgres_backup.sql postgres wiederhergestellt werden. NFS - Network File SystemAllgemein ist über NFS zu sagen, dass es meiner Meinung nach seit Samba nicht mehr zeitgemäß ist und Samba bevorzugt verwendet werden sollte. Wer es dennoch verwenden möchte, sollte sich der damit verbundenen Sicherheitsrisiken im klaren sein. Diesbezüglich empfiehlt sich eine ausgereifte Firewallkonfiguration mit /home 192.168.1.0/255.255.255.0(rw) /usr/local 192.168.1.2(ro) 192.168.1.3(ro) 192.168.1.4(rw) Clientseitig kann das Dateisystem entweder einmalig gemounted werden sudo mount $SERVERIP:/path/on/server /mount/this/here oder durch einen Eintrag in $SERVERIP:/path/on/server /mount/point nfs defaults 0 0 VNC - Virtual Network ConnectionMit VNC laesst sich ein grafischer Desktop bequem fernsteuern. Ich empfehle die Verwendung von sudo apt-get install x11vnc Durch Starten des Servers mit x11vnc gibt man seinen Desktop zur Fernsteuerung frei (es empfiehlt sich, die Konfiguration des Servers so anzupassen, dass der Client ein Passwort zur Verbindung eingeben muss). Dabei kann ein Dritter den Desktop des aktuellen Users kontrollieren, was sich besonders für Supporttätigkeiten anbietet. Da der User sieht, was genau man am Desktop macht, besteht eine gute Chance, dass sie beim nächsten mal keine Unterstützung mehr benötigt. Alternativ kann man auch einen VNC Server verwenden, der eine grafische Remoteverwaltung erlaubt, ohne den aktuellen Desktop zu sehen oder zu verändern. sudo apt-get install vnc4server vncserver Damit der VNC Server auch benutzt werden kann, sollte sichergestellt sein, dass bei Verwendung einer Firewall die entsprechenden Ports freigegeben sind. In der Regel ist das Zum Verbinden mit dem Server benötigt man selbstverstaendlich einen client. sudo apt-get install xvnc4viewer vncviewer [server][:Display] Bei Verbindung zum Standarddisplay ( UUID MechanismusUm neue Festplatten hinzufügen zu können, ist es nötig den UUID (Universally Unique Identifier) Mechanismus zu verstehen und anwenden zu können. Früher wurden Festplatten einfach anhand ihrer Position (primary master, primary slave,...) den device files UUID=`uuidgen -t` sudo tune2fs -U $UUID device blkid sudo reboot Die eben gemachten Einstellungen kann man wahlweise mit ls /dev/disk/by-uuid/ -l blkid sudo vol_id /dev/sda1 testen. Danach ist die neue UUID in UUID=... /home ext3 defaults 0 2 MonitoringZum Überwachen des Systems bieten sich in Linux zahllose Tools wie iostat, vmstat, netstat, pktstat, ifstat und dstat an. Hier umreisse ich nur ganz kurz das letztgenannte dstat, welches im Wesentlichen die Möglichkeiten aller anderen integriert und sogar erweitert. Der Standardaufruf erfolgt mit dstat und gibt einen mit vmstat vergleichbaren Output. Dstat unterstützt eine große Zahl an Optionen und Plugins, welche in der Manpage erklärt sind. Es folgt ein Beispiel, das die Top-Verbraucher des Systems in den Bereichen CPU, IO und Memory 3 mal im Takt von 5 Sekunden auflistet dstat --top-cpu --top-cputime --top-io --top-mem --top-bio 5 3 BackupsMit dem Client-/ Serverprogramm sudo apt-get install partimage [partimage-server] sudo partimage Danach genügt es, den Anweisungen des sehr einfachen ncurses Interfaces zu folgen. Alternativ dazu kann man auch mit "normalen" Tools wie tar zcf - directory/ | ssh hostname "cd /backup/; tar zpxvf -" Sobald eine Kopie erstellt ist, ist es sinnvoll diese durch Verwendung von rsync -av --delete /path/to/source /path/to/destination/ Zum Experimentieren mit rsync -avn --rsh=ssh --delete /home/gerald/music \ gerald@192.168.1.65:/home/gerald/ Dieses Tool lässt sich auch hervorragend mit crontab -e Ein typischer Eintrag in crontab (Backup jeden Tag um 01:00 bzw. 03:00) sieht so aus (wobei var in diese Beispiel eine gesonderte Festplatte darstellt) # m h dom mon dow command 0 1 * * * rsync -a --delete /home /var/backups/ 0 3 * * * rsync -a --delete /etc /var/backups/ Benötigt man partielle und inkrementelle Backups (bei einem inkrementellen Backup werden mehrere Backups in gewissen Intervallen erstellt, wobei jeweis nur die Differenz zum letzten Backup neu gesichert wird), so empfiehlt sich das Tool sudo apt-get install backupninja Installation von GNU GRUB, the GRand Unified BootloaderFalls bei der Installation der Bootloader GRUB nicht mit installiert wurde oder eine spätere Windows-Installation den Bootsektor überschrieben hat, so kann GRUB mit folgenden Kommandos installiert werden, nachdem von einer Live CD wie zum Beispiel grml gebootet wurde: shell> sudo grub grub> find /boot/grub/stage1 grub> root (hdX,X) grub> setup (hd0) Anstelle von Zugriff auf eine NTFS PartitionAuf NTFS Partitionen kann nach Installation des Packets mkdir /mnt/windows mount -t ntfs-3g -o rw /dev/XXX /mnt/windows SystemrettungFalls einmal alles schief geht, können auch nicht mehr bootende Systeme in der Regel noch gerettet werden. Dazu muß man zuerst eine von externen Medien bootfähige Linuxdistribution wie zum Beispiel Grml Live Linux starten. Die externe Distribution muß dabei die gleiche Architektur (32 oder 64 bit) wie die des defekten Systems besitzen. Danach ist das defekte System mittels mkdir /mnt/fixme mount /dev/sda2 /mnt/fixme zu mounten, wobei mount --bind /dev /mnt/fixme/dev mount --bind /proc /mnt/fixme/proc mount --bind /sys /mnt/fixme/sys chroot /mnt/fixme Schließlich kann man beginnen, das defekte System zu reparieren - wobei die konkreten Schritte vom Defekt abhängen. Dabei hilft in der Regel eine Suchmaschine beziehungsweise ein Blick auf http://askubuntu.com/ (oder eine ähnliche Seite für die jeweilige Distribution). Konfigurieren und Kompilieren eines KernelsBevor man einen Kernel kompiliert, sollte man sich darüber im Klaren sein, dass das automatische Updatesystem der Distribution einen selbstgebastelten Kernel natürlich nicht mit Sicherheitsupdates versorgen kann. Wenn man dennoch einen eigenen Kernel braucht oder will, so muss man zuerst eine Entwicklungsumgebung installieren, um den Linux Kernel kompilieren zu können. Dazu sind Packete wie gcc, make, libncurses-dev, ncurses-dev, libc6-dev etc. nötig. Danach muss man noch die zu kompilierenden Sourcen herunterladen - das geht entweder ueber ein Packet der Distribution (z.B.: tar -jvxf linux-2.6.xx.x.tar.bz2 Nach dem Entpacken sollte man die enthaltene README Datei lesen cd linux-2.6.xx.x less README Zur Konfiguration hat man einige Moeglichkeiten, die auch in der README Datei erklärt sind. Will man die vorhandene Konfiguration des aktuellen Kernels beibehalten, so reicht ein make oldconfig Will man jedoch den Kernel auf die aktuelle Hardware zuschneiden und nicht benoetigte Module deaktivieren, so hat man die Moeglichkeit, zwischen verschiedenen Konfigurationstools, welche alle in der README Datei beschrieben sind, zu wählen. In der Konsole empfiehlt sich in diesem Fall ein make menuconfig Wenn man gerne die grafische Benutzeroberfläche KDE verwendet und die zugehörigen Entwicklungspackete installiert sind, so kann man statt dessen auch ein make sudo make modules_install install Je nach Distribution sollte man danach das sudo reboot sollte man den neuen Kernel bereits verwenden können. VerschiedenesManchmal ist es notwendig herauszufinden, ob man sich auf einem 32 oder 64 bit Rechner befindet. Dies läßt sich einfach mit Hilfe voncat /proc/cpuinfoerledigen (zum Beispiel bedeutet das Flag "lm" (long mode), dass man sich auf 64 bit Hardware befindet. Manchmal will man aber auch wissen, ob es sich bei der aktuellen Installation um ein 32 bit oder ein 64 bit Linux handelt. Dies geht zum Beispiel mittels getconf LONG_BIT LinksHier folgt eine (unsortierte) Aufstellung einiger der im Kurs gezeigten Webseiten.
Copyright © 2009-2023 Gerald Senarclens de Grancy Haftungsausschluss: Da ich keinerlei Einfluss auf den Inhalt der Seiten, zu denen ich von meiner Homepage linke, habe, übernehme ich auch keinerlei Haftung für diese Seiten. |