Der Webserver ist quasi die komfortable Bedienoberfläche für das Schulnetz. Über diesen Server werden einzelne CGI-Scripte ausgeführt, mit denen man zum Beispiel einen neuen Benutzer anlegen kann. Ansonsten lässt sich die Homepage der Schule anschauen und jeder Benutzer kann im Ordner public_html/ in seinem Homeverzeichnis seine eigenen Seiten im Schulnetz veröffentlichen.
Als Webserver wird apache verwendet. Falls apache noch nicht installiert ist, lässt sich dies mit apt-get install apache nachholen. Die Konfigurationsdatei heißt /etc/apache/httpd.conf. Diese muss an einigen stellen angepasst werden. Der folgende Ausschnitt aus der Konfigurationsdatei soll einen Anhaltspunkt geben, was gegenüber der Standardkonfigurationsdatei von Debian verändert werden muss:
# # /etc/apache/httpd.conf # ### Section 1: Global Environment # Keine Änderungen nötig ### Section 2: 'Main' server configuration ServerAdmin webmaster@gm.rt.schule-bw.de ServerName server.gm.rt.schule-bw.de DocumentRoot "/usr/local/httpd/htdocs" <Directory /> AuthUserFile /etc/apache/passwd AuthGroupFile /etc/apache/group Order allow,deny Options None AllowOverride None </Directory> # # This should be changed to whatever you set DocumentRoot to. # <Directory /usr/local/httpd/htdocs/> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> # Einzelne Verzeichnisse <Directory /usr/local/httpd/htdocs/admin/> AllowOverride None Options ExecCGI FollowSymLinks Indexes DirectoryIndex index.html index.cgi AuthType Basic AuthName "Systemverwaltung" AuthUserFile /etc/apache/passwd AuthGroupFile /etc/apache/group require group admin </Directory> <Directory /usr/local/httpd/htdocs/internet/> AllowOverride None Options ExecCGI FollowSymLinks DirectoryIndex index.html index.cgi AuthType Basic AuthName "Internet-Einwahl" AuthUserFile /etc/apache/passwd AuthGroupFile /etc/apache/group require group internet </Directory> <Directory /usr/local/httpd/htdocs/organisation/> AllowOverride None Options Indexes DirectoryIndex index.html index.htm AuthType Basic AuthName "Organisation" AuthUserFile /etc/apache/passwd AuthGroupFile /etc/apache/group require group lehrer </Directory> <Directory /usr/local/httpd/htdocs/passwd/> AllowOverride None Options ExecCGI FollowSymLinks DirectoryIndex index.html index.cgi AuthType Basic AuthName "Passwortaenderung" AuthUserFile /etc/apache/passwd AuthGroupFile /etc/apache/group require group users </Directory> <Directory /usr/local/httpd/htdocs/mail-config/> AllowOverride None Options ExecCGI FollowSymLinks DirectoryIndex index.html index.cgi AuthType Basic AuthName "Mail-Weiterleitung" AuthUserFile /etc/apache/passwd AuthGroupFile /etc/apache/group require group users </Directory> <Directory /usr/local/samba/homepage/> AllowOverride None Options Indexes FollowSymLinks Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ /usr/local/httpd/cgi-bin/ <Directory /usr/lib/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> <IfModule mod_mime.c> AddHandler cgi-script .cgi .sh .pl </IfModule> <IfModule mod_userdir.c> UserDir /home/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>
Es wurden für einige Verzeichnisse die Zugriffsrechte gesetzt. Oft muss man sich erst anmelden (AuthType Basic), wenn man so ein Verzeichnis betreten will.
Mit /etc/init.d/apache restart wird die neue Konfiguration übernommen. Jetzt wird noch ein Script benötigt, das die Dateien /etc/apache/passwd und /etc/apache/group erzeugt. Diese sind für eine Anmeldung notwendig. Das Script mit dem Dateinamen /usr/local/sbin/generate_apache_auth ist im Anhang zu finden.
Dieses Script wird mit chmod 700 /usr/local/sbin/generate_apache_auth ausführbar gemacht. Jedesmal, wenn ein neuer Benutzer angelegt wird, wenn ein Benutzer gelöscht wird oder wenn ein Passwort geändert wurde, muss dieses Script ausgeführt werden.
Über einen POP3-Server können sich die Benutzer ihre Mail komfortabel über einen Mailclient (z.B. Mozilla-Mail, Outlook Express) abholen. Der POP3-Server verwendet die Mailboxen der lokalen Benutzer auf dem Server. Mit apt-get install qpopper wird ein einfacher POP3-Server installiert. Die Standardkonfiguration genügt; dieser Server muss nicht konfiguriert werden. Falls doch: Die Konfigurationsdatei heißt /etc/qpopper.conf.
Über den Proxy-Server squid erhalten die Clients Zugang zum Internet. Alle Rechner im Schulnetz greifen also nicht direkt auf das Internet zu, sondern nur auf den Proxy-Server, der dann die gewünschten Daten liefert. Zuerst muss die Software installiert werden: apt-get install squid. Die Konfigurationsdatei heißt /etc/squid.conf. In der Datei müssen einige Einstellungen angepasst werden. Hier sind die wichtigen Einstellungen:
# # /etc/squid.conf # ftp_user webmaster@gm.rt.schule-bw.de # ACCESS CONTROLS # --------------- [...] # INSERT YOUR OWN RULE(S) HERE... acl schulnetz src 192.168.0.0/255.255.255.0 acl server dst 192.168.0.1 http_access allow schulnetz append_domain .gm.rt.schule-bw.de always_direct allow server
Mit /etc/init.d/squid restart wird die Konfiguration übernommen.
Der Filter, der als Jugendschutzfilter eingerichtet werden kann, sperrt bestimmte Internetadressen. Aktuelle Listen erhält man unter http://www.squidguard.org/blacklist/.
Die Filtersoftware heißt squidguard und wird mit apt-get install squidguard installiert. Damit der Filter im Proxy integriert wird, muss /etc/squid.conf bearbeitet werden. Es müssen folgende zwei Einträge existieren:
# # /etc/squid.conf # [...] redirect_program /usr/bin/squidGuard redirect_children 5
Dann müssen neue Blacklisten unter der oben genannten Adresse heruntergeladen werden. Mit cd /var/lib/squidguard/db; tar xfzv ~/blacklists.tar.gz wird das Archiv ins richtige Verzeichnis entpackt. Danach muss noch chmod -R 777 /var/lib/squidguard/db/blacklists ausgeführt werden. Die Konfigurationsdatei heißt /etc/squid/squidGuard.conf. Sie muss folgenden Inhalt haben:
# # /etc/squid/squidGuard.conf # logdir /var/log/squid dbhome /var/lib/squidguard/db src localnet { ip 127.0.0.0/8 ip 192.168.0.0/24 } dest ads { domainlist blacklists/ads/domains urllist blacklists/ads/urls } dest aggressive { domainlist blacklists/aggressive/domains urllist blacklists/aggressive/urls } dest audio-video { domainlist blacklists/audio-video/domains urllist blacklists/audio-video/urls } dest drugs { domainlist blacklists/drugs/domains urllist blacklists/drugs/urls } dest gambling { domainlist blacklists/gambling/domains urllist blacklists/gambling/urls } dest hacking { domainlist blacklists/hacking/domains urllist blacklists/hacking/urls } dest mail { domainlist blacklists/mail/domains } dest porn { domainlist blacklists/porn/domains urllist blacklists/porn/urls #expressionlist blacklists/porn/expressions } dest proxy { domainlist blacklists/proxy/domains urllist blacklists/proxy/urls } dest violence { domainlist blacklists/violence/domains urllist blacklists/violence/urls #expressionlist blacklists/violence/expressions } dest warez { domainlist blacklists/warez/domains urllist blacklists/warez/urls } acl { localnet { pass !aggressive !porn !violence all redirect http://server/cgi-bin/blocked.cgi?clientaddr=%a&url=%u } default { pass none redirect http://server/cgi-bin/blocked.cgi?clientaddr=%a&url=%u } }
Damit werden die Adresslisten "aggressive", "porn" und "violence" abgeblockt. Wer eine solche Seite aufruft, bekommt das Script blocked.cgi zu sehen. Dieses Script gibt eine Fehlermeldung aus oder, wenn der Filter eine Bilddatei blockiert (z.B. Werbung), dann wird /usr/local/httpd/htdocs/blocked.gif angezeigt. Das Script blocked.cgi muss noch im Verzeichnis /usr/local/httpd/cgi-bin/ erstellt werden:
#!/usr/bin/perl # # /usr/local/httpd/cgi-bin/blocked.cgi # use CGI; $q = new CGI; $clientaddr = ""; $url=""; $clientaddr = $q->param('clientaddr') if defined($q->param('clientaddr')); $url = $q->param('url') if defined($q->param('url')); if ($url =~ /\.(gif|jpg|jpeg|mpg|mpeg|avi|mov)$/i) { print "Content-type: image/gif\n"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time); printf "Expires: %s, %02d-%s-%02d %02d:%02d:%02d GMT\n\n", $day[$wday], $mday,$month[$mon],$year,$hour,$min,$sec; open(GIF, "$ENV{'DOCUMENT_ROOT'}/blocked.gif"); while (<GIF>) { print; } close(GIF); } else { print "Content-type: text/html\n"; printf "Expires: %s, %02d-%s-%02d %02d:%02d:%02d GMT\n\n", $day[$wday], $mday,$month[$mon],$year,$hour,$min,$sec; print <<EOF; <html> <head> <title>403 Forbidden - Zugriff verweigert</title> </head> <body> <center> <h1>403 Forbidden - Zugriff verweigert</h1> Der Zugriff wurde Ihnen aus einem der folgenden Gründe verweigert: <table border="0"> <tr><td> <ul> <li>Ihre IP-Adresse ist nicht aus dem Bereich des Schulnetzes</li> <li>Der Jugendschutzfilter ist aktiviert. Die Filterkategorien sind: <ul> <li>aggressive</li> <li>porn</li> <li>violence</li> </ul> </ul> </td></tr> </table> Wenn diese Seite zu Unrecht gesperrt wurde, schreiben Sie eine Mail an<br> <a href="mailto:proxymaster\@gm.rt.schule-bw.de"> proxymaster\@gm.rt.schule-bw.de</a> </center> </body> </html> EOF } exit 0;
Mit chmod 755 /usr/local/httpd/cgi-bin/blocked.cgi wird das Script ausführbar gemacht. Damit squidGuard später schneller startet, wird squidGuard -C all einmal ausgeführt. Dabei werden die Adresslisten in ein Datenbankformat konvertiert. Mit /etc/init.d/squid restart wird der Filter letztendlich aktiviert.
Damit der Netzwerkdrucker später über Samba den Windows-Clients zur Verfügung gestellt werden kann, muss der Netzwerkdrucker (der übrigens auch lokal am Druckerport des Servers angeschlossen sein könnte) zunächst auf dem Server eingerichtet werden. Dazu wird das "Common UNIX Printing System" benötigt, das mit apt-get install cupsys cupsys-client noch nachinstalliert werden muss. Konfiguriert wird das Druck-System über einen Webbrowser. Als Text-Browser eignet sich lynx. Möglicherweise muss dieser mit apt-get install lynx nachinstalliert werden. Mit /etc/init.d/cupsys start wird das Druck-System gestartet.
Mit lynx http://localhost:631/ wird der Webbrowser zur Konfiguration gestartet. Hier muss zunächst Manage Printers ausgewählt werden, danach Add Printer. Der Browser fragt nun nach einem Benutzernamen. Einfach "root" und das root-Passwort verwenden. Auf der nächsten Seite muss der Freigabe-Name eingegeben werden, also z.B. "netzdrucker". Location und Description sind weniger wichtig. Mit Continue geht's weiter. Auf der folgenden Seite muss jetzt als Device "AppSocket/HP JetDirect" ausgewählt werden. Im Feld Device URI auf der nächsten Seite muss "socket://192.168.0.254:9100" eingetragen werden. Model/Driver ist "Raw" und "Raw Queue (en)". Das bedeutet, dass die Druckdaten genau so an den Drucker weitergeleitet werden, wie der Windows-Client sie verschickt. Unter Windows muss also noch ein passender Druckertreiber installiert werden. Das war's soweit. Der Rest muss unter Samba konfiguriert werden.
Samba stellt den Windows-Clients Speicherplatz zur Verfügung: Ein Homeverzeichnis, ein Verzeichnis für temporäre Daten, ein öffentliches Verzeichnis und ein Verzeichnis für Windows-Programme. Für bestimmte Benutzergruppen gibt es weitere Verzeichnisse: Homepage und Admin beispielsweise. Außerdem gibt es noch ein sogenannten "netlogon-script", das beim Anmelden bei Samba auf dem Client gestartet wird und die Verzeichnisse automatisch einbindet. Zusätzlich gibt Samba noch den Drucker frei, der im vorigen Abschnitt eingerichtet wurde.
Zunächst muss samba installiert werden; das geht mit apt-get install samba. Die Konfigurationsdatei heißt /etc/samba/smb.conf. Sie hat folgenden Inhalt:
# # /etc/samba/smb.conf # [global] workgroup = WORKGROUP netbios name = server server string = Samba Server comment = Samba Server hosts allow = 192.168.0. load printers = yes printcap name = cups printing = CUPS guest account = nobody #log file = /var/log/samba/log.%m # für jede Maschine eine eigene Logfile log file = /var/log/samba/log.smb log level = 1 max log size = 1000 # in KB syslog = 0 security = user encrypt passwords = yes smb passwd file = /usr/local/samba/private/smbpasswd passwd program = /usr/bin/passwd %u unix password sync = yes socket options = TCP_NODELAY keepalive = 30 interfaces = eth0 local master = yes os level = 65 domain master = yes preferred master = yes domain logons = yes logon script = logon.bat # für Roaming Profiles (WinNT) #logon path = \\SERVER\%U\profile # für Roaming Profiles (Win9X) #logon home = \\SERVER\%U\profile wins support = yes # alles in eine Zeile! invalid users = root daemon bin sys sync games man lp mail news uucp proxy postgres www-data backup operator list irc gnats identd sshd gdm telnetd ftp nut faxmaster partimag mysql homepage internet valid users = +users nobody admin users = +admin [printers] comment = All Printers path = /var/spool/samba browseable = no public = yes guest ok = yes writeable = no printable = yes [netlogon] path = /usr/local/samba/netlogon write list = +admin guest ok = yes [homes] comment = Heimatverzeichnis von %U # wegen public_html: www-data force group = www-data read only = no create mask = 0755 browseable = no [tmp] comment = Temporaere Dateien path = /usr/local/samba/temp force group = users read only = no create mask = 0664 directory mask = 0775 guest ok = yes [pub] comment = Oeffentliches Verzeichnis path = /usr/local/samba/pub write list = +lehrer force group = lehrer create mask = 0664 force create mode = 0664 directory mask = 0775 force directory mode = 0775 guest ok = yes [homepage] comment = Gymnasium-Muensingen Homepage path = /usr/local/samba/homepage write list = +homepage force group = homepage create mask = 0664 force create mode = 0664 directory mask = 0775 force directory mode = 0775 [programme] comment = Programme fuer Windows path = /usr/local/samba/programme write list = +admin force group = admin create mask = 0664 force create mode = 0664 directory mask = 0775 force directory mode = 0775 guest ok = yes [programdata] comment = Programm-Daten path = /usr/local/samba/programdata # jeder darf schreiben (Windows-Programme brauchen das ;-) write list = +users nobody force group = users create mask = 0664 force create mode = 0664 directory mask = 0775 force directory mode = 0775 guest ok = yes [admin] comment = Admin-Verzeichnis path = /usr/local/samba/admin valid users = +admin force group = admin read only = no create mask = 0660 force create mode = 0660 directory mask = 0770 force directory mode = 0770
Die angegebenen Verzeichnisse müssen natürlich existieren (alles unter /usr/local/samba/). Außerdem müssen für diese Verzeichnisse die passenden Zugriffsrechte gesetzt sein. Mit /etc/init.d/samba restart werden die Einstellungen übernommen.
Für die Druckfunktion muss das Verzeichnis /var/spool/samba existieren. Außerdem muss es den Mitglieder der Gruppe "users" erlaubt sein, in dieses Verzeichnis zu schreiben (sonst dürfen diese Benutzer nicht drucken). Dies ist zu erreichen mit den folgenden zwei Befehlen:
chgrp users /var/spool/samba chmod g+wx /var/spool/samba
Hier ist das Netlogon-Script. Es verbindet einige Netzlaufwerke, sodass diese im Explorer zur Verfügung stehen. Außerdem wird die Uhrzeit des Clients nach der Server-Uhr gestellt. Damit es keine Probleme mit Mozilla-Profilen gibt, wird eine Datei bei jedem Einloggen auf den Client kopiert; in dieser Datei steht, dass das Mozilla-Profil unter "H:\Mozilla" zu finden ist.
Das Script heißt logon.bat und muss in der netlogon-Freigabe liegen.
@echo off net use h: \\server\homes /yes net use i: \\server\homepage /yes net use v: \\server\pub /yes net use t: \\server\tmp /yes net use p: \\server\progs /yes net time \\server /set /yes rem Mozilla-Profil-Konfiguration: copy \\server\netlogon\registry.dat C:\WINDOWS\Anwendungsdaten\Mozilla /Y
Samba benützt drei Logdateien: In /var/log/samba/log.nmbd protokolliert der nmbd-Dämon seine Zugriffe. In /var/log/samba/log.smbd steht, wann der smbd-Dämon gestartet wurde. Und in /var/log/samba/log.smb steht, wer auf irgendwelche Freigaben zugegriffen hat. Diese Logdateien sollen auch mit logrotate rotiert werden. Damit dies zuverlässig klappt, wird vor dem Rotieren der Samba-Dämon gestoppt und danach wieder gestartet.
Die Datei /etc/logrotate.d/samba muss folgenden Inhalt haben:
/var/log/samba/log.smb { weekly missingok rotate 7 prerotate /etc/init.d/samba stop || true killall -q smbd || true endscript compress notifempty } /var/log/samba/log.smbd { weekly missingok rotate 7 prerotate /etc/init.d/samba stop || true killall -q smbd || true endscript compress notifempty } /var/log/samba/log.nmbd { weekly missingok rotate 7 prerotate /etc/init.d/samba stop || true killall -q nmbd || true endscript postrotate /etc/init.d/samba start endscript compress notifempty }
Da es offenbar öfters vorkommt, dass der Samba-Server, nachdem er ein paar Tage ununterbrochen lief, nicht mehr reagierte, wird der Samba-Server nun mittels eines Cron-Jobs täglich neugestartet. Dazu wird im Verzeichnis /etc/cron.daily/ die Datei samba-restart erstellt:
#!/bin/sh /etc/init.d/samba stop sleep 4 /etc/init.d/samba start sleep 4 # überprüfen, ob nmbd läuft ps `cat /var/run/samba/nmbd.pid` > /dev/null if [ $? -eq 1 ]; then # nmbd läuft nicht... /etc/init.d/samba stop sleep 4 /etc/init.d/samba start fi
Die Datei muss noch mit chmod 755 /etc/cron.daily/samba-restart ausführbar gemacht werden.