UNIX System, Netz und Kommunikation 1 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php UNIX System, Netz und Kommunikation, version dated 2007-06-29 09:30:53 6. Systemadministration Selbst wenn du nur dein eigenes Linux auf deinem Privat-PC installiert hast: Du musst das System "am Leben erhalten". Da gehören regelmäßige Wartungsaufgaben wie das Löschen mancher temporärer Datenfiles aber auch die Einstellun Systemparametern und das Einrichten von Benutzeraccounts. Nach der Erstinstallation des Systems gehören zu den regelmäßigen Aufgaben der SysAdmin unter anderem Einrichtung neuer User-Accounts Beratung der Benutzer (auch in Security Angelegenheiten) Überwachung des Betriebes und der Ressourcen: Filessysteme Hilfestellung für die Benutzer (falls zum Schutz anderer Benutzer notwendig auch Ei ngriffe mittels nice und renice!) Backups Cron-Jobs Überwachung der Log-files Regelmäßige Löschaktionen: /tmp, vielleicht auch /usr/tmp Entfernen unnötiger core-Dumps Einrichtung und Überwachung der Drucker Mail und Sendmail Software Update des Basis-Systems Installation neuer Software Netzwerk Management Überwachung der Security Einige dieser Aufgaben wollen wir hier besprechen. Allem voran gestellt ist aber ein äußerst wichtiger und nützlicher Rat: Lege ein System-Log an! In diesen File - am besten im root-Home /root - vermerkst du alle Arbeiten am System, jeweils mit Datum und kurzer Notiz. Welche Links du angelegt hast, welche Scripts du verändert oder hinzugefügt hast, welche Software hinzugefügt wurde, welche Probleme dir auffallen. Diese Dokumentation mag manchmal umständlich scheinen, aber nach einiger Zeit wirst du sehen, wie nützlich sie dir ist. Im Idealfall kannst du daraus später lernen, wie du ohne Umwege ein vollständiges, funktionsfähiges System rekonstruier kannst. 6.1 Konfiguration 6.2 User Management 6.3 Mail Administration 6.4 WWW Administration 6.5 Dateisysteme 6.6 Printer 6.7 Software und Admin Tools Das Internet wird in einem gesonderten Abschnitt TCP/IP und Internet besprochen, ebenso das wichtige Problem Security . Hier noch ein Literaturhinweis: AEleen Frisch: UNIX System Administration (deutsche Übersetzung; O'Reilly, Bonn: 1996) und ein Link http://linux.nbs.at/HOWTO/Config-HOWTO.html aus der Liste der Linux-Howtos: http://linux.nbs.at/HOWTO/ Druckversion: Abschnitt 6 als pdf-File (152 Kb) 29.06.2007 10:14 UNIX System, Netz und Kommunikation 2 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6.1 Konfiguration des Systems Wenn der Computer eingeschaltet wird (früher wurde dieser Vorgang "bootstrap" genannt, nach dem Freiherrn von Münchhause der sich an seinen Schnürsenkeln - den "bootstraps" - aus dem Sumpf gezogen hat), dann wird durch eine kleines fest installiertes Programm zunächst der UNIX-Kernel geladen. Dieser stellt die wichtigsten Funktionen (Datei-Zugriffe und ähnliches) zur Verfügung und startet selbst viele weitere Programme. Nach der Vorbereitungsphase befindet sich das System in folgendem Zustand: Neben dem Kernel sind mehrere System-Programme aktiv, die allerdings meist nur "in Wartestellung" sind, und bestimmte "Zurufe" des Kernels oder der Benutzer warten. Solch ein Programm ist ein sogenannter "Daemon". Gesteuert werde viele der Funktionen des jeweiligen Daemons durch Konfigurationsfiles. Je nach UNIX-Distribution werden die Konfigurationsfiles durch Installationshilfen (wie etwa yast oder yast2 bei SuSE) interaktiv vorbereitet. Allerdings sollte man sich später vergewissern, dass nicht zuviele unnötige Skripts gestartet werden und im Hintergrund System-Ressourcen abziehen. Auch die Sicherheit des Systems gegen Einbrüche ist oft nicht sehr gut gegeben un man sollte "aufräumen" (siehe auch 7. Security ). Am besten sieh dir einmal beim Starten des Systems an, welche Prozesse da ablaufen. Jeder gute Daemon meldet sich Kurzmeldung. Wenn dir einer nicht geheuer ist: nachsehen und notfalls abschalten. 6.1.1 Boot-Vorgang 6.1.2 Daemon(s|en) 6.1.3 Konfigurationsfiles http://sitar.berlios.de/ ) Ein sehr nützliches Programm habe ich küzlich entdeckt: "SITAR - System InformaTion At Runtime" ( liefert nicht nur vollständige Informationen über das installierte System und die Konfigurationsfiles sondern unter anderem eine Liste aller installierten Pakete. Das ist wichtig, wenn man gerne ein System mit möglichst den gleichen Softwarepaketem installieren will. 6.1.1 Boot-Vorgang Der Vorgang des "booten" soll natürlich möglichst allgemein sein und durch die oder den SysAdmin leicht steuerbar. Daher haben die verschiedenen UNIX-Distributionen jeweils ein durchdachtes System von Konfigurationsfiles vorgesehen, mit denen man Aktionen beeinflussen kann. Leider sind diese Konfigurationsfiles nicht wirklich standardisiert. In vielem ähneln sich die Strukture und die Übereinstimmung hat im Lauf der vergangenen Jahre zugenommen. Ein im Read-Only-Memory (beim PC: das BIOS) untergebrachtes kleines Programm veruscht zuerst, ein Bootprogramm zu fi Dieses ist zum Beispiel bei PCs im sogenannten Master Boot Record (MBR, der Sektor 0 der Boot-Disk) untergebrach Bootprogramm lädt dann den UNIX-Kernel und dieses startet Unterprozesse. Der als erstes gestartete Prozess (die Mutter Prozesse) ist init (das ist /sbin/init in Linux, /etc/init für das SysV System SGI- IRIX). Dieser Prozess hat die niedrigste Process ID (PID 1) und ist ein "general process spawner" und wird durch die Angaben im File /etc/inittab gesteuert. Insbesondere wird hier das geplante "Runlevel" festgelegt. Ich will hier als Beispiel die Linux-Distribution von SuSE wählen. Unter IRIX (SGI) sind die Strukturen ähnlich. Die Bedeutung der Runlevels ist von der Version und Art des UNIX-Systems abhängig. Ich werde mich ab jetzt auf des Linux System beschränken. Es gibt (unter Linux) folgende Runlevels: 0 Auf diesem Runlevel wird das System angehalten. 1 Hier wird auf das Single-User Mode umgeschaltet; das ist der Administrator Modus, wenn man noch kein Netzwerk und keine Graphik-Oberfläche verwenden will. 2 Das System arbeitet hier ohne Netzwerk; auf manchen System ist das der Single-User Modus. 3 Das Netzwerk ist aktiviert, falls verfügbar werden nun auch Filesysteme anderer Hosts (über das Network File System NFS) "angeschlossen" (mount). 4 Derzeit nicht verwendet 5 Netzwerk ist aktiviert und der X-Display Manager xdm ist gestartet. Das X Window System muss korrrekt "aufgesetzt" sein, damit man in diesem Runlevel arbeiten kann. 29.06.2007 10:14 UNIX System, Netz und Kommunikation 3 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6 In diesem Level wird das System neu gestartet (reboot). S Hier kann beim Boot-Vorgang in den Singe-User Modus geschaltet werden. Es ist nur eine Konsole verfügbar. Von init werden dann mit Hilfe eines weiteren "run level master scripts" /etc/init.d/rc weitere Scripts in /etc/init.d ausgeführt. Um die Reihenfolge der dort abgelegten Scripts (die zum Beispiel das Netz-Interface oder den Webserver st festzulegen, werden Links zu diesen Scripts in die Directories /etc/init.d/rcX.d angelegt (X ist dabei eines der Zeichen 0,1,2,3,4,5,6,S und bezeichnet das Run-Level). Die Linknamen sind Zahlen mit Buchstaben, welche angeben ob das Script mit dem Parameter "start" oder "stop" aufgerufen werden soll. In diesen Directories finden sich Links mit Namen wie zum Beispiel folgende: bash-2.04# ls /etc/init.d/rc2.d K01wpmd K18pcmcia K02personal-firewall K18zebra K02squid K19network K03apache K22dhclient K04gpm K22i4l K12cron K23alsasound K13ircd K23apmd K13lpd K23dummy K13smbfs K23i4l_hardware K13xntpd K23idedma K14at K23kerneld K14identd K23personal-firewall.initial K14named K23random K14nwe S01alsasound K14rcyiff S01apmd K14rstatd S01dummy K15usbmgr S01i4l_hardware K16proftpd S01idedma K16snmpd S01kerneld K16syslog S01personal-firewall.initial K17bgpd S01random K17ospf6d S02dhclient K17ospfd S02i4l K17ripd S05network K17ripngd S06pcmcia K17route S06zebra K17vtysh S07bgpd S07ospf6d S07ospfd S07ripd S07ripngd S07route S07vtysh S08proftpd S08snmpd S08syslog S09usbmgr S10at S10identd S10kbd S10named S10nwe S10rcyiff S10rstatd S11ircd S11lpd S11smbfs S11xntpd S12cron S20gpm S21apache S22personal-firewall.final S22squid S23wpmd Diese Folder werden beim Starten der Reihe nach (dem "runlevel"= 0, 1, ..bis zum höchsten vorgesehen Runlevel) analysiert. Dabei wird eine Liste der Links mit "S" (für "Start") durchgeggangen und der Reihe nach die Skripts ausgeführt, auf welche die Links zeigen. Das (alphabetisch) elfte S-Link ist S05network (zeigt auf /etc/init.d/network) und aktiviert dann die Anbindung ans Netz. Die Links mit einem "K" ("Kill") an erster Stelle im Namen werden beim "herunterfahren", also dem geregelten Abschalten d Systems analog mit dem Parameter "stop" aufgerufen. Die einzelnen Skript erkennen an Environment Variablen , welche Aktionen sie setzen sollen, ob es also zum Beispiel überhaupt erwünscht ist, eine Ethernet-Karte zu aktivieren. Diese Variablen werden unter Linux durch die Files in /etc/sysconfig/ definiert. Manche der Scripts haben auch weiter Konfigurationsfiles (wie etwa der Webserver httpd den File /etc/httpd/httpd.conf einliest). Wenn du also neue Aktionen in diesen Startup-Prozess einbauen willst, so musst du ein entsprechendes Skript schreiben und besten in /etc/init.d ablegen. Dieses Skript (zum Beispiel namens myscript) sollte mit den folgenden Parametern aufrufbar sein: myscript [start|stop|restart] Die Option" restart" dient dazu, so ein Script auch während des normalen Betrieb (zum beispiel zum Testen Script-Konfigurationsfiles) stoppen und erneut starten zu können. Wenn du dann ein Link im geeigneten rcX.d (vermutlich in rc2.d) anlegst, solltest du den Namen so wählen, dass das Skript zum richtigen Zeitpunkt aufgerufen wird. So wird zum Beispiel S21apache (der httpd-Server) erst nach S05network aktiviert, da es anderherum sinnlos wäre. Das Skript wird dann vom System beim hochfahren mit dem Parameter "start" aufgerufen. Diese Scripts starten Prozesse, die dann meist weiterhin im Hintergund aktiv sind, sogenannte "Daemons". Aufgabe 6.1.1.A.1 29.06.2007 10:14 UNIX System, Netz und Kommunikation 4 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6.1.2 Daemon(s|en) Ein UNIX-Daemon (Disk and execution monitor) ist ein Programm, das im Hintergrund wartet und bei Bedarf bestimmte Aufgab (etwa die Mail zu empfangen oder weiterzuleiten) übernimmt. (Die alten Griechen verstanden unter einem "daimõn" ein zwisc Göttern und Menschen vermittelndes Wesen: recht zutreffend.) (Zum Titel des Kapitels: Im Englischen Daemons, im Deutschen Dämonen, diese im Englischen aber eigentlich dem Sprachverwirrung ist komplett. Hast du schlaue Kommentare?) Boot-Vorgang gesehen: Im Folder /etc/init.d gibt es Unterdirectories mit den Namen rc0.d, rc1.d, ... bis rc6.d, Wir haben im welchen die beim Start und Stop des Systeme durchzuführenden Vorgänge regeln und in Script verschiedene Prozesse aktivieren. Das sind oft eben Daemons, die dann weiter im Hintergund auf Arbeit warten. Sieh dir doch einige der Skripts an. Die meisten sind #!/bin/sh - Skripts, damit sie möglichst allgemein einsetzbar sind. Hier eine kurzer Liste einiger Skripts und der entsprechenden Daemons, die du vielleicht manchmal auch per Hand "schalten" willst: apache dein lokaler Webserver Daemon httpd cron der für die Abarbeitung der Auftragsliste (crontab) von Jobs zuständige Daemon.In der crontab kannst du angeben, welche Programme zu bestimmten Zeiten automatisch gestartet werden sollen. Das ist eine Art Superdaemon. firewall aktiviert eine Firewall, die nur bestimmte Verbindungen von/nach außen zulässt inetd startet den inetd ("Internet Superserver" Daemon), der mit Hilfe der Konfigurationstabelle /etc/inted.conf diverse Internetservices (ftp, telnet, loign, ...) aktiviert lpd line printer Daemon; mit Hilfe des Steuerungsfiles /etc/printcap werden vom lpd die Druckaufträge abgearbeitet. network aktiviert (mit Hilfe weitere commands wie etwa ifconfig) die Netzverbindung(en) aktiviert das Network File System (mit Hilfe von /etc/fstab); der nfs-Daemon (nfsd) stellt nfs gesteuert durch /etc/exports lokale Folder über Netz anderen Computern zum nfs-Mount zur nfsserver Verfügung: der automount-Daemon erlaubt es, Directories "im Fluge" bei Bedarf per NFS zu automount mounten. portmap verknüpft die internen Programmadressen mit den (vom Remote Procedure Call -Server) zur Verfügung gestellten Internet-Port-Adresses; mit Hilfe von /etc/hosts.allow und /etc/hosts.deny kann der Zugriff auf bestimmte Hosts beschränkt werden. Damit verbundene Daemons sind rpc.statd und rpc.lockd. sendmail startet den sendmail-Daemon (SMTP-Server) wvdial.dod Dial-On-Demand: wenn du eine Modemverbindung nur bei Bedarf aufbauen willst xdm X Window Display Manager Aufgabe 6.1.2.A.1 6.1.3 Konfigurationsfiles Die wichtigsten Konfigurationsfiles sind in /etc beheimatet. Einige davon wollen wir - nach ihrer Bedeutung geordnet - kurz besprechen. Für die meisten gibt es auch entsprechende man-Seite. /etc/inittab /etc/X11/XF86Config /etc/inetd.conf Konfigurationsfile von /sbin/init; konfiguriert das System beim Start und steuert das gewünsche Runlevel; aktiviert die Device-Manager (meist ein Link auf xorg.conf) konfiguriert Display, Keyboard, Maus und Monitor für das X11-System. Bitte unbedingt eine Sicherungskopie dieses Files anlegen! Konfigurationsfile für den Internet Superserver, der die Internetkontakte auf den verschiedenen Sockets den Programmen zuordnet.(SysAdmin: wenn du diesen File änderst, solltest du den inetd neu starten, beziehungsweise mit "/etc/killall -HUP inetd" ein neues Einlesen des Konfigurationsfiles erzwingen!) 29.06.2007 10:14 UNIX System, Netz und Kommunikation 5 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Beim Starten des Systems werden einige Devices "gemountet"; der Befehl mount -t type device dir verbindet ein Filedevice "device" (zum Beispiel /dev/hda3) vom Typ "type" (auto, nfs, ext2, ...) mit dem Directorynamen "dir". Datei Systeme ). Wenn Dieses Directory sollte zum Zeitpunkt des mount-Befehls schon (als leeres) angelegt sein (siehe auch man einfach nur mount ohne Parameter eingibt, so erhält man eine Liste der aktuell gemounteten Fileysteme. /etc/fstab enthält die Liste der zu bei Systemstart zu mountenden Filesysteme; man kann auf die in dieser Liste angegegeben "Mountpoints" auch bei aktivem System zugreifen und zum Beispiel mittels "mount /floppy" oder "umount /myzip" die enstprechenden filesystem aktivieren oder deaktivieren. enthält die Liste der tatsächlich im Moment gemounteten Filesysteme enthält die Liste der über NFS freizugebenden lokalen Filesysteme; mittels exportfs wird die NFS-Konfiguration aktualisiert oder angezeigt (siehe man exportfs) /etc/mtab /etc/exports Die in fstab angegebenen Directorynamen (z.B."/mydisk") kann man mit den Kurzbefehlen mount /mydisk umount /mydisk aktivieren oder deaktivieren. Symbolische Hostnamen (host.domain) und Interner-Adressen werden durch die Nameserver verknüpft. Im Normalfall wirst KEINEN Nameserver auf deinem Computer aktivieren. Wenn du eine symbolische Internetadresse (zum Beispiel bei ein WWW-URL) kntaktieren willst, so sieht das System zunächst im File /etc/hosts nach, ob dort eine Zuordnung angegeben ist. Wenn dort nichts zu finden ist, so wird versucht, mit einem der in /etc/resolv.conf angegebeben Nameserver direkt Kontakt aufzunehmen. /etc/hosts /etc/resolv.conf /etc/hostname /etc/hosts.lpd /etc/printcap /etc/hosts.equiv /etc/TIMEZONE Liste einiger bekannter Hosts; in dieser Liste muss der Eintrag für den "localhost" (127.0.0.1) stehen. Auch die symbolische und numerische Internetadresse des Computers muss dort zu finden sein. Liste der bekannten Nameserver in Reihenfolge (Achtung: Manche Linux-Konfigurationspogramme überschreiben dieen File immer nach einem Update der Konfiguration) Der Name des lokalen Computers; meist wird aus diesem Namen und der Tabelle in /etc/hosts die Internetadresse des lokalen Computers ermittelt. Liste der Hosts, von denen aus Druckaufträge für lokal verfügbare Drucker angenommen werden Information über Art der verfügbaren Drucker Liste der "befreundeten" Hosts, von denen User gleichen Usernamens auf dem lokalen Computer ohne Passwort-Angabe einloggen. Information die Zeitzone, in der sich der Rechner befindet; diese Angabe wird zum Umrechnen der Greenwich Mean Time (GMT) auf die lokale Zeit verwendet. Bei Computern in einem Netzverbund kann dazu auch ein eigener Daemon timed verwednet werden. Für die Benutzer notwendig oder nützlich sind folgende Files: /etc/passwd /etc/shadow /etc/group /etc/motd /etc/csh.cshrc /etc/csh.login Die Liste der legalen Benutzer - das können auch Daemons und andere Programme sein! Falls "shadowing" aktiviert ist: die Liste der Passwords Die Gruppenamen und unter Umständen die dazugehörenden Benutzer "message of the day", wird beim Einloggen jedem Benutzer mitgeteilt Systemweiter .cshrc-File, der bei jedem Öffnen einer csh (also zum Beispiel beim Einloggen des Benutzers) ausgeführt wird, bevor der Benutzer-eigene .cshrc ausgeführt wird. Systemweiter .login-File, der bei jedem Öffnen einer csh (also zum Beispiel beim Einloggen des Benutzers) ausgeführt wird, bevor der Benutzer-eigene .login ausgeführt wird. 29.06.2007 10:14 UNIX System, Netz und Kommunikation 6 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Weitere Konfigurationsfile zu einzelnen Daemons (wie etwa httpd) besprechen wir im Zusammenhang mit diesen. Aufgabe 6.1.3.A.1 Aufgabe 6.1.3.A.2 6.2 User Management Die Zugriffe zu Files und Directories werden über die Usernamen und Gruppenzugehörigkeit geregelt. Du solltest dir al Neueinrichtung von Benutzerberechtigungen überlegen, welche Gruppen (zusätzlich zu den vom System vorgesehenen) d einrichten willst und welche Benutzer zu welchen Gruppen gehören. Beachte dabei, dass normale Benutzer n Systembenutzer-Gruppen wie etwa "root" sein sollten. Gruppen in /ect/group Am besten richtest du eine eigene Gruppe "users" mit einer Gruppennummer ein, die höher als die der Systemprogramm (Daemons) und Applikationen (wie z.b.wwwrun oder dbmaker) ist.Wenn du mehrere Arbeitsgruppen zu betreuen hast, dann sollten das auch verschiedene Gruppen sein, da man die Zugriffsberechtigung dann entsprechend regeln kann. Benutzer in /etc/passwd Halte die Benutzernamen kurz aber verständlich. Auch die Usernummern sollten höher als die der Systemuser sein. Wenn d System über NFS mit anderen Computern verbunden ist, sollten die Usernamen und Usernummern gleicher Benutz übereinstimmen, das erleichtert manches. Es ist sinnvoll, die Arbeiten als SysAdmin von denen als normaler Benutzer auch log isch zu trennen. Verwende daher den root-Account NICHT für die alltägliche Arbeit. Auch empfiehlt es sich, das Home von root nicht dort einzurichten, wo die normalen Benutzer ihr Home haben. An der Physik legen wir das root-Home immer auf /root, die normalen Benutzer sind in /home/username zuhause. Hier noch ein Tipp: Richte einen zweiten User mit Root-Berechtigung ein, und verstecke das Passwort vor dir selbst (zum Beispiel in einem verschlossenen Kuvert). Diesen Zugang kannst du dann im Notfall zu SysAdmin Arbeiten verwenden, falls dir dein echtes root-Password einmal abhanden kommt (oder du es vergisst)!. Shadowing Da /etc/passwd für alle Benutzer lesbar (schreibbar nur für root) sein muss, können diese auch die dort abgelegten verschlüsselten Password einsehen. Nun sind diese unter UNIX zwar one-way-verschlüsselt, aber gute Crack-Program durchsuchen Password-Bibliotheken und können manchmals (vor allem schlecht gewählte) Passwords "knacken". Ein besse Schutz ist "shadowing" (siehe auch man pwconv). In diesem Fall werden die verschlüsselten Passwords in einem File /etc/shadow abgelegt, für den nur root Leseberechtigung hat. In /etc/passwd findet man statt eines Passwords das Zeichen "x". Leider ist diese Methode nicht möglich, wenn man die Passwords zentral (mittels NIS - Network Information System) verwaltet. Neue User kannst du auf verschiedene Art einrichten. Auf jeden Fall sollst du zuerst die Gruppennummer und Usern klären.Praktisch alle UNIX-Distributionen haben ein graphisches Interface, um die Einrichtung neuer Benutzer zu erleichtern. Ich will hier also nur eine Einrichtung "per Hand" besprechen. Eintragung "per Hand": Im File /etc/passwd hat jeder User eine Zeile der Form uid:encrypted-password:gid:Vollständiger Name:homedirectory:shell die ihn (Usernummer uid, Gruppenumer gid, Name), sein Home und seine Login-Shell festlegt.Zu Beginn solltest du also folge Daten vorbereiten: Username: gug Gruppennummer: 345 (Gruppenname: otherusers) Usernummer: 10012 Homedirectory: /home/gug Anfangspassword: DimwgAP Login-Shell: /bin/tcsh Editiere /etc/passwd und füge eine Zeile der folgende Form bei: gug::10012:345:Gustav Gans:/home/gug:/bin/tcsh Beachte: Du hast kein Password angegeben und daher ist der Account im Moment offen zugänglich. Das wird sich bald ändern. Als nächstes richtest du dem neuen Benutzer ein Home ein und kopierst vorbereitete Standard .login und .cshrc Files (in die Beispiel im Directory /usr/local/src abgelegt) in sein Home. mkdir /home/gug cp /usr/local/src/std.cshrc /home/gug/.cshrc 29.06.2007 10:14 UNIX System, Netz und Kommunikation 7 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php cp /usr/local/src/std.login /home/gug/.login chown -R gug.otherusers /home/gug passwd gug Schließlich setzt du sein Password auf den neuen Wert. # passwd gug New password: DimwgAP Password changed Wenn du nun die entsprechende Zeile im File /etc/passwd ansiehst, findest du zum Beispiel folgenden Eintrag: gug:tvWhJqhBDIgZo:10012:345:Gustav Gans:/home/gug:/bin/tcsh Das Password wurde also in verschlüsselter Form eingetragen. Dabei weerden auch zufällige Bits eingefügt, damit gleich Passwords verschieden verschlüsselt sind. Selbst Root kann dein Password nicht entschlüsseln (siehe jedoch 7. Security .) Wenn du shadowing verwendest, kannst du (zumindest auf manchen Systemen, wie etwa IRIX) nun noch pwconv eintippen. Damit werden die Einträge in /etc/passwd und /etc/shadow auf aktuellen Stand gebracht. Unter Linux gib es auch das Kommando useradd. So habe ich auf dem Kursrechner die Accounts eingerichtet: thph229:~ # useradd -D thph229:~ # useradd -m thph229:~ # useradd -m thph229:~ # passwd gug New password: DimwgAP Re-enter new password: Password changed thph229:~ #.... -g 100 -s /bin/tcsh -b /home -u 577 -c 'Gustav Gans' gug -u 578 -c 'Donald Duck' dod DimwgAP Die erste Zeile legt dabei die Default-Werte für Gruppe, Shell und Home-Directory fest, die anderen legen die beiden Benutzer (und ihre Homes) an. Die eingegebenen Passwords werden nicht angezeigt. Dabei kopiert Linux alle Files in einem "Skelett-Folder" namens /etc/skel in da Home des neuen Benutzers. Damit kann die oder der SysAdmin praktisch Standard Files (wie .cshrc) vorbereiten. Dann habe ich zur Kontrolle nachgesehn, ob die User wohl aktiviert wurden, zum Beispiel: thph229:~ # finger gug Login: gug Directory: /home/gug Never logged in. No Mail. No Plan. Name: Gustav Gans Shell: /bin/tcsh Da Gustav noch nie eingeloggt hat, keine Mail bekam und in seinem Home auch keineen File ".plan" angelegt hat (dieser würd sonst statt "No Plan" ausgeschrieben werden) kam obige Meldung. Da ich aber weder Donald noch Gustav als tatsächliche Benutzer auf dem Kursrechner finden will, entfernte ich sie (und ihre Home-Directories) gleich wieder mit: thph229:~ # userdel -r gug thph229:~ # userdel -r dod Aufgabe 6.2.A.1 6.3 Mail Administration Wir haben schon einige Male über Mail gesprochen: Kommunikation von Benutzer zu Benutzer Mail - allerdings mit Betonung auf der Benutzerseite. Wenn man mit einem UNIX-Mail Client wie Mail eine E-Mail abschickt, so wird ein "Transport-Agent" namens sendmail gestartet, der die eigentliche Übermittlung im Hintergrund durchführt. (Das kann au ch ein anderes Tool, wie etwa smail sein; ich beschränke mich hier auf sendmail, das noch immer die weiteste Verbreitung hat.) Das Programm sendmail sorgt mit Hilfe seiner Konfigurationsdatei /etc/sendmail.cf für 29.06.2007 10:14 UNIX System, Netz und Kommunikation 8 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 1. entweder die Übermittlung an den lokalen Host (falls die Adresse dorthin verweist) 2. oder die direkte Übermittlung an den Mailserver Daemon (Mailhost) der Zieladresse 3. oder die Übermittlung an einen Mail Relay Host, der für die weitere Übertragung sorgt. Diese Aktionen werden alle von der Konfigurationsdatei gesteuert. Ihr Inhalt ist leider eher umständlich (und vielleich unverständlich) und besteht aus zahlreichen Parameter und Mail-Makros, die die entsprechenden Namenbestimmungen Umleitungen definieren. Da die Geschichte der E-Mail Adressen eine sehr wechselhafte war, sind im Prinzip z Adressierungvarianten möglich (obwohl fast nie verwendet) und daher in diesem Konfigurationsfile vorgesehen. Die Erstellung des /etc/sendmail.cf war eine der Schwachstellen und es gibt inzwischen verschiedene Tools (zum Beispiel das m4-Makropaket), um dieses Problem zu entschärfen. Fast alle Distributoren von UNIX-Systemen liefern vorgefertigte Konfigurationsfiles, in die die lokalen Par (Hostname, Domainname, Name des nächsten Relay Hosts etc.) halb-automatisch (zum Beispiel mittels YAST-Anfrage) eingebaut sind. Im Normalfall kannst du damit leben. Wenn du allerdings einen Relay-Host konfigurieren willst, solltest du die w Dokumentation zu Rate ziehen. (Es wird behauptet, dass man kein echter UNIX-Systemadministrator ist, solange man noch kein sendmail.cf editiert hat. Es wird auch behauptet, dass man verrückt sei, wenn man es ein zweites Mal tut.) Nun kommt ein wichtiger Punkt: Für das Versenden einer Mail ist es nicht notwendig, einen sendmail-Daemon permanent (im Hintergrund) lauern zu haben, das der Mail-client diesen Prozess startet, der sich danach wieder verabschiedet. Für das Lesen einer Mail braucht der Cleint auch keinen Daemon, da die Mail entweder von einem zentralen Mailhost abgeholt wird (oder auf einem lokalen Directory /var/spool/mail oder /var/mail bereitliegt.) Um allerdings die Mail von einem anderen sendmail-Programm zu übernehmen und entweder für den zugeordnetetn Benutzer zwischzuspeichern oder auch (in Relay-Faunktion) an einen anderen Mailhost weiterzuleiten: dazu muss ein Daemon aktiv sein. Die Aktionskette ist zum Beispiel an der Uni Graz folgende: Kursrechner Benutzer grazer (offizielle Mailadresse: [email protected]) sendet Mail an [email protected]; am Kursrechner wird vom Mail-Programm das Programm sendmail gestartet, dieses nimmt Kontakt mit email.uni-graz.at auf; das ist der lokale (zentrale) Mailserver und er arbeitet sowohl als Relay als auch als Empfänger/Sender von Mail. Der sendmail-Daemon auf email.uni-graz.at ist immer aktiv und übernimmt die Mail. Dann nimmt er Kontakt mit dem sendmail-Daemon der Uni Linz, email.uni-linz.at auf. Dort wird kontrolliert, ob es einen Benutzer mit der Adresse [email protected] gibt; wenn ja, wird die entgegengenommen und lokal gespeichert. Wenn der Empfänger in Linz seinen Mail-Client (zum Beispiel Netsca Messenger) aktiviert und dieser beim Mailserver email.uni-linz.at anfägt, bekommt er seine neu eingetroffene Mail. Die Funktion der Hosts mit aktivem sendmail-Daemon ist eine sehr sensible, da der Host möglichst immer am Netz verfügbar sein sollte, genügend Speicherplatz für die ein- und auslaufende Mail haben muss, eine vorsichtige Politik bei seine Relay-Funktione beachten muss (kein Spamming! kein Weiterleiten von Mail aus gesperrten Bereichen). Leide war der sendmail.Daemon in den letzten Jahren das von Hackern vermutlich meist attackierte UNIX-Programm; er stellt ein permanentes Sicherheitsrisiko dar. Viele Gauner verwenden nicht ausreichend abgesicherte sendmail-Hosts dazu, auf Kosten des Betreibers viele Tausende von Mails (meist Reklame) zu versenden. Das Programm sendmail hat daher viele Verbesserungen hinter sich und ist zur Zeit bei Versionsnummern über 8.12. Du solltest dir also sehr genau überlegen, ob du sendmail tatsächlich als Daemon laufen lassen willst. Im Bereich der Physik haben wir uns dazu entschieden, im Normalbetrieb keinen sendmail-Daemon zu aktivieren. Damit landet alle Mail beim Uni-Mailhost email.uni-graz.at und die Betreiber (das ZID) sind für die diversen Probleme zuständig. Der Endverbraucher muss nur seinen Client geeignet einstellen. (Je nach System Typ wird der sendmail-Daemon mittels /etc/inetd.conf oder /etc/rc.config durch das SMTP-Flag aktiviert oder deaktiviert.) Eine weitere Datei ist lokale interessant: /etc/aliases. Dort können Aliasnamen, zum Beispiel für Adressaten-Gruppen vergeb werden. So bewirkt etwa der Alias postmaster: root, gustav Dass Mail für den Namen "postmaster" statt dessen an den User "root" geleitet wird. Der Alias students: einstein, curie, planck bewirkt, dass Mail an "students" and alle drei aufgelisteten User weitergeleitet wird. Nach Modifikation des Files /etc/aliases muss der Befehel newaliases ausgeführt werden, um die entsprechenden Binärdateien zu aktualisieren. (Die Aliases Datei gilt natürlich nur für den loka sendmail.) Literatur: C. Hunt: TCP/IP Netzwerkadministration (O'Reilly: 1998) B. Costales, E. Allman: Sendmail - kurz und gut(O'Reilly: 1997) 29.06.2007 10:14 UNIX System, Netz und Kommunikation 9 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php B. Costales, E. Allman: Sendmail (2nd Ed. O'Reilly: 1997) Sendmail Home Page (http://www.sendmail.org/) Eine neue Alternative zum sendmail-Daemon ist postfix: "What is Postfix? It is Wietse Venema's mailer that started life as an alternative to the widely-used Sendmail program". Mehr darüber findest du unter http://www.postfix.org Eine dritte Alternative ist qmail, mehr findest du unter http://www.qmail.org/ (es gibt sogar einen Preis für erfolgreiches Entdecken eines Security Holes!). Aufgabe 6.3.A.1 6.4 WWW Administration Zahlreiche Computer haben eigene Webserver aktiviert. Der Grund ist wohl einerseits die Selbstdarstellung des Benutze andrerseits aber ein praktischer: Viele lokale Informationssysteme und auch Datenbanken arbeiten inzwischen mit Hilfe dynamische html-Dokumenten, die also am einfachsten über einen lokalen Server bereitgestellt werden können. (Statisc Dokumente kann der Web-Client selbst lesen und darstellen.) Wir haben das WWW bereits an anderer Stelle besprochen: 4.6.1 WWW Der verbreitetste und anscheinend auch stabilste Web-Server ist Apache. Er ist in den meisten Linux-Distributionen eingebaut, und in anderen UNIX-Systemen wird er meist vom SysAdmin nachinstalliert. Verfügbar ist Apache zum Beipiel über die Homepage eines der Administrationstools (siehe webmin in http://www.apache.org . Zur Verwaltung von Apache kann man entweder Administrationstools oder das spezielle Apache-Admin-Tool http://www.comanche.org ) verwenden, oder den Konfigurationsfile bearbeiten. Die letzere Möglichkeit bietet sich für kleinere Änderungen un Erstkonfiguration an. Apache wird durch ein Script /etc/init.d/apache gestartet. Der Webserver ("http-Daemon": httpd) sollte unter einem eigenen User (meist: wwwrun) laufen, der keine Root-Rechte hat. Je geringere Rechte dieser fiktive User hat, desto besser ist es für die Sicherheit des System. Allerdings muss der Websever die zu veröffentlichenden Dokumente zumindest lesen und etwaige ausführen dürfen. Mit den Parametern [stop|start|restart] kannst du als SysAdmin nach einer Änderung des Konfigurationsfiles einen geordneten restart sorgen. Der Webserver lauschst auf das TCP/IP Port 80 (Der Secure-Teil unter Port 81). Du kannst per telnet versuchen, dieses Port eines Webservers direkt anzusprechen; du brauchst dazu allerdings die richtige Synatx. Mit dem textstring GET whatever.html bekommst du zum Beispiel den HTML-Codes des Files whatever.html im Documenthome des Webservers zurück. Genauso macht das dein Web-Client-Programm. Der Konfigurationsfile heisst httpd.conf und liegt, je nach Distribution, an verschiedenen Stellen, meist entweder irgendwo unter /usr/local/lib/ oder in /etc/httpd. Im Konfigurationsfile sind vor allem folgende Angaben wichtig, da sie dem System angepasst werden müssen: Das Document-Home des Webservers: Dort liegen die Dokumente, die der eigentlcihen Serveradresse zugeordnet werden. Wenn also der Server die Hostadresse www.webhome.at haben sollte, so liegt das Dokument mit dem URL http://www.webhome.at/file.html eben unter dem Namen file.html im Documenthome des Webservers. Meist wird man dieses Home in /usr/local/httpd/htdocs/ legen. Die Document-Homes der Benutzer: Wo sucht der Webserver Web-Files, die zum Beispiel der Benutzer mit Namen xyz abgelegt hat? Meist wählt man dafür einen bestimmten Foldernamen; die Benutzer müssen dann eine Golder dieses Namens in ihr jeweiliges Home legen. Gebräuchlich ist der Name public_html (bei uns auch: WWW); ein Dokument namens ~xyz/public_html/mylife.html könnte dann mit dem URL http://www.webhome.at/~xyz/mylife.html abgerufen werden.Der Folder ~xyz/public_html und die auf diese Art öffentlich zugänglich gemachten Dokumente (und Unterfolder) darin müssen für den Eigentümer des httpd (meist: "wwwrun") lesbar sein. Weitere Angaben über Defaults und unerlaubte Zugriffe: Man sollte etwa festlegen, welches Dokument geliefert werden soll, wenn nur ein Foldername im URL angegeben ist. Per Default ist das index.html; wenn kein solche File existiert, wird ein Verzeichnis des Folders geliefert. Das ist ein Sicherheitsproblem für manche Systeme, in denen so unbefugte Zugriffe geplan werden können. Man sollte dieses Feature daher im Konfigurationsfile ausschalten. Auch könnte man andere Default-Namen (etwa: Welcome.html) wählen. Erlaubte Scriptsprachen: Hier kann man weitere Funktionen zulassen, zum Beispiel die Verwendung von CGI-Scripts (ausführbare Shell-Scripts, die bei Aufruf html-Seiten produzieren) oder anderen Features wie etwa php-Scripts (ebenfalls dynamische html-Erzeugung geeignet). Wichtig: Der von Server an den anfragenden Web-Client gelieferte html-Code wird vom Client interpretiert (samt etwaig darin 29.06.2007 10:14 UNIX System, Netz und Kommunikation 10 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php enthaltenenen Java-Script Teilen). Die CGI- oder php-Scripts werden vom Webserver ausgeführt und stellen daher pr Sicherheitrisiko dar. Solche Skripts sollten daher sorgfältig überdacht und eingesetzt werden. Keinesfalls dürfen sie Root-Berechtigung laufen, da so ein Missbrauch geradezu herausgefordert würde. PHP wird meist als Modul des Webservers eingebaut. Bei Problemen sollte man sich vergewissern, dass die aktuelle Distribution mit den richtigen (für den geplanten Einsatz ausreichenden) Optionen erstellt wurde. Notfalls muss man ein rpm-Update durchführen oder das Modul mittels einer tgz-Version selbst neu bauen. Hier folgen Beispiele für einige der gerade besprochene Einträge in /etc/httpd/httpd.conf : ... # # User/Group: The name (or #number) of the # user/group to run httpd as. # User wwwrun Group nogroup # # Server Name # ServerName myserver.uni-graz.at # # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/srv/www/htdocs" ... # # This should be changed to whatever you set DocumentRoot to. # <Directory "/srv/www/htdocs"> ... # # UserDir: The name of the directory which is appended # onto a user's home directory if a ~user request # is received. # <IfModule mod_userdir.c> UserDir public_html </IfModule> ... <Directory /home/*/public_html > AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order deny,allow Deny from all </Limit> </Directory> ... # # DirectoryIndex: Name of the file or files to use as a pre-written HTML # directory index. Separate multiple entries with spaces. # <IfModule mod_dir.c> DirectoryIndex index.html index.php </IfModule> ... Ich habe hier nur einige der besprochenen Features herausgefischt und wiedergegeben. Die Punkte zeigen ausgelassene Teile an. Alle Einstellungen im httpd.conf sind aber in Kommentaren dokumentiert. Im Logfile des Webservers (soferne Logging aktiviert ist) kannst du jeden Zugriff nachlesen. Die Files können sehr lang werden und sollten regelmäßig gelöscht (oder archiviert) werden. Es gibt public-domain-Tools zur Analyse der Zugiffe auf deinen Webserver. Eines davon ist Analog " The most popular logfile analyser in the world ". Neuerdings (seit 2007) gibt es auch von Google eine "Analyse", siehe http://www.google.com/analytics/home/ . 29.06.2007 10:14 UNIX System, Netz und Kommunikation 11 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6.5 Dateisysteme Das kann kein Kurs über SysAdmin Aufgaben sein. Ein paar Details sollten dir aber bekannt sein. Daher kommt hier eine Übersicht, was man bei Dateisystemen beachten sollte. Aufbau Auf einem physikalischen Speichermedium wie einer Disk sind die Daten in Dateisystemen (=Filesystemen) organisiert. E Filesystem kann sich über mehrere physikalische Teile (Platten) erstrecken oder es können auf einem Medium auch me Filesysteme liegen. Ein UNIX-Filesystem hat folgenden Aufbau: Datenblock ... Datenblock Datenblock Inode-Liste (Liste der Identifikationsnummern und Informationen zu allen Files im Datenbereich) Superblock (Info zum Filesystem, Zahl der Inodes, Datenblöcke usw.) Bootblock (notwendig zum booten, aber dennoch immer vorhanden) Die Größe der Datenblöcke ist einheitlich und wird bei der Einrichtung des Filessystems (z.B. mit mkfs) vorgegeben (512, 1024, 2948, 4096). Datenblöcke werden immer als Ganzes eingelsen und sind daher die kleinste Speichereinheit. Auch ein File, der nur 1 Byte lang ist, belegt daher zumindest die Größe eine Blockes. Hier sind also Geschwindigkeit des Zugriffs (größere Blö Sparsamkeit im Falle kleiner Files (kleinere Blöcke) im Wetstreit. Ein Speichervorgang wird also oft mehrere physikalische Zugriffe auf Datenblöcke bedeuten. Wenn dazwischen der Strom ausfällt, gibt es Konsistenzprobleme, das der Schreibvorgang noch nicht abgeschlossen wurde. Bei Neustart erkennt UNIX das und versucht, das System mit Hilfe von fsck zu reparieren. Das kann bei langen Platten lange dauern.Natürlich gehen dabei Daten verloren. In neueren "journaled" Filesystemen (wie das ReiserFS) wird der Schreibvorgang protokolliert und bei einem Absturz das Protokoll nicht abgeschlossen. Damit erkennt das System sofort, wo was repariert werden muss. 6.5.1 Anmelden von Dateisystemen 6.5.2 Dateien finden und identifizieren 6.5.3 Dateien kopieren und verschieben 6.5.4 Andere Systemaufgaben 6.5.5 Backup 6.5.1 Anmelden von Dateisystemen Das Anmelden eines Dateisystems passiert durch den Befehl mount, man spricht "eingedeutscht" von "mounten". Im Lauf der Jahre wurde die Darstellung und Verwaltung der Dateien immer wieder verändert und damit neue"Dateitypen" geschaffen.So gibt es Typen wie ISO9960 (meist für CDs verwendet), vfat (FAT32 im Windows-PC-Bereich), ext2 (Linux Norm), s Zwischerspeicherdatei), efs und xfs (zum Beispiel für SGI IRIX), das neuere ReiserFS (ein Filesystem, das mehr Date gewährleistet) und andere mehr. Ein typischer Mount-Befehl lautet also mount -t vfat /dev/hda3 /winc und würde die Partition Nummer 3 auf der ersten Master IDE-Disk (hda) als lokales Directory namens /winc mounten. Das Directory /winc muss dabei vorher existieren, allerdings als leerer Folder. Nach dem erfolgreichen mount kann man die Dateien von /dev/hda3 wie solche in /winc ansprechen. Damit wird also dieses Device (hier eine Partition einer Hardisk) in den lokalen Root-Tree eingefügt. Mit umount /winc 29.06.2007 10:14 UNIX System, Netz und Kommunikation 12 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php kann das Dateisystem wieder "abgehängt" werden. Die Protection-Einstellungen des Folder /winc und werschiedene weitere Optionen des mount Befehls (siehe man mount) steuern die Zugriffsberechtigungen für Benutzer und Root. Da manche der Dateien (insbesondere die Root-Partition / , die Swap-Partion /swap und die Partiotion für den Boot-Vorgang /boot schon bei Systemstart gemountet werden müssen, kann man die Daten für die Default-Mount in den File /etc/fstab eintragen. Dort können auch mount-Daten für weitere Mounts vorgesehen werden, die man dann mit einem abgekürzten Befehl wie zum Beispiel mount /winc aktivieren kann. Wenn das Programm mount so einen Befehl ausführen soll, so versucht es die Daten zum mount von /winc in /etc/fstab zu finden. (Apropos: Wenn du mehr als eine Harddisk verwendest, ist es ein gute Idee, die swap-Partition auf eine andere Disk als hautsächlich verwendete zu legen. Damit wird der Zugriff etwas schneller, da die Diskhead nicht immer wieder hin-und-he positioniert werden muss.) Die im Moment aktuell gemounteten Devices sind im File /etc/mtab ersichtlich. Mit dem Befehl df werden der verfügbare Speicherplatz auf den im Moment gemounteten Filesystemen ausgeschrieben, zum Beispiel: 104 [thph229] %df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda3 6071616 4621048 1142120 81% / /dev/hda1 23300 3286 18811 15% /boot 105 [thph229] %cat /etc/mtab /dev/hda3 / ext2 rw 0 0 proc /proc proc rw 0 0 devpts /dev/pts devpts rw,mode=0620,gid=5 0 0 /dev/hda1 /boot ext2 rw 0 0 /proc/bus/usb /proc/bus/usb usbdevfs rw 0 0 106 [thph229] % Die Swap-Partition wird dabei verschwiegen. Wenn ein Filesystem eines anderen Computers lokal gemountet werden soll, so gibt man als Filetyp "nfs" an. Darüber mehr findest du im Abschnitt Network File System: Verwaltung . Neuerdings gibt es auch unter Linux "hotplugging", also das automatische Erkennen neuer Devices. Wenn du zum Be USB-Flashdisk ansteckst, erkennt der "hotplugger"-Daemon dies.Das neue Geräte (die Flashdisk) wird dann vermutlich Devicenamen /dev/sda1 ansprechbar sein und vielleicht in /media/sda1 gemountet.Du kannst es dann wie eine normale Disk ansprechen. Je nach Entwicklungsstadium des von dir verwendeten hopluggers kannst du entweder d as Device einfach abhängen oder du musst einen umount Befehl, zum Beispiel umount /media/sda1 eingeben, damit das Filesyetm darauf ordnungsgemäß abgeschlossen wird.Wenn due nicht sicher bist, mit welchen Devicename das neue Gerät erkannt wurde, so gib einfach dmesg an (siehe auch man dmesg). Dann kannst du an den letzten Einträge die entsprechene Aktivität und Zuordnung ablesen. 6.5.2 Dateien finden und identifizieren Neben dem üblichen Kommando ls ist ein besonders nützliches Kommando der Befehl find. Damit kann man gut Files und Folder finden, die irgendwo im angegebenen Suchbaum liegen und die bestimmte Eigenschaften haben.Das Kommando hat di Form find [Ausgangspunkt] [Bedingungen] [Auszuführender Befehl] wobei der Ausgangspunkt angibt, welchen Folder sowie alle seine Unterfolder (rekursiv) das Kommando durchsuchen s Bedingungen geben an, welche Files oder Folder gesucht werden und der Befehl wird jedesmal ausgeführt, wenn so ein Fiel o Folder gefunden wird. Ein typischer Bfehel ist find /usr/local -name "join*" -print der in /usr/local (und dessen Unterdirectories) nach Files oder Foldern sucht, deren Name mit "join" beginnt und bei Erfol vollständige Filenamen ausschreibt. Nützliche Bedingungen sind 29.06.2007 10:14 UNIX System, Netz und Kommunikation 13 von 21 -newer file -name "namestring" -user xxx -size nnn -perm mode http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Files, die jünger als der angegebene File sind "namestring kann ein legaler String mit Wilds Cards (vgl. Parameterexpansion (Wild Cards) )sind, also zum Beispiel "*.c" Files, die dem User xxx gehören Files bestimmter Größe nnn (in Bytes angegeben) Files mit bestimmte Zugriffsrechten "mode", angegeben in oktaler Codierung, also zum Beispiel 755 für die gestzten Rechte rwxr-xr-x -4000 es ist zumindest das SUID-Bit gesetzt. Das Vorzeichen wird gesetzt, wenn nach Files gefragt wird, bei denen zumindest die angegebenen Rechte gesetzt sind. Besonders wichtig für die oder den SysAdmin sind Files mit SUID oder SGID Bits. Sind diese für einen ausführbaren File ges (mittels "chmod u+s file" oder "chmod g+s file", siehe auch man chmod) so wird dieses Programm mit den Rechten des Besitzers (SUID) oder der Besitzer-Gruppe (SGID) ausgeführt. Das erlaubt es, Files (die root gehören) mit Root-Rechte auszuführen, obwohl man selbst nicht root ist. Für einige Systemkommandos ist das wichtig (zum Beispiel für das passwd 7. Kommando). Im Normalfall sollte man das aber vermeiden, da solche Einstellungen ein Sicherheitrisiko darstellen (siehe Security ). Die bei erfolgreicher Suche auszuführenden Kommandos können zum Beispiel sein -print -ls -exec cmd Der Filename wird ausgeschrieben Ein Verzeichnis der gefundenen Datei wird ausgegeben Das Kommando "cmd" wird ausgeführt. Dabei kann der gerade gefundene File mittels "{}" angesprochen werden. Das Kommando sollte mit ";" abgeschlossen werden. Man muss allerdings beachten, dass man für dieses und manche andere etwa vorkommende Zeichen Escapezeichen verwenden muss, damit der Kommandostring richtig erkannt wird. Der exec-Befehl -exec rm -f {} ; würde alle gefundenen Files ohne Rückfrage löschen. Nun benötigt find recht lange, da ja aktuell alle Files in Foldern und Unterfoldern durchsucht werden.Von GNU gibt es daher auch das Kommando locate, sofern es dein SysAdmin installiert hat. Dieses durchsucht nur eine Tabelle (z.B. /var/lib/locatedb), die vom System in regelmäßigen Abständen (mit dem Kommando updatedb) aktualisiert wird und ist daher viel schneller als find. So gibt der Befehl locate /etc/*.conf alle Files an, in denen der String /etc/*.conf vorkommt, also zum Beispiel "/etc/nscd.conf", aber auch "/etc/modules.conf.-" und "/lib/scpm/status/etc/resolv.conf". Genauere Informationen über die EVrwednung bekommst du mittels man oder auch "locate --help". Es gibt auch eine "secure" Varianten namens slocate, bei der die SysAdmin einstellen kann, welche Filebäume berücksichtigt werden sollen. Einen Nachteil hat locate: Nur die Files können gefunden werden, die bei der Erstellung der Datenbank vorhanden waren. Wenn diese also zu selten aufgefrischt wird, erlebt man eine Enttäuschung. Einige weitere nützliche Kommandos zur Identifikation von Files sind file filename strings filename Es wird versucht, anhand verschiedener Informationen herauszufinden, um was für einen File es sich handelt. Es werden die im File enthaltenen ASCII-Strings herausgeschrieben. Beide Befehle helfen dabei, mehr über den File herauszufinden, sind aber nicht "exakt". Beim strings-Befehl zu Beispiel hält sich das Programm an eine Definition, die eine Kette von Druckzeichen, die von nicht druckbaren Zeichen (wie "ESC", "BEL" et umgeben ist. Der Befehl dient vor allem dazu, Informationen über schon übersetzte Programmfiles zu gewinnen. Beide Befehl haben noch Optionen, die du mittels man findest. 6.5.3 Dateien kopieren und verschieben 29.06.2007 10:14 UNIX System, Netz und Kommunikation 14 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Einzelne Files kopieren kann man mit dem in 2.4.2 File-bezogene Kommandos und "cp". Umbenennen kann man sowohl Files als auch Folder mittel "mv". 2.4.6 Optionen schon besprochenen Befehl Um ein ganzes Directory rekursiv mit den darin enthaltenen Directories und Files zu kopieren, kann man natürlich den Befehl cp -r alt neu verwenden. Mit einer weiteren Option "-p" kann man die Fileattribute nach Möglichkeit mit kopieren. Dieser hat allerd Schönheitfehler. Zum einen werden die Fileattribute nicht in jedem Fall erhalten bleiben, sondern durch die jeweiligen Einstellungen des Benutzer modifiziert. Zum anderen werden die Datumseinträge der neu angelegten Files auf den Kopiervorganges gesetzt. Und schließlich ist die Behandlung von Links nichttrivial und kann nur durch weitere Optionen ges werden. Auch kann "cp" natürlich nur auf die lokal gemountetn Filesysteme angewandt werden. Eine meiner Meinung nach elegantere Lösung bietet "tar". Damit kann man Directories nahezu identisch kopieren, wobei alle Datumseinträge, Links und Permissions erhalten bleiben. Auch das Kopieren auf andere Maschinen, für die man e UserID/Password hat, ist möglich.Wir wollen den Folder /whatever/mydir mit allen Inhalten auf den Folder /whereever/mydir kopieren. cd whatever; tar cBf - mydir|\ ( cd whereever && tar xvBf - ) Man kann, und das ist einer der Vorzüge, aber auch von einer Maschine zu einer anderen übertragen: cd whatever; tar cBf - mydir|\ rsh remote "(cd whereever && tar xBf -)" wobei "remote" der Name der anderen Maschine ist. Wenn man dort (über den /etc/rhosts oder .rhosts Mechanismus) ein "trusted host" ist, wird nicht einmal nach einem Password gefragt. Nachteil: über ssh geht das anscheinend nicht. Oft will man ein tar-Archiv von einem Tape (DAT-Tape oder Ähnliches) einlesen. Das Tape wird default als /dev/tape gemountet and kann so auch angesprochen werden: tar xf /dev/tape . Damit wird alles von /dev/tape ins lokale Directory kopiert. Wenn das Bandgerät auf einer anderen Maschine "remote" liegt, auf der du als "xyz" einen Account hast, kann es zum Beispiel über xyz@remote:/dev/tape angesprochen werden. 6.5.4 Andere Systemaufgaben Je nach UNIX-Typ und Spezialvariante des Herstellers gibt es verschiedene Tools, um die Dateien zu überprüfen un gegebebenfalls zu reparieren. Unter IRIX gibt es einerseits den graphischen DateiManager mit entsprechenden Einträgen andrerseits Befehl wie hinv (oder gxinfo), die alle System-Komponenten (und die Graphikeigenschaften) ausschreiben. Unter Linux gibt es für die scsi-Komponenten den Befehs scsiinfo, also zum Beispiel liefert scsiinfo -f -g /dev/sda Daten für das angegebene SCSI-Device; für die IDE-Devices gibt es den Befehl hdparm, so gibt also etwa hdparm -i /dev/hda Informationen über die primäre (Master) Disk aus. Mit hdparm -tT /dev/hda erhält man Angaben über die Zugriffsgeschwindigkiet. Man kann mit dem hdparm-Befehl auch einzelne Einstellungen der Harddisks optimieren und so erhebliche Geschwindigkeitsverbesserungen erzielen. Die interne Konsitstenz eines Dateisystems (also Angabe der Datenstrukturen im Superblock, Inode-Tabelle Partitionenverzeichnisse etc.) überprüft das System mittels fsck, das je nach Systemeinstellungen mehr oder weniger regelmäßig- sicher aber nach einem Systemabsturz - ausgeführt wird. Das kann der oder die SysAdmin auch von Hand a erzwingen, muss es in machen Problemfällen auch. Der normale Benutzer sollte die Hände davon lassen und auch der Superu sollte sich vor Verwendung genau informieren. In den Bereich Hardware fällt auch der Begriff des Disk Striping: Mehrere Festplatten werden zu einer gemeinsamen Partition zusammengefügt. Das kann sowohl sequentiell als auch parallel (also scheibenweise) passieren. Damit kann die Partition g gemacht, aber (beim parallelen Striping) oft auch schneller gemacht werden. Allerdings: wenn eine der Disks ausfällt, fällt d gesamte Partition aus. Man sollte dies aber nicht für die Root-Partition (auf der also das System gemountet ist) machen. 29.06.2007 10:14 UNIX System, Netz und Kommunikation 15 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6.5.5 Backup Es kann immer wieder was schiefgehen. Die Disk kann einen Crash haben. Du kannst irrtümlich deine Dateien gelöscht haben (siehe auch weiter unten). Ein Benutzer in deinem Verantwortungsbereich kann seine Dateien zerstört haben.Was auch imm Backups sind notwendig.(Zum Trost: Ich kenne SysAdmins, deren Dateien durch eine Disk-Crash kaputt gingen, und die kein Backup hatten...) Bei einem vollständigen Backup werden alle Dateien auf das Backupmedium kopiert, bei einem inkrementellen Backup nur die seit dem letzten Backup geänderten Dateien (mittels "find -newer" herauszufinden). Du musst einen Kompromiss finden zwischen dem Aufwand des Backups und der Notewendigkeit und Sicherheit, Daten wiederherstellen zu können oder müssen. In übersehbaren Bereich wie zum Beispiel in unserem Physik-Institut werden einmal wöchentlich alle User-Daten auf d Backup-Medium kopiert. Am ZID passiert das jeden Tag. Die verschiedenen professionellen Backup-Strategien können wir hier nicht besprechen und du kannst sie bei Bedarf in Bücher über System Administration nachlesen. An Backup-Medien bietet sich folgendes an: Magnetbänder (zum Beispiel 8mm Bänder). Vorteil: mehrere GByte Platz. Nachteil: linearer, langsamer Zugriff, manchmal nicht zuverlässig (zumindest hatten wir mehrmals Probleme damit), teuer (das ändert sich mit der Zeit). ZIP-Drives, veraltet, gab es zu 100MB oder 250MB. USB-Sticks (Flashrom), praktisch zum Transport von Daten; gibt es bis zu einigen GB. CD, 640MB oder DVD (bis zu ca. 8 GB). Vorteil: die Rohlinge sind recht preiswert und soweit bekannt zu verlässig, schneller Zugriff, gute Archivierungmöglichkeit. Nachteil: kleiner Speicherplatz. Gut für private Backups g eeignet. Harddisks, viele GByte. Vorteil: Einfache Handhabbarkeit, schneller Zugriff. Nachteil: Preis (wird aber täglich günstiger). Parasitärer Backup. Das ist nur in Einzelfällen möglich und wird von der oder dem SysAdmin der so genutzten Maschine nicht gern gesehen, aber: wenn du deine Daten auf eine andere Maschine kopierst (au f der im Idealfall ein Backup gefahren wird), bietet das auch Datensicherheit. Aber, wie gesagt, das sollte nicht die Regel sein!!! Man muss übrigens zwischen Backup und Datenspiegelung unterscheiden. Da Harddisks preiswert geworden sind, kann man sogenannte Datenspieg elung vornehmen, also zum Beispiel alle Datenspeicherungen gleichzeitig auf zwei Harddisks (also Zwillinge, siehe "RAID-1") vornehmen. Diese Spiegelung hilft vor allem bei dem Hardwareausfall einer Disk, da ja die zweite Disk eine identische Kopie ist . Wenn du allerdings deine Daten selbst irrtümlich gelöscht hast, hilft diese Spiegelung nichts: die Daten wurden auf beide n Disks gelöscht. Eine fortgeschrittenere Variante sind RAID-Devices "Redundant Array of Independent (Inexpensive?) Disks". Es gibt verschiedene Arten ( "Levels") von RAID. An sich ist es ein Methode, um mehrere Disk zu kombinieren, entweder zu einem großen Filebereich oder um Ausfallsicherheit zu erreichen. Mit einer Kombination von 5 Disks kann man zum Beispiel eine Disk zur Sicherheitprüfung abstellen und durch geeignete Codierung (Stichwort: Hamming-Code) auch bei Totalausfall einer Disk alle Daten von 4 Disks r ekonstruieren. RAID-0 Hier werden einfach mehrere Disks aneinander "gehängt"; das wird auch "striping" genannt. Wenn eine Disk ausfällt hat man Pech gehabt. RAID-1 In dieser Version werden Disken "gespiegelt". Wenn eine Partnerdisk ausfällt, gibt es dennoch keinen Datenverlust. RAID-2 Es werden Prüfbits (Hamming Code) zur Fehler-Erkennung und -Korrektur eingesetzt; bei SCSI-Disks passiert das automatisch. RAID-3 und RAID-4 Hier werden mehrere Disks aneinander gehängt und die Prüfbits auf einer separaten Disk gespeichert. Wenn eine der Datendisken ausfällt, kann die Information rekonstruiert werden. RAID-5 RAID Level 5 Level 4 ähnlich, verteilt aber die Prüfbits auf alle Disks. Wenn eine Disk ausfällt, ist dennoch noch die ganze Information rekonstruiertbar. Man verwendet zumindest 3, typisch aber 5 Disks in ei ner Gruppe. RAID-0 ist am schnellsten aber nicht sicher. RAID-5 ist die beste Lösung in einer Multi-User Umgebung, solan Schreibgeschwindigkeit nicht allzu wichtig ist. Näheres findet ihr zum Beispiel hier: http://www.uni-mainz.de/~neuffer/scsi/what_is_raid.html . Das eigentliche Problem beim Backup ist Manpower. Bei den meisten der genannten Medien muss sich jemand darum kümmer also Bänder oder CDs einlegen, das Backup starten, überwachen und so weiter. Wenn die oder der Zuständige darauf vergisst (oder krank wird, oder auf Urlaub geht), gibt es Probleme. Das war in unserem Institut die Motivation, ein automatischen Backup auf Harddisks einzuführen. Für den privaten Gebrauch musst du selbst die Entscheidung treffen. Oft ist da ein mehrstufiges Vorgehen nützlich. Du könntes etwa regelmäßig eine Gesamtkopie auf CDs brennen und dazwischen inkrementelle Backup-Kopien auf einer eigenen 29.06.2007 10:14 UNIX System, Netz und Kommunikation 16 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Backup-Disk anlegen. Weitere hierher passende Themen sind Modelle, um verschiedene Entwicklungsgenerationen von Programmen zu archivieren. Das Revision Control System (RCS) bietet diese Möglichkeit (mehr mit man rcs). Dabei werden ausgehend von Urversionen jeweils alle Änderungen zu Zwischenversionen eines Programms oder einer ganzen Gruppe von Programmen gespeichert. Da kann jeder Entwicklungsschritt rekonstruiert werden. Aufgabe 6.5.5.A.1 Wenn du irrtümlich wichtige Files gelöscht haben solltest, für die es kein Backup g ibt, so ist UNIX nicht nett zu dir. Es gibt kein "undelete". (Du könntest dir sowas allerdings selbst basteln, also das rm Kommando durch eines ersetzen, das die zu löschenden Files in ein Mistkübeldirectory $HOME/.mist kopiert, dass erst später- zum Beispiel bei logout - gelöscht wird). Wenn doch pass iert ist, der File ist gelöscht und du bist gleich danach draufgekommen: Von 10 bis 1 rückwärtszählen und "Dont't panic" sagen. Den Filebereich sofort unmounten oder mit read-only mounten (wenn es die Root-Partition ist, geht das nur mit einem Neustart von einer CD und mounten der Rootpartiontion unter anderem Namen. Den Filebereich mit fsdb untersuchen, oder mit Spezialtools wie zum Beispiel dem Coroner's Toolkit von http://www.fish.com/tct/ . Bei mir hat es beim letzten Mal nicht geklappt. Alles Gute! 6.5.6 Network File System: Verwaltung Wir haben in Network File System schon kurz in dieses Dateisystem eingeführt. Damit können Filesysteme (oder Teile davon) von anderen Computern im Netz au dem lokalen Rechner wie andere lokale Dateien angesprochen werden. Die SysAdmin muss den Export der so veröffentlichten Folder freigeben. Die von einem Computer "exportierten" Files s Zugriffsrechte sind in /etc/exports angegeben. Die genaue Syntax der Fileeinträge hängt von der UNIX-Variante ab und sollte mittels man überprüft werden. Zwe Zeilen könnten zum Beispiel lauten: /usr/local/software adam.kfunigraz.ac.at(r) eva.kfunigraz.ac.at(r) /home caesar.kfunigraz.ac.at(rw) adam.kfunigraz.ac.at(rw) eva.kfunigraz.ac.at(rw) Damit wird dem nfs-Daemon mitgeteilt, dass der angegeben File-Baum (also zum Beispiel /home/...) für den NFS-Export an bestimmte Computer freigegeben wird.Es wird der Folder /usr/local/software mit Leseberechtigung für die Rechner adam und eva freigegeben, der Folder /home mit Lese- und Schreibrechten für caesar, adam und eva . Mit dem Kommando exportfs (wenn die $PATH Variable nicht geeignet gesetzt wird, sollte man den vollen Pathnamen /usr/sbin/exportfs verwenden) kann man die Liste der aktuell exportierten Files bekommen. Mit exportfs -u (unexport) werden die Exporte storniert, mit exportfs -a werden alle im File /etc/exports angegebenen Dateisysteme exportiert. Wenn ein Rechner eine NFS-System eines Remotehosts auf seinem eigenen Rechner verwenden will, muss er es "mounten", also einen geeigneten mount-Befehl mit Filetype "nfs" eingeben oder in /etc/fstab eintragen (dann wird der Filebereich bei Boot automatisch gemountet). Der lokale Folder, auf dem der nfs-Folder aufgespannt werden soll, muss als leerer Folder existieren u kann an beliebiger Stelle im lokalen Filebereich sein. Ein solcher Eintrag in /etc/fstab könnte lauten meitner:/home /localhome nfs defaults 0 0 womit der von meitner exportierte Folder /home auf der lokalen Maschine unter dem Namen /localhome verfügbar ist. Der Benutzer merkt nicht, dass localhome kein lokaler Folder ist. Wenn ein automount-Daemon gestartet wurde, passiert das gleichsam unsichtbar, wenn der Benutzer zum Beispiel d gewünschten File /home/xxx/myfile, der auf dem Computer remotehost liegt, als /hosts/remotehost/home/xxx/myfile anspricht. Es wird dann der entsprechende Filebaum des remotehost auf einem lokalen Folder /hosts/remotehost/... gemountet. 29.06.2007 10:14 UNIX System, Netz und Kommunikation 17 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Auf diese Art kann man in einem Netz zum Beispiel alle Userhomes auf einem zentral Fileserver anlegen, der eben /home a anderen Computer exportiert.Man muss dabei darauf achten, dass die jeweiligen Homefolder (im jeweiligen /etc/passwd oder üb NIS bekanntgegeben) auf den anderen Maschinen auch richtig gefunden werden können.Eine Version wäre es, /home auf Fileserver auch unter dem Namen /home auf allen beteiligten Computern zu "mounten". Wir haben in unserem Bereich ein reges hin-und-her Mounten von Foldern auf verschiedenen Maschinen. Es hat sich als s erwiesen , auf den beteiligten Rechnen einen Folder /hosts einzurichten, darunter Folder mit den Maschinennamen (e /hosts/meitner, /hostsphysik, ...) und darin die entsprechenden nfs-Mounts unterzubringen. Wichtig: Alle beteiligten Rechner sollten dieselben Gruppen- und User-Bezeichnungen haben (angegeben in /etc/group und /etc/passwd oder mitgeteilt über NIS). Wenn du selbst Dateisysteme deines Computer auf diese Art exportieren willst, solltest du das nur tu wenn du dir über die Verlässlichkeit (des oder der SysAdmin und der Benutzer) des anderen Computers sicher bist. Auch sollte der Computer zumindest im gleichen Subnetz stehen, um das Vortäuschen eines anderen Namens möglichst zu verhinde feindseliger SysAdmin eines anderen Computers kann jederzeit einen Benutzer gleicher ID erzeugen, der sich dann als rechtmäßigen Besitzer deiner gemounteten Dateien ausgeben kann. Da beim NFS-Mount nicht nach Passwords gefragt wird, solche Einbruchversuche vergleichbar einfach durchzuführen... Auf dem Fileserver müssen die Dienste portmap oder rcpbind, mountd oder rpc.mountd, sowie nfsd oder rpc.nfsd laufen.Auf dem Klienten müssen portmap oder rpcbind, sowie biod oder nfsiod laufen. Aufgabe 6.5.6.A.1 6.6 Printer Gerade hier unterscheiden sich die beiden UNIX-Varianten BSD und SysV deutlich. Die BSD-Variante scheint aber weiter verbreitet zu sein und setzt sich zunehmend durch. Ich werde daher zwar beide Versionen besprechen, die Betonung aber auf d BSD Version (die auch in Linux verwendet wird) legen. Wenn mit einem Print-Kommando Files zum Drucker geschickt werden, muss meist noch Arbeit vom System geleistet we Bestimmte Zeichen am Beginn des Files werden dazu verwendet, automatisch die Art des Files (normaler ASCII-Text POSTSCRIPT File, GIF- oder JPEG-Files etc.) zu identifizieren, und so die richtige Vorarbeit für den Drucker zu leisten. ASCII-Texte können meist ohne viel "drumherum" an den Drucker geschickt werden. POSTSCRIPT-fähige Drucker könne selbständig entsprechende Files analysiseren und drucken. Andere Drucker müssen die Files jedoch in gerasterter Form übertragen bekommen - das bedeutet mehr Transfer und dauert länger. Bild-Files müssen meist erst in geeignete Form geb werden. All das erledigen sogenannte Filter, von denen der Endverbraucher tunlichst nichts merken soll. Die Umwandlung in gerasterte Druckfiles erfolgt übrigens meist mit Hilfe des "Ghostscript"-Pakets von http://www.ghostscript.com/ , das im Public-Domain Bereich verfügbar ist. Unter Linux kann man Ghostscript auch über die Distributionen einspielen od rpm-Paket von http://www.rpm.org holen. Das Druck-Kommando kopiert den Printfile in eine lokales "Spool-Directory" und übergibt den Druckauftrag dem loka Printer-Daemon (Printer-Spooler). Dieser sendet den File entsprechend der Angabe des gewünschten Druckers entweder an lokalen Drucker oder an einen im Netzwerk verfügbaren Drucker. Den Printer-Daemon kann man über ein Script in /etc/init.d stoppen und starten. Das ist manchmal bei "Abstüzen" des Printer-Daemons sinnvoll. Soweit ist die Vorgangsweise UNIX-Systemen gemeinsam. Der Unterschied ligt in den Namen und im Detail. SysV Print Spooling Der Printer-daemon ist lpsched. Ein File "printfile" wird mittels lp -dPrinter printfile an den Drucker mit dem Namen "Printer" gesendet. Der Printspooler Daemon kann mit dem Script /etc/init.d/lp [stop|start|restart] vom SysAdmin neu gestartet werden. Der oder die SysAdmin sollte wissen, wo sich das Spool-Directory befindet. Meist ist es in in einem Unterdirectory von /var/spool/lp, das den Namen des Druckers hat. BSD Print Spooling Der Printer-Daemon ist lpd. Ein File "printfile" wird mittels lpr -PPrinter printfile an den Drucker mit dem Namen "Printer" gesendet (Option "-P"). Mittels "line printer queue" lpq -PPrinter 29.06.2007 10:14 UNIX System, Netz und Kommunikation 18 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php kann nach der aktuellen Queue (Warteschlange) des Drucker gefragt werden. Mit "line printer remove" lprm -PPrinter id kann der Druckauftrag mit der Nummer "id" aus der Warteschlange des Druckers "Printer" entfernt werden. Der Lineprinter Daemon kann durch das Systemscript /etc/init.d/lpd [stop|start|restart] gestoppt und gestartet werden Die Printer werden meist je nach Distribution durch eine Menü (zum Beispiel beim SuSE-Paket unter yast) konfiguriert. Wenn m nicht weiss, auf welchen der Devices der lokaler Printer angeschlossen ist, hilft es vielleicht, einfach echo "hello 0" > /dev/lp0 echo "hello 1" > /dev/lp1 einztugeben, und zu kontrollieren, bei welchen der beiden Befehle der Printer reagiert. Die verschiedenen Printer werden durch das Installationsmenü in dem File /etc/printcap definiert. Manchmal ist aber auch ein manueller Eintrag praktikabel. Lokale Printer - wie etwa Inkjets, die selbständig kein POSTSCRIPT verstehen - brauchen Filter, um die nicht-ASCII-Files vorzubereiten. Ein Filterpaket im Public-Domain-Bereich, das meist verwendet wird, ist "apsfilter". Die entsprechenden Verweise finden sich auch in /etc/printcap. Ebenso findet man dort Einträge über im Netz verfügbare Drucker. Hier ist ein Beispiel für zwei Einträge in einem /etc/printcap File: 102 [physik] %cat /etc/printcap # tp_a|remote printer on xaver.uni-graz.at:\ :sd=/var/spool/lpd/tp_a:\ :rm=xaver.uni-graz.at:\ :rp=tp_a:\ :sh:mx#0: # ### BEGIN apsfilter: ### bjc800 a4 color 360 ### # Warning: Configured for apsfilter, do not edit the labels! # apsfilter setup Thu Mar 29 10:28:20 CEST 2001 # tp_d|lp|lp2|bjc800-a4-auto-color-360|bjc800 a4 auto color 360:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/bjc800-a4-auto-color-360:\ :lf=/var/spool/lpd/bjc800-a4-auto-color-360/log:\ :af=/var/spool/lpd/bjc800-a4-auto-color-360/acct:\ :if=/var/lib/apsfilter/bin/bjc800-a4-auto-color-360:\ :la@:mx#0:\ :tr=:cl:sh:sf: # ### END apsfilter: ### bjc800 a4 color 360 ### Der erste Eintrag bezieht sich auf einen im Netz verfügbaren Drucker, der durch den Printer-Hosts xaver.uni-graz.at verwaltet wird, der zweite Eintrag definiert einen lokal verfügbaren Canon BJC800 InkJet. Im BSD-UNIX kann man im File /etc/hosts.lpd alle die Computer angeben, von denen aus auf einem der lokalen Drucker gedruckt werden kann. Wenn also im /etc/printcap ein Netzwerkdrucker angegeben wird, so muss auf dem Printer-Host der eigene Computer in /etc/hosts.lpd eingetragen sein! Im File /etc/printcap findet man auch den Verweis auf das lokalen Spool-Directory. Wenn der Druckauftrag an einen Netzwerkdrucker geht, wird Druckfile allerdings rasch daraus verschwinden und kann dann nicht mehr aus der Druckwarteschlange (die ja dann am Printer-Host liegt) entfernt werden. Die einzige Möglichkeit ist es, sich auch am Printerhost einzuloggen und es dort zu versuchen. Samba Das schon besprochene Paket ( ) erlaubt es, verschiedene Drucker im Netz zentral anzusprechen. Vom Samba-Rechner aus müssen dazu alle Drucker (lokale und Netzwerkdrucker) verfügbar sein (der Sambarechner also auch im /etc/hosts.lpd aller Printer-Hosts eingetragen sein). Die Benutzer selbst müssen auf dem Samba-Rechner eine Zugangsberechtigung haben. Aufgabe 6.6.A.1 6.7 Software und Admin-Tools Hier geht es um folgende Themen: 29.06.2007 10:14 UNIX System, Netz und Kommunikation 19 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6.7.1 Import von Software 6.7.2 Nützliche Software 6.7.3 Administrationstools 6.7.1 Import von Software Software, die nicht zur originalen UNIX-Installation gehört, die aber allen Benutzern zur Vefügung stehen sollte, wird üblicherweise im Folder /usr/local untergebracht. Es ist üblich, in diesem Folder eine Directory-Struktur ähnlich wie unter /usr zu anzulegen: /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man In diese Foldern finden sich ausführbare Programme (bin), Bibliotheken (lib), Include (header) Files (include), man-Pages (man) und so weiter. Ich empfehle, zumindest auch Directories wie install (für zu installierende Software), misc (für Miscellanous Verschiedenes) und src (für Source, meist Textfiles) anzulegen: /usr/local/install /usr/local/misc /usr/local/src Die oder der SysAdmin sollte dann die entsprechende Suchpfade (also die systemweiten Variablen wie $PATH und $MANPATH) um dieser Folder erweitern. Beim Import von Software beachte bitte Software aus fragwürdigen Quellen solltest du nur als Source-Code importieren und zunächst nur als normaler User installieren. Erst nach einer Beobachtungsphase kannst du sie für alle Benutzer in Systemfolder legen. Software mit vorkompilierten Programmen ist mit besonderer Vorsicht zu "genießen"; auch bei ansonsten vertrauenswürdigen Verteilern können sich tronjanische Pferde einschleichen. Ideal wäre eine Installation und Beobachtung auf einer "Quarantäne-Maschine" - aber die kann sich meist nur ein größerer Betrieb leisten. Bei tar-files: Lass dir zuerst mit "tar tf ..." ein Listing erstellen, damit du weißt, wohin der File entpackt wird. Im GNU-Bereich gibt es unzählige Software-Pakete. Meist sind sie als tgz-Files (also Directories mit Files, die in ein zusammengefasst und dann komprimiert wurden) verfügbar, die sowohl alle notwendigen C-Programme und deren Hilfsfile enthalten, also auch Makefiles (siehe Die make Utility ) sowie Informationsfiles wie README oder INSTALL enthalten. Nach dem Herunterladen (Achtung: bei ftp "binary" Mode verwenden!) empfiehlt sich folgende Vorgangsweise: swpaket.tgz in einen geeigneten Folder (zum Beispiel /usr/local/install) legen mittels tar tzf swpaket.tgz ein Listing der im Pakte enthaltenen File ansehen. Meist wird das Paket in einen ei genen Unterfolder mit geeigneter Bezeichung, z.B. sw_3.01 entpackt. Entpacken mittels tar xvzf swpaket.tgz In dem Folder mit der neuen Software befinden sich vermutlich Files mit den Namen README, INSTALL, Makefile. Lies diese Files sorgfältig und befolge die dort angegebeben Instruktionen. Fast immer m uss man lokale Anpassungen (z.B. die Art des UNIX-Systems oder den Namen von lokalen Directories wie /usr/local/bin) vornehmen. Das kann entweder durch Editieren eines "Makefile" oder durch ein vielleicht beigefügtes "./configure" Script geschehen. Nach diesem Schritt muss man meistens make (in diesem Schritt wirden die Source Files übersetzt) und make install (die ausführbaren Files oder Libraries werden an den Einsatzort kopiert) ausführen. Damit ist die importierte Software dann einsetzbar. Hinweis: Lege in diesen Folder auch einen File README.local an, in den du deine Notizen zu den notwendigen Adaptierungen einträgst. Oft wirst du später neuere Versionen der Software installi eren. Dann ist dieser Kommentar sehr nützlich 29.06.2007 10:14 UNIX System, Netz und Kommunikation 20 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php Alle nicht benötigten Files sollten gelöscht werden; wenn du die Ausgangsdateien au fheben willst und nur die überstzten .o Files und andere temporäre Files löschen willst, geht das oft mit make clean. Schließlich solltest du noch die Eingetümer und Rechte der verbeliebenden Software überprüfen. Wenn der Installationsbereich vo rhanden bleiben soll, und du als root unterwegs bist, empfiehlt sich ein "chown -R root.root foldername" . Der Nachteil der so selbst installierten Software: Die derart angelegten Files werden vom System selbst in keine Liste vermerk Damit kann das System kein "uninstall" durchführen, wie es bei Paketen der Original-Distribution meist möglich ist. In Linux wurde von der Firma Redhat der sogenannte "rpm" (Redhat Package Manager) eingeführt, der inzwischen fast zu Standard geworden ist. Die mittels rpm importierten Pakete sind an der Erweiterung ".rpm" erkennbar (zum Beisp webmin_0.85.rpm); sie sind pre-kompiliert und können daher nicht speziell angepasst werden. Sie müssen also den Standards und der Generationsnummer der einzelnen Distributionen folgen. Das geht manchmal schief und dann muss man eine tgz-Ver selbst importieren und installieren (am besten in /usr/local). Zum Abschluss noch ein paar Hinweise für SysAdmins. Wenn du feststellen willst, welche Shared Libraries ein schon über (vielleicht importiertes) Programm "newprog" benötigt, so geht das mit ldd newprog Wenn du neue Bibliotheken ("libraries", zum Beispiel in /usr/X11/lib) eingefügt hast, solltest du /sbin/ldconfig -v ausführen, um die entsprechenden Tabellen zu aktualisieren. Viele Konfigrautionstools (wie etwa yast bei SuSE Linux) erledigen das für dich. 6.7.2 Nützliche Software Einige Software-Pakete sind recht nützlich und sollten daher installiert werden. Diese Liste ist natürlich unvollständig und naturgemäß sehr persönliche Ansichten wieder. Meist sind die Pakete auf den Distributionen verfügbar, manchmal muss man selbst importieren. htdig Verfügbar über http://www.htdig.org/, die ht://Dig Homepage . Es handelt es sich dabei um ein Programmpaket zur raschen Indizierung vieler Dateien im eigenen Webserver-Bereich. Indexsuche zu diesem Kurs verwendet dieses Tool. glimpse und webglimpse Verfügbar über http://www.webglimpse.net . Erfüllt ähnlich Aufgaben wie htDig. (my)sql und sqladmin Verfügbar über http://www.mysql.com und ein Administrationsprogramm über phpMyAdmin (http://www.phpwizard.net/projects/phpMyAdmin/) . Dies ist (zumindest im Linux-Bereich) die vermutlich am weitesten verbreitete Datenbank. Auch die Daten zu deisem Kurs werd über sql verwaltet. Das auf php-Scripts basierende mysqladmin erlaut einfache Bearbeitung und Analyse der Daten über ein WWW-Interface. php Verfügbar über http://www.php.net . Eine Script-Sprache, mit der sehr elegant dynamische html-Seiten erstellt werden können. Das sind Seiten, deren Inhalt sic abhängig von der Art des Aufrufs ändert, die also dem jeweiligen Aufruf angepasst werden könnnen. Dazu muss php in Web-Server eingebunden werden. Dieser Kurs ist auf Grundlage von php Seiten strukuriert. Der eigentliche Text besteht html-Seiten, die durch php-Scriptfiles in den allgemeinen Rahmen eingebunden werden. PGP Verfügbar über www.pgpi.org oder auch GNU's www.gnupg.org . "Pretty Good privacy" ist ein Encryption-Standard, mit dem man seine Identität mit einen Schlüssel-System mitteilen und bestätigen lassen kann, und mit dem auch Texte verschlüsselt übertragen werden können. Literatur: S. Garfinkel: PGP (O'Reilly, 1996) 29.06.2007 10:14 UNIX System, Netz und Kommunikation 21 von 21 http://physik.kfunigraz.ac.at/~cbl/Unix/admin/mk_combined_file.php 6.7.3 Administrationstools Viele Distributionen haben eigene Installationstools (wie etwa yast oder yast2 bei SuSE, oder der SystemManager SoftwareManager bei SGI IRIX).Einzelne Tools (etwa Samba) haben eigene Administrations-Interfaces, andere haben zusätzli Tools (sqladmin für mysql, comanche für apache, etc.). In letzter Zeit ist es üblich geworden, diese Interfaces unter einem (beliebigen) Web-Client laufen zu lassen und damit eine bessere Verfügbarkeit zu erreichen. Ich will hier nur ein Tool b hervorheben, da es für mehrere System-Administrationsaufgaben gleichzeitig geeignet ist: webmin. Viele Einstellungen des Systems lassen sich durch das Tool "webmin" steuern. Es ist dies ein WWW-Interface, das über ein eigenes TCP/IP Port angesteuert wird. Die Portnummer kann die oder der SysAdmin festlegen, um so zusätzliche Sich gewährleisten. Insbesondere folgende Systemkomponenten sind mit webmin daher auch übers Netz steuerbar: httpd (Apache) nfs die Harddsiks (Filesystem) DNS (domain name serving, falls notwendig) Samba Sendmail Das Tool ist verfügbar über http://www.webmin.com . Im Augenblick der Erstellung dieses Textes liegt es in Version 0.85 vor. (Ich hat te Probleme, es als rpm-Paket zu installieren und wählte daher die tgz-Version.) Schon erwähnt habe ich "SITAR - System InformaTion At Runtime" ( über das installierte System und die Konfigurationsfiles liefert. http://sitar.berlios.de/ ) welches vollständige Informationen 29.06.2007 10:14