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>

 

 

 

HTTP-Protokoll

HTTP-Anfrage

Sending request:

GET /nonexistent.html HTTP/1.1
Host: www.google.ch
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
Referer: http://www.rexswain.com/httpview.html
Connection: close
Receiving Header:
HTTP/1.1·404·Not·Found(CR)(LF)
Cache-Control:·private,·max-age=0(CR)(LF)
Date:·Mon,·11·Jun·2019·04:11:23·GMT(CR)(LF)
Expires:·-1(CR)(LF)
Content-Type:·text/html;·charset=UTF-8(CR)(LF)
Server:·gws(CR)(LF)
X-XSS-Protection:·0(CR)(LF)
Transfer-Encoding:·chunked(CR)(LF)
Connection:·close(CR)(LF)

Sending Request

Methode
Bedeutung
CONNECT
  • dient der Kennzeichnung von SSL-Anfragen
  • lässt einem «unerkannt» durch Proxyserver kommen
DELETE
  • löscht die angegebene Ressource auf dem Server
GET
  • Anforderung der Ressource
  • Kann Dokument, Stream, Script usw sein
  • Redirects werden vom Server übernommen
  • GET /wp-content/uploads/2016/06/letters-820×312.jpg HTTP/1.1\r\n

 

HEAD
  • Ist fast wie die GET-Anweisung
  • Es wird nur ein Header ohne Daten geliefert
  • Wird benutzt, wenn ein Proxyserver checken will, ob ein Dokument noch gültig ist
OPTIONS
  • eine Methode, bei der angefragt wird, ob es bestimmte Voraussetzungen benötigt, um auf eine Ressource zuzugreifen
POST
  • Hier werden Variablen nicht in der Anforderung sondern in einem Datenteil übertragen.
  • Es ist ein zusätzliches Datenpaket, das gesendet wird.
PUT
  • Die Daten, die mit POST übertragen werden, sollen an einem bestimmten Ort auf dem Server gespeichert werden.
TRACE
  • dient zur Verfolgung von Anfragen
  • für Übermittlung über mehrere Proxyserver interessant
  • kann zur Diagnose verwendet werden

Client Header

HTTP-Header
BEDEUTUNG
Accept Beispiel: Accept: style/css

  • Gibt die Mime-Typen an, die der Browser verarbeiten kann.
Accept-Charset Beispiel: Accept-Charset: ISO 8859-1

  • Gibt die unterstützten Zeichensätze an.
Accept-Encoding Beispiel: Accept-Encoding: gzip

  • Gibt die Kodierungsmöglichkeiten an, die der Browser verarbeiten kann
Accept-Language Beispiel: Accept-Language:de, en, fr

  • Gibt die Art und die Reihenfolge der akzeptierten Sprachen an.
Authorization Beispiel Basic:
Authorization: nutzername passwortBeispiel Digest:Authorization: Digest username=»me»,
realm=»iwantin@localhost‘;
nonce=»Iss9zb710qdd2e0e86cIdOf6606ss0c099″,
uri=“/no/download/»,
qop=auth,
nc=00000001,
cnonce=»3ag5116b»,
response=»6d59fae497t3b05332951k55222c4ef1 «,
opaque=»5cdhh69c8ln9baf9f0171e951ff4fe41″‚

  • Bei Basic wird das Passwort unverschlüsselt gesendet
  • Bei Digest findet eine umfassendere Kommunikation statt
Cache-Control Beispiel: Cache-Control: min-fresh = 5000

  • Dieser Header kann vom Client und vom Server benutzt werden. Die Direktiven sind jedoch für Header und Server unterschiedlich. Grundsätzlich geht es um die Zwischenspeicherung innerhalb eines Proxy-Cache.
  • no-cache – Antwort nicht zwischenspeichern.
  • no-store – Antwort ebenfalls nicht im Cache speichern (bezieht sich auf sensible Daten).
  • max-age = 36 – die Antwort des Servers darf nicht älter als 36 Sekunden sein.
  • max-stale = 7000 – eine zwischengespeicherte Antwort des Servers wird akzeptiert, allerdings darf das Ablaufdatum der Antwort nicht älter sein als die angegebene Zeit in Sekunden (700).
  • min-fresh = 3000 – eine Antwort des Servers wird akzeptiert, wenn das Ablaufdatum die aktuelle Zeit zuzüglich der angegebenen Sekunden nicht überschreitet.
  • no-transform – das Dokument soll nicht in ein anderes Format umgewandelt werden.
  • only-if-cached – nur Daten aus dem Server-Cache werden akzeptiert
Cookie Beispiel: Cookie: CookieDaten=982

  • So kann der Browser feststellen, ob die es ein Cookie des entsprechenden Servers gibt
  • Häufig bei Zugangskontrolle gebraucht (mit CGI-Scripts)
From

 

Beispiel: From: test@modul239.com

  • Möglichkeit eine Mailadresse mitzusenden
  • Wird aus Datenschutzgründen kaum verwendet
Host Beispiel: Host: iet-gibb.raphaelphoto.ch

  • Angabe, um bei virtuellen Servern die entsprechende Seite zu liefern
  • Ansonsten wird auf die Default-Konfiguration zurückgegriffen
Referer

 

Beispiel: referer: google.com

  • URL des Clients
User-Agent

 

Beispiel: User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

  • der Browser des Clients.
Via

 

Beispiel: Via: SIP/2.0

  • Informationen über den Proxy, über den diese Anfrage gelaufen ist.

Body

Bei der Client-Anforderung ist es möglich, einen Body mitzusenden. Beispielsweise bei POST-Method Formularen. Die Werte stehen dann im Body der Anfrage. Bei PUT wird die zu übertragene Datei auch im Body mitgesendet.

Serverantwort

Codes

  • 100er: Informationsmeldungen
  • 200er: Erfolgsmeldungen
  • 300er: Umleitungsmeldungen
  • 400er: Clientbasierte Fehlermeldungen
  • 500er: Serverbasierte Fehlermeldungen

Wichtigste Meldungen

200 OK Die Daten wurden wie gewünscht versendet. Das sollte der Normalfall sein!
203 Non-Authoritative Der Statuscode enthält zusätzliche Informationen, Information, die nicht vom angeforderten Server selbst kommen, sondern von einer anderen Software, die auf dem Server-System eingesetzt wird, beispielsweise einem Proxy-Server
301 Moved Permanently Die Daten sind vorübergehend unter einem anderen Anfrage-URI erreichbar. Die neue Adresse wird in der Antwort mit angegeben. Webbrowser fordern dann diese Adresse an und der Benutzer merkt davon nichts.
404 Not Found Die Daten wurden nicht gefunden. Dieser Statuscode entsteht oft, wenn Benutzer per Hand einen komplexen Anfrage-URI in den Browser eintippen und sich dabei verschreiben.
500 Internal Server Error Die Daten werden nicht gesendet, weil auf dem Server ein Fehler aufgetreten ist. Meistens konnte ein CGI-Skript nicht gestartet werden.

Weitere Meldungen und Spezifikationen können unter https://www.w3.org/Protocols/rfc2616/rfc2616.txt eingesehen werden.

Header

Im Header, der vom Client an den Server gesendet wird können praktisch alle bereits erwähnten Header verwendet werden. Es gibt noch einige zusätzliche. Hier sind einige Beispiele:

  • Cache-Control
    • public: darf zwischengespeichert werden
    • private: antwort darf nicht zwischengespeichert werden
  • Retry-After
    • Retry-After 3600
    • Kann verwendet werden, wenn Anfragen erneut gesendet werden können (Bsp. Error 503)
  • WWW-Authenticate
    • WWW-Authenticate: Basic realm=»something»
    • Liefert Informationen für die Zugangskontrolle

Bei solchen Headerantworten kommt anschliessend immer eine Leerzeile.

WebDAV

Beim HTTP-Protokoll gibt es nicht wirklich eine Möglichkeit, gemeinsam an Dokumenten zu arbeiten. Es gibt aber eine Erweiterung: WebDAV (Web based Distributed Authoring and Versioning).
So lassen sich gemeinsam Dokumente bearbeiten und teilen. Bearbeiter können damit auch Dokumente Sperren und weiter bearbeiten ohne Netzwerkverbindung zu haben.
Es können auch Metadaten zugeordnet werden (Bsp. Autorname)

Namespace-Management

Methode
Bedeutung
COPY Kopiert Collections und Ressourcen innerhalb eines zusammenhängenden Namensraums
LOCK Setzt für den Überschreibschutz eine Sperre auf eine Collection oder Ressource.
MOVE Verschiebt Collections und Ressourcen innerhalb eines zusammenhängenden Namensraums.
MKCOL Erzeugt eine neue Collection.
PROPFIND Liest Metadaten von Ressourcen oder Collections.
PROPPATCH Schreibt Metadaten von Ressourcen oder Collections.
UNLOCK Gibt eine gesperrte Collection oder Ressource wieder frei.

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

Sicherungstypen

Vollsicherung

Bei der Vollsicherung wird jedes einzelne Mal jede Datei kopiert und gesichert. Dies führt bei einer häufigen Sicherung zu enormen Datenmengen und kann unter der Woche kaum durchgeführt werden, weil es länger dauern kann als eine Nacht, bevor die Mitarbeiter wieder kommen und die komplette Leistung des Netzwerks benötigen. Es ist aber relativ einfach, einen Restore einzelner Dateien davon zu machen.

Differenzielle Sicherung

Bei der differenziellen Sicherung werden immer nur die hinzugekommenen/veränderten Daten gesichert. Wenn aber täglich viel dazu kommt und die letzte Vollsicherung bereits einige Zeit her ist, kann es auch so relativ grosse Mengen eine «Speichervergeudung» sein. Für eine Wiederherstellung wird aber die differenzielle- + die letzte Vollsicherung benötigt.

Inkrementelle Sicherung

Bei einer Inkrementellen Sicherung wird nur der Unterschied zwischen der letzten Inkrementellen Sicherung kopiert. So sind es jeden Tag nur die neuen Daten anstatt die von gestern & die von heute. Für eine Wiederherstellung benötigt es deshalb alle Inkrementellen Backups + Differenzielle + die letzte Vollsicherung. Falls es möglichst schnell wieder bereit sein muss und das Backupsystem auch noch auf Bänder basiert, ist diese Wiederherstellung möglicherweise zu aufwändig, um eine hohe Verfügbarkeit zu erreichen.

Dateiattribute

Wenn die Dateiattribute nicht in einem Backupkonzept vorhanden sind, kann es nach einem Restore böse Überraschungen geben. Wenn eine normale Datei kopiert wird, verändern sich deren Berechtigungsinformationen. Auf dem Backup sollen deshalb alle Daten genauso geschützt sein, wie die Originaldaten, da sie jederzeit bei einem Restore zu Originaldaten werden können.

#Beispielbefehle zum Beibehalten der Berechtigungen
cp --preserve=all
scp -p
rsync -av

Systemsicherung (dd)

Varianten

HOTBACKUP

Während das Betriebssystem gesichert wird, kann es gleichzeitig weiterlaufen. Hier müssen einige Dinge (je nach Betriebssystem) beachtet werden, um Probleme und Fehler zu vermeiden. Es sollten keine Programme gleichzeitig Dateien verändern, da dies zu Inkonsistenzen führen kann.

COLDBACKUP

Wenn das Betriebssystem nicht läuft gibt es etwas mehr Möglichkeiten, die Sicherung durchzuführen.

  • Die eigentlichen Partitionen werden nicht gesichert (nur bei unterstütztem Dateisystem!)
  • Komplettes Fullbackup
    • Einzelne Dateien können fast nicht wiederhergestellt werden
    • Benötigt sehr viel Speicherplatz

Vorgehen mit dd

Um eine komplette Systemsicherung mit dd durchzuführen, benötigt man zuerst ein bootbares Linux-System (beispielsweise auf einem USB-Stick). Dieses sollte auch dd installiert haben. (Download Xubuntu) Das System sollte aber nicht installiert, sondern nur gestartet werden.

Die Grundfunktion von DD ist, Daten einzulesen und am angegebenen Ort wieder auszugeben. Es ist auch möglich, Daten vor der Ausgabe noch zu verändern.

#Disks anzeigen
sudo fdisk -l
# Einfache Anwendung von dd
dd if=/tmp/text.txt of=/tmp/ausgabe.txt

Selbstverständlich ist dies aber nicht nur mit Dateien sondern auch mit kompletten Laufwerken möglich:

dd if=/dev/sda of=/dev/sdc

Wenn aber die Sicherung auf einem anderen Gerät und nicht nur auf eine andere Festplatte geschrieben werden soll, kann die .img-Datei auch über SSH geschrieben/wiederhergestellt werden.

#Backup
dd if=/dev/sda | ssh benutzer@server 'dd of=sda.img'
#Restore
ssh benutzer@server 'dd if=sda.img' | dd of=/dev/sda