# Programme

# SQL



# MariaDB bzw. MySQL Root-Passwort zurücksetzen

# Bind

Bind ist der DNS-Server unter Linux. Hier nun die Basis-Einrichtung.

## Installation

Bind kann mit folgenden Befehlen installiert werden:

```bash
sudo apt-get update
sudo apt-get install bind9

```

## Zone

Nach dem Bind installiert ist, kann man die erste Zone anlegen. Eine Zone besteht aus zwei Dateien. &lt;note warning&gt;Die Domainnamen MÜSSEN immer mit einem Punkt abgeschlossen werden!&lt;/note&gt;

### Domainnamen

Die erste Datei beinhalte die Umwandlung von Domainnamen zu einer IP-Adresse. Am besten nutze man die Vorhandene Blanko-Datei.

```bash
sudo cp /etc/bind/db.empty /etc/bind/db.holzfeind.ch

```

Im nächsten Schritt muss die Datei den eigenen Bedürfnissen angepasst werden, hier nun ein Beispiel:

```bind
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@   IN  SOA htpc.holzfeind.ch. root.localhost. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
              86400 )   ; Negative Cache TTL
;
@   IN  NS  dns.holzfeind.ch.

htpc                            IN      A       172.16.10.5
dns                             IN      A       172.16.10.5
vm                              IN      A       172.16.10.6
fw                              IN      A       172.16.10.1
sw                              IN      A       172.16.10.7

```

### Revers

Als nächster Schritt wird die Revers-Datei erstllt, diese dient der Umwandlung von IP-Adressen in Domainnamen. Am besten nutze man die Vorhandene Blanko-Datei.

```bash
sudo cp /etc/bind/db.empty /etc/bind/db.10.16.172

```

oder die zuvor erstellt Domainnamen-Datei

```bash
sudo cp /etc/bin/db.holzfeind.ch /etc/bind/db.10.16.172

```

Auch hier müssen die Daten den eigenen Bedürfnissen angepasst werden. Hier nun ein entsprechendes Beispiel:

```bind
; BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@   IN  SOA htpc.holzfeind.ch. root.localhost. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
              86400 )   ; Negative Cache TTL
;
@   IN  NS  dns.holzfeind.ch.

1       IN      PTR     fw.holzfeind.ch.
5       IN      PTR     dns.holzfeind.ch.
5       IN      PTR     htpc.holzfeind.ch.
6       IN      PTR     vm.holzfeind.ch.
7       IN      PTR     sw.holzfeind.ch.

```

### Abschluss

Zum Abschluss müssen die zwei Zonen-Dateien noch dem DNS-Server bekannt gemacht werden, hier für erweitert man die Datei `/etc/bind/named.conf.local` um folgende Einträge:

```bind
zone "holzfeind.ch" {
    type master;
    file "/etc/bind/db.holzfeind.ch";
    };
zone "10.16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/db.10.16.172";
    };

```

## DNS-Cache

Sobald der DNS-Server läuft, besteht auch die Möglichkeit diesen als DNS-Cache zu konfigurieren. Hier für wird folgendes Vorgehen empfohlen:\\

1. DNS-Root-Server Informationen beziehen und speichern:

```bash
dig @A.ROOT-SERVERS.NET > /etc/bind/db.root

```

2\. DNS-Root-Server-Eintrag erstellen (zum Teil auch schon vorhanden, `/etc/bind/named.conf.default-zones`).

```bind
zone "." {
    type hint;
    file "/etc/bind/db.root";
};

```

3\. Update-Script erstellen (Pfad: `/etc/cron.weekly/`

```bash
#! /bin/bash
#
# Aktualisierung der db.root
#

# Aktuelle Liste generieren
dig @A.ROOT-SERVERS.NET > /etc/bind/db.root

# Konfiguration Laden
/usr/sbin/service bind9 reload

```

4\. Script ausführbar machen.

```bash
chmod +x /etc/cron.weekly/bind-root-update.sh

```

5\. Bind neustarten

```bash
service bind9 restart

```

## Anfrage loggen

Um die Auflösung der Adressen zu loggen kann folgende Einstellung vorgenommen werden:

```bash
rndc querylog

```

Die Daten werden anschliessen in die Datei `/var/log/syslog` oder `/var/log/message` geschrieben.

# SSH

SSH ist ein Protokoll zur sicheren Komunikation mit Netzerkkomponenten. Alle Ihr Vorgestellten Vorgehen gelten nur für Linux-Clients und Unix-Server. Als Alternatvie kann man das Programm "[putty](../cli/putty)" nutzen, dies ist auf den drei grossen OS erhältlich.

## Client

### Verbindung

Um eine Verbindung zu einem SSH-Server herzustellen wird folgender Befehl benötigt:

```bash
ssh user@IP.des.Server

```

bzw. `ssh user@Domainname.des.Server`

### Public Key

Im Normalfall muss man sich nun immer mit dem Benutzerpasswort anmelden, es gibt aber noch eine bequemmer und sichere Anmeldungsmethode, dass Public Key Verfahren. Die Sicherheit kann aber nur der SSH-Server-Betreiben erhöhen. Mit folgendem Befehl werden die entsprechenden Key's generiert:

```bash
ssh-keygen -t rsa -b 4096

```

Und mit folgendem Befehl wird der Public Key Übertragen:

```bash
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

```

Nun wird noch einmal das Passwort des Benutzer abgefragt. Wenn dieser Vorgang erfolgreich war, wird man bei der nächsten Verbindung nicht mehr nach dem Passwort gefragt.

### SSH-Tunnel

Ein SSH-Tunnel dient dazu Infrastrukturen zu nutzen welche sich beim SSH-Server befinden (MySQL, lokale Webseite usw.) Mit folgendem Befehl wird der SSH-Tunnel aufgebaut:

```bash
ssh -D 8080 -f -C -q -N user@Domainname.des.Server

```

Danach muss die Verbindung nur noch als lokaler SOCKET-Proxy eingetragen werden. Für Firefox kann folgendes Add-On empfohlen werden: [Socks Proxy](https://addons.mozilla.org/de/firefox/addon/socks-proxy/)

### Optionen

<table id="bkmrk-option-erkl%C3%A4rung--b-"><thead><tr><th>Option</th><th>Erklärung</th></tr></thead><tbody><tr><td>-b</td><td>Fixierung an eine Schnittstelle</td></tr><tr><td>-C</td><td>Komprimieren aller Verbindungsdaten</td></tr><tr><td>-D</td><td>Portfestlegung bei Port-Forwarding / SSH-Tunnel</td></tr><tr><td>-N</td><td>Keine Remotebefehl ausführen (SSH-Tunnel)</td></tr><tr><td>-p</td><td>Abweichender Port angeben (Standard 22)</td></tr><tr><td>-q</td><td>Stille Verbindung</td></tr><tr><td>-X</td><td>X11 Forwarding einschalten</td></tr></tbody></table>

## SCP

`scp` ist ein Kopierprogramm, welches mit SSH gute zusammenabeitet. Die witchigsten Optionen von SSH gelten auch bei `scp`

### Kopieren von Remote-Host

Zum Kopieren einer Datei vom Remote-Host wird folgender Befehl benötigt:

```bash
scp gregor@172.16.10.5:/var/log/syslog /home/gregor/Log/syslog_172.16.10.5

```

### Kopieren zum Remote-Host

Zum Kopieren einer Datei zum Remote-Host wird folgender Befehl benötigt:

```bash
scp webmin.deb gregor@172.16.10.5:/home/gregor

```

# Snippet

## apt-get

### Daten aktualisieren

```bash
sudo apt-get update

```

```bash
sudo apt update

```

### Update Auflisten

```bash
sudo apt list --upgradebale

```

### Updates Installieren

```bash
sudo apt-get upgrade

```

```bash
sudo apt upgrade

```

## date

### Aktelle Uhrzeit (Stunde:Minute)

```bash
date +"%H:%M"

```

```bash
date +"%R"

```

### Aktelle Uhrzeit (Stunde:Minute:Sekunden)

```bash
date +"%H:%M:%S"

```

```bash
date +"%T"

```

### Aktuelles Datum

```bash
date +"%d.%m.%y"

```

### Aktuelles Datum (Amerikanische Schreibweise)

```bash
date +"%m/%d/%y"

```

```bash
date +"%D"

```

### Jahr

#### kurz

```bash
date +"%y"

```

#### Vollständig

```bash
date +"%Y"

```

#### Jahrhundert

```bash
date +"%C"

```

### Monat

#### Kurzform

```bash
date +"%b"

```

#### Langform

```bash
date +"%B"

```

### Tag

#### Kurzform

```bash
date +"%a"

```

#### Langform

```bash
date +"%A"

```

### Zeitzone

```bash
date +"%Z"

```

### Zeitzone Verschiebung

```bash
date +"%z"

```

## find

### Bestimmte Dateierweiterungen finden

```bash
find /home/gregor -name "*.odt"

```

### Ordnern mit bestimmten Namen finden

```bash
sudo find / -type d -name "git"

```

### Grosse Dateien finden

```bash
sudo find / -size +1000M -ls

```

### Bestimmten Benutzer zugehörig

```bash
find /home/gregor -user gregor -name "*.mp4"

```

### Dateien Verschieben

```bash
find Downloads/ -name "*.pdf"  -exec mv {} /home/gregor/Dokumente \;

```

### Benutzerrechte ändern

```bash
sudo find /var/www/ -type f -exce chmod 644 {} \;

```

```bash
sudo find /var/www/ -type d -exce chmod 770 {} \;

```

### Dateien entpacken

```bash
find -name "*.part01.rar" -exec unrar e -pholzfeind.ch {}  \;

```

### Datum anpassen

```bash
find -newermt 2018-05-24 -exec touch -t 201705241700 {} \; 

```

## ffmpeg

### Nur Videocode auf H264 umwandeln

```bash
ffmpeg -i input.mkv -map 0 -c:a copy -c:s copy -c:v libx264 output.mkv

```

### Nur Videocode auf H264 umwandeln und kompriemieren

```bash
ffmpeg -i input.mkv -map 0 -c:a copy -c:s copy -c:v libx264 -crf 18 output.mkv

```

## dpkg

### Installation

```bash
sudo dpkg -i ruckus_ssid.deb

```

### Deinstallation

```bash
dpkg -l | grep "ssid"
ii  ssid-ruckus        1.0.1    all automatische ssid generator
dpkg -r ssid-ruckus

```

## tar

### neues Archiv erstellen

```bash
tar cvf Bilder.tar Bilder/

```

### Archiv entpacken

```bash
tar xvf Bilder.tar

```

### komprimiertes Archiv entpacken

```bash
tar xvzf Bilder.tar.gz

```

```bash
tar xvjf Bilder.tar.bz2

```

## gz

### Datei komprimieren

```bash
gzip Bilder.tar

```

### Datei dekomprimieren

```bash
gzip -d Bilder.tar.gz

```

### Komprimierung anzeigen

```bash
gzip -l Bilder.tar.gz 
         compressed        uncompressed  ratio uncompressed_name
          278835692           296181760   5.9% Bilder.tar

```

## bzip2

### Datei komprimieren

```bash
bzip2 Bilder.tar

```

### Datei dekomprimieren

```bash
bzip2 -d Bilder.tar.bz2

```

## ip

### IP-Adresse aller Netzwerkkarten

```bash
ip address

```

### IP-Adresse einer bestimmten Schnittstelle

```bash
ip address show enp0s25

```

### Routen anzeigen

```bash
ip route

```

### Netzwerk anzeigen

```bash
ip route | tail -n1 | awk '{print $1}'

```

### Gateway anzeigen

```bash
ip route | head -n1 | awk '{print $3}'

```

## wget

### Speedtest

```bash
wget --report-speed=bits -O /dev/null http://speedtest.belwue.net/10G

```

## Passwort

&lt;code bash&gt; cat /dev/urandom|tr -dc "a-zA-Z0-9\_\\?" | fold -w16 | head -n $RANDOM | tail -n $RANDOM | tail -n1&lt;/code&gt;

## curl

### Public IP

```bash
curl https://ipecho.net/plain

```

```bash
curl ifconfig.me

```