# Apache2

# Apache2 - SSL Zertifikat mit Let´s encrypt für Webserver bereitstellen

1. letsencrypt über die Paketverwaltung installieren: `#aptitude install letsencrypt`
2. Zertifikat generieren: 
    1. `# certbot certonly --manual --rsa-key-size 4096`
    2. Die Fragen beantworten und z.B. die Domain festlegen.
3. Verifikations-Datei auf dem Webserver anlegen:
    
    
    1. Hinweis: Die kryptischen Bezeichner sind bei euch anders - ersetzt sie einfach.
    2. `mkdir /var/www/letsencrypt/.well-known/acme-challenge`  
        `cd /var/www/letsencrypt/.well-known/acme-challenge`  
        `echo -n N_aDTbuhynhvqhGaqs1OVHs1_Bl1A4Z9rHtFhFeV1cA.DGo-QeCJ79p7eoFfCvjK4Np9a_RsbbtjWteKY0QMl0I > N_aDTbuhhynhvqhGaqs1OVHs1_Bl1A4Z9rHtFhFeV1cA```````
4. Dem Apache2 noch die neuen Zertifikate beibringen: 
    1. <span class="crayon-v">in eure config unter /etc/apache2/site-enabled/eureseite.conf folgende Zeilen unter HTTPS einfügen:</span><div><div>`<span class="crayon-v">ssl_certificate</span> <span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">letsencrypt</span><span class="crayon-o">/</span><span class="crayon-v">live</span><span class="crayon-o">/</span><span class="crayon-v">meinedomain</span><span class="crayon-e">.de</span><span class="crayon-o">/</span><span class="crayon-v">fullchain</span><span class="crayon-e">.pem</span><span class="crayon-sy">;</span>`</div><div>`<span class="crayon-v">ssl_certificate_key</span> <span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">letsencrypt</span><span class="crayon-o">/</span><span class="crayon-v">live</span><span class="crayon-o">/</span><span class="crayon-v">meinedomain</span><span class="crayon-e">.de</span><span class="crayon-o">/</span><span class="crayon-v">privkey</span><span class="crayon-e">.pem</span><span class="crayon-sy">;</span>`</div></div>
5. Danach die Verzeichnisstruktur der Verifikations-Datei wieder löschen.
6. Apache2 Server neustarten: `#/etc/init.d/apache2 restart`

Fertig!

<p class="callout info">Quelle: [https://serverfault.com/questions/750902/how-to-use-lets-encrypt-dns-challenge-validation](https://serverfault.com/questions/750902/how-to-use-lets-encrypt-dns-challenge-validation)</p>

# Apache2 - Webspace passwortgeschützt mit einzelner Ausnahme

<p class="callout info">Quelle: [https://stackoverflow.com/questions/2641646/how-to-accomplish-authtype-none-in-apache-2-2](https://stackoverflow.com/questions/2641646/how-to-accomplish-authtype-none-in-apache-2-2)</p>

<p class="callout info">Quelle: [https://gist.github.com/lokesh-webonise/5625636](https://gist.github.com/lokesh-webonise/5625636)</p>

# Apache2 – SSL erzwingen bzw. HTTP-Zugriffe umleiten

### Der eigentliche vhost

Hier würden auch directory-, Authentication-, und ähnliche Anweisungen erfolgen.

```bash
<VirtualHost 127.0.0.1:443>
	ServerName localhost:443
	
	SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem		
</VirtualHost>

```

### Das ist der „Dummy“-vhost

Dieser **vhost** dient dann nur noch dazu um eine Umleitung auf den oberen „443-vhost“ zu machen.

```bash
<VirtualHost localhost:80>
	ServerName localhost
	
	# Das folgende erzwingt SSL
	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

```

<p class="callout info">*Quelle:* [*http://blog.rvi-media.de/linux/apache2-ssl-erzwingen-bzw-http-zugriffe-umleiten/*](http://blog.rvi-media.de/linux/apache2-ssl-erzwingen-bzw-http-zugriffe-umleiten/)</p>

# Apache 2 - SVN

## SVN

### SVN Installation

\- Subversion installieren:

```
apt-get update
apt-get install subversion
```

### Speicherort für Repositories anlegen

\- Ordner erstellen wo alle Repositories gespeichert werden sollen

```
# mkdir /var/svn-repos/
```

\- Rechte für Apache2 vergeben

```
chown www-data.www-data /var/svn-repos
```

### SVN Repository erstellen

```
svnadmin create /var/svn-repos/repo123
```

### Dateirechte für Apache2 für Repository vergeben

```
 chown -R www-data:www-data /var/svn-repos/repo123
```

## Apache 2 Vorbereitungen

### Apache SVN Modul installieren

```
apt-get install libapache2-svn
```

### Apache Module aktivieren

```
a2enmod dav
a2enmod dav_svn
a2enmod authz_svn
```

### Benutzerverzeichnis anlegen

\- nun legen wir für den Webzugriff unsere User an

#### Benutzerverzeichnis erstmalig anlegen mit der Option -c

Achtung! Bestehende Nutzer werden dabei überschrieben! Das ist zum Anlegen des Verzeichnisses, nicht eines neuen Users!

```
htpasswd -c /etc/apache2/dav_svn.passwd user1
```

\- danach müsst ihr ein Passwort festlegen

#### Weitere Benutzer in das Benutzerverzeichnis anlegen

```
htpasswd /etc/apache2/dav_svn.passwd user2
```

\- danach müsst ihr ebenfalls ein Passwort festlegen

Mit diesen Benutzern könnt ihr jetzt arbeiten und Zugriffe steuern.

### Accessfile anlegen

\- diese Datei beinhaltet die Regelungen welche User oder gruppe auf welche Repos oder Verzeichnisse zugreifen darf

\- diese Datei unter /etc/apache2 speichern

\- Beispiel: dav\_svn.accessfile

```
# Definitions of groups with users from operating system
[groups]
admins = user1,user2
testusers = user2

# Definitions of repositories

[user1:/]
user1 = rw
user2 = r

[user2:/]
user1 = r
user2 = rw

[test:/]
@testusers = rw
```

### Apache2 Konfiguration

Nun müsst ihr eine sog. VHOST Konfiguration anlegen und euren Ordner angeben, den wir am Anfang angelegt haben. In unserem Beispiel also `/var/svn-repos`.

Hier eine Beispiel Konfiguration:

```
<Location /svn>
        DAV svn
        SVNParentPath /var/svn-repos
        SVNListParentPath On

        AuthType Basic
        AuthName "SVN Authorization Realm"
        AuthUserFile /etc/apache2/dav_svn.passwd
        Require valid-user
        AuthzSVNAccessFile /etc/apache2/dav_svn.accessfile
</Location>
```

## Fertig!

Danach nochmal den Apache2 neustarten `/etc/init.d/apache2 restart` und ihr könnt euer SVN bequem für eure Teams einrichten ohne auf eurem Linuxsystem Unmengen an Usern anlegen zu müssen.