#Befehle zur Vorbereitung apt-get update apt-get upgrade apt-get clean apt-get install build-essential apg-get install checkinstall cd /usr/local/src mkdir lamps cd lamps #Installation OpenSSL wget http://www.openssl.org/source/openssl-1.0.1p.tar.gz tar -xzvf openssl-1.0.1p.tar.gz cd openssl-1.0.p ./config --prefix=/usr/local/openssl make make test checkinstall --fstrans=no #Paketname, Defaulteinstellungen lassen #Installation Webserver cd /usr/local/src/lamps wget http://mirror.switch.ch/mirror/apache/dist/httpd/httpd-2.2.31.tar.gz #Apache wird nun als DSO-Version kompiliert->Module wie PHP können dynamisch geladen werden. #\-verwenden um den Befehl auf Zeilen aufzuteilen tar -xzvf httpd-2.2.3.1.tar.gz cd httpd-2.2.31/ /configure \ --prefix=/usr/local/apache2 \ --enable-modules=most \ --enable-shared=max \ --enable-ssl \ --with-ssl=/usr/local/openssl make checkinstall --fstrans=no cd #Status der installierten Pakete dpkg -s openssl dpkg -s httpd #Alle dazugehörigen Dateien anzeigen dpkg -L openssl | less dpkg -L httpd | less #Paket entfernen dpkg -r openssl
Schlagwort: Server
Apache – Fehlerlogging
ErrorLog
#Beispiel ErrorLog /var/log/mylog.log | syslog[:facility] #Standard ErrorLog logs/error_log #Standard LogLevel LogLevel error
Es gibt folgende Log-Level:
- emerg
- Notfallmeldungen
- System nicht benutzbar
- alert
- Schnelle Eingriffe nötig
- crit
- Kommunikationsprobleme
- Kritische Bedingungen
- error
- Script kann nicht richtig ausgeführt werden
- warn
- Situation nicht ganz richtig
- Apache konnte keine Lösung finden
- “chilc process XXXX did not exist”
- notice
- Meldungen wie Neustart
- info, debug
- nur für Entwickler interessant
Zugriffslog
#Standard LogFormat "%h %l %u %t \"%r\" %>s %b" #modul: mod_log_config
Variablen
Variable |
Bedeutung |
%b | Anzahl Bytes ohne HTTP-Header |
%f | Clientname dessen der die Datei anfordert |
%{Variable}e | Hier kann eine Umgebungsvariable eingebaut werden |
%h | Off: IP wird protokolliert On: Lookup der IP -> Name wird protokolliert |
%a | “, der FQDN wird aber stattdessen protokolliert |
%{Header}i | Headerteil; bsp {Referer} – die Verweisquelle ist erwähnt |
%l | Name vom Clientrechner mit identd |
%{note}n | mitprotokollieren der notes, die zwischen Modulen ausgetauscht werden |
%{Header}o | BSP: %{LastModified }o – das Datum der letzten Änderung der ausgelieferten Datei wird protokolliert |
%p | Portadresse des Servers |
%P | ProzessID PID des Apache-Prozesses, welcher die Anfrage beantwortet hat |
%r | erste Zeile der Clientanforderung |
%s | HTTP-Statuscode |
%t | Zeitangabe |
%{format}t | Eine formatierte Zeitangabe. Der Eintrag %{%A, %d. %B %Y %H:%M:%S %Z}t liefert die Ausgabe Sunday, 12. Juni 2016 19:20:08 Westeuropäische Sommerzeit |
%T | benötigte Zeit fürs Ausführen der Anfrage |
%u | Username, der bei einer Benutzerabfrage gewählt wurde |
%U | URL-Pfad der Anfrage |
%v | Name des entsprechenden virtuellen Servers |
%V | Name des virtuellen Servers, abhängig von der UseCanonicalNames-Direktive |
CustomLog
#Beispiel CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %b"
FTP
Benutzer & Gruppen anlegen
#Falls noch keine FTP-Gruppe vorhanden ist: groupadd ftpuser #Hinzufügen der User, mit -g Gruppe definieren, mit -m ein Homeverzeichnis erstellen, mit -c Kommentar angeben useradd ftp-user1 -g ftpuser -m -c ftp-Benutzer1
Serverordner-Eigentümer berechtigen
chown ftp-user1 /srv/.../user1/ -R chgrp ftpuser /srv/.../user1/ -R chmod 755 /srv/.../user1/ -R
proFTP konfigurieren
Einige Eintragsauszüge der proftpd.conf:
ServerName "my-ftp-server" ServerType standalone DefaultRoot ~/ ftpuser #alle User nicht reinlassen (ausser Gruppe ftpuser) <Limit Login> DenyGroup !ftpuser </Limit Login>
#Start/Stop /etc/init.d/proftpd start /etc/init.d/proftpd start
Apache – Virtualhosts
Wie bereits erwähnt, können über das HTTP 1.1 -Protokoll bestimmte Seiten geliefert werden. Diese können mit Vhosts konfiguriert werden.
Ip-Basiert
Früher konnten Webseiten nur IP-basiert gemacht werden. Dies ist der DocumentRoot-Eintrag.
<VirtualHost 192.168.220.10> DocumentRoot /usr/local/apache2/htdocs/vhosts/1page </VirtualHost>
Listen
Listen 192.168.200.5:80
Namensbasiert
<VirtualHost 192.168.200.5> DocumentRoot /usr/local/apache/htdocs/vhosts/mypage ServerPath /mypage ServerName mypage.ch ServerAlias www.mypage.ch </VirtualHost>
Portbasiert
<VirtualHost 192.168.200.5:8888>
Testen der Konfiguration ohne den Server neu zu starten:
/usr/local/apache2/bin/httpd -t -D DUMP VHOSTS
Apache – Berechtigungen
Auf einem Apache-Webserver lassen sich Berechtigungen geben. Sei dies mit der Konfiguration oder dem .htaccess-File.
Achtung: Es muss unter Umständen konfiguriert werden, dass die .htaccess-Datei die Berechtigungen steuern kann.
Ein Beispiel für einen Unterordner, der in jedem vhost enthalten ist:
<Directory /var/www/virtualhosts/*/download/> ... </Directory>
(Fast) Dasselbe gilt auch für Files: (Beispielsweise eine Adminseite, die nur mit entsprechenden Rechten aufrufbar sein soll)
<Files /var/www/virtualhosts/*/admin.php> AuthName “Admin-Seite” AuthType Basic AuthUserFile /apache2/passwords/admin.passwd AuthGroupfile /apache2/passwords/admin.groups Require Group webpage-admin </Files>
So müsste man sich mit dem entsprechenden Benutzer anmelden.
Location
Dies lässt zu, Verzeichnisse zu steuern, obwohl sie beim Dateisystem nicht vorhanden sind.
<Location /nothinghere> </Location>
Reihenfolge
- <Directory>
- <Files>
- <Location>
Authentifizierung
Benutzerdatei erstellen
Benutzer, die verwendet werden, um Zugriffe auf Webseiten zu steuern müssen mit htpasswd unter /usr/local/apache2/bin diese dort erstellt werden.
hostname:~ # /usr/local/apache2/bin/htpasswd -c \ >/usr/local/apache2/passwords/.htpasswd testuser New password:**** Re-type new password:****
Standardmässig sind diese Benutzer mit Crypt verschlüsselt.
AuthTypes
- Basic
- Funktioniert bei allen Browsern
- Ist verfügbar, wenn das Modul mod-auth aktiv ist
- Nicht verschlüsselt
- Digest
- benötigt das Modul mod_auth_digest
- Wird mit md5-Hash verschlüsselt
- Realm&Zufallswert werden gesendet, damit – auch wenn der Realm bekannt ist, noch Sicherheit da ist.
- Digest wird noch nicht von allen Browsern unterstützt
#AuthName AuthName Realm #AuthUserFile AuthUserFile Dateiname #Verweis auf entsprechende Passwortdatei (meist .htpasswd) #AuthGroupFile AuthGroupFile Dateiname #Gruppendatei, meist .htgroup #require Require Nutzerart (Nutzernamel][Nutzername2] #Legt fest, wer zugreifen darf #user require user benutzer1, benutzer2 #Benutzer, die nach PW-Eingabe Zugriff haben #group require group gruppe1 #valid-user require valid-user #es werden alle berücksichtigt, die in der entsprechenden Passwortdatei vorhanden sind.
Deny, Allow
Deny from all | host Allow from all | host Order [Sortierung] Allow from www.ichdarf.com Allow from 192.168.1.10
Satisfy
Macht nur Sinn, wenn Benutzer und Deny, Allow verwendet werden.
Beispiele:
Order deny, allow Deny from all Allow from localhost AuthType Basic AuthName "Ordner Bezeichnung" AuthUserFile /usr/local/apache2/passwords/.htpasswd Require user testuser Satisfy any
Bei Satisfy any kann ein Benutzer von localhost ohne Zugangscheck zugreifen. Von einer anderen Domain muss die Zugangskontrolle durchgeführt werden. Bei Satisfy all müssen Benutzer von localhost auch den Zugangscheck machen, alle andern dürfen dann gar nicht mehr.
Benutzermanagement
Bei wenigen Benutzern macht es sinn, nur Benutzerdateien zu haben. Bei grösseren Mengen, ist es eher geeignet, dafür Datenbanken zu verwenden.
- DBM
- DBM-Datenbanken sind eigentlich nur Dateien, die über Unix vorhanden sind
- Apache bietet das Modul mod_auth_dbm
- Beispieltool: dbmmanage
- MySQL
- Zugriffsgeschwindigkeit ist höher als bei Textdateien
- Modul mod_auth_mysql
- LDAP
- Grosser Verzeichnisdienst
- Verwaltung von diversen Informationen
- Wird auch sonst als zentrale Login-Möglichkeit verwendet
- Modul mod_auth_ldap
Handler
- Server-Status
- Server-Info
SetHandler NameHandler #Beispiel Serverstatus SetHandler server-status #Beispiel Zugriff auf Server-Info <Location /server-info> AuthType Basic AuthName "Server-Info" AuthUserfile /usr/local/apache2/passwords/admin.passwd Require Valid-User SetHandler server-info </Location>
httpd.conf
Pfad: /usr/local/apache2/conf/httpd.conf
ServerRoot
ServerRoot "/usr/local/apache2"
PidFile
Hier ist definiert, wo die Verzeichnisse conf & logs zu finden sind:
PidFile logs/httpd.pid
In dieser Datei ist auch die aktuelle ProzessID. So kann die Prozessnummer ausgelesen und “gekillt” werden:
Kill -USR1 ’cat /usr/local/apache2/httpd.pid'
Listen
Hier lässt sich die Portnummer des HTTP-Servers angeben. Wenn eine andere Portnummer unter 1024 genommen wird, muss der Server mit root-Rechten neu gestartet werden.
Listen 80 Listen 192.170.2.1:80 Listen 192.170.2.5:8000
ServerName
ServerName localhost:80
User, Group
Sobald der Apache startet, muss er mit Benutzerrechten auf die Serverdaten zugreifen. Diese User heissen meist wwwrun, www-data, httpd, apache usw.
User daemon Group daemon
DocumentRoot
DocumentRoot /usr/local/apache/htdocs
ErrorDocument
ErrorDocument 404 "<h1>Ups, nothing found</h1>" ErrorDocument 404 /error/404.php ErrorDocument 404 http://404.com/
IndexOptions
IndexOrderDefault Descending Size IndexIgnore *.php .?? #Dateien wie .php oder .htaccess nicht anzeigen
AddIcon
AddIcon /srv/icon.ico *.png
Weitere Varianten:
#DefaultIcon Defaulticon /srv/icon.ico #AddIconByEncoding AddIconByEncoding (CMP, /srv/icon.gif) x-compress x-gzip #AddIconByType AddIconByType (SND,/srv/soundicon.gif) audio/ #AddAlt AddAlt TXT *.txt #AddDescription AddDescription "theseareimages" *.jpg
LAnguage
LanguagePriority de en fr AddLanguage de de AddLanguage en en AddLanguage fr fr Options +MultiViews DefaultLanguage de
<Directory> -Tag
Durch Beschränkungen von Richtlinien auf einzelne Ordner können Indizes und Icons besser gesteuert werden. Dies funktioniert auch mit <Files> und <Location>.
<Directory /folderuwant/download> IndexOptions ... AddIconByType ... </Directory>
Übersicht Apache
Installationsstruktur
Unter /usr/local/apache2/ befinden sich folgende Ressourcen:
- bin
- Alle ausführbaren Programme, die zu Apache gehören
- cgi-bin
- Das Programm printenv lässt einem Umgebungsvariablen von Apache (sofern Perl installiert ist) anschauen
- conf
- Hier sind die Apache-Konfigurationsdateien abgelegt. Die wichtigste davon ist httpd.conf. Falls einmal Konfigurationsdateien verstellt sind, ist die httpd.conf.default vorhanden, auf die man allenfalls zurückwechseln könnte
- error
- Ort der HTTP-Fehlerdokumente
- htdocs
- Standardverzeichnis für HTML-Seiten
- icons
- logs
- Logfiles
- manual
- englische Dokumentation
- modules
- Die hinzugefügten Module (weitere können dynamisch dazugeladen werden)
Start/Stop
Folgende Befehle können verwendet werden, um den Apache-Server zu steuern:
/usr/local/apache2/bin/apachectl start /usr/local/apache2/bin/apachectl stop /usr/local/apache2/bin/apachectl restart