# Einstieg in AWS Academy

# Zugriff auf die AWS Lab-Umgebung

Das Login auf AWS Academy erfolgt über folgende URL:

[https://awsacademy.instructure.com](https://awsacademy.instructure.com)

Klicken Sie auf der betreffenden Seite auf den Button **Student Login** um zum Login-Formular zu gelangen. Tragen Sie nun Ihre definierten Login-Daten ein und bestätigen Sie mit dem Button **Log In**. Sie sind nun auf der AWS Academy Oberfläche angemeldet.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/RFtimage.png)

Sie sehen nun im Dashboard einen verfügbaren Kurs. Klicken Sie auf diesen Kurs um die Übersichts-Seite des Kurses zu öffnen. Im Menü des Kurses sehen Sie den Punkt **Module**. Öffnen Sie diesen Menüpunkt.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/zA1image.png)

Der Kurs umfasst drei Module. Für Sie relevant ist lediglich das Modul **Lerner Lab**. Öffnen Sie das Modul indem Sie darauf klicken.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/eHgimage.png)

Es kann nun einen Moment in Anspruch nehmen, bis die Umgebung geladen hat. Sobald der Ladevorgang abgeschlossen wurde, können Sie mit dem Button **Start Lab** die Lab-Umgebung starten. Beachten Sie bezüglich der Lab-Umgebung folgende Hinweise:

- Die Lab-Umgebung wird spätestens nach 4 Stunden automatisch beendet. Sie können die Lab-Umgebung jederzeit wieder starten, aber auch manuell beenden.
- Der Zustand Ihrer Lab-Umgebung wird beim beenden gespeichert, jedoch verlieren Sie die **öffentlichen IP-Adressen** Ihrere virtuellen Server. Beim starten erhalten Sie neue öffentliche IP-Adressen. Dies muss gff. bei den Übungen beachtet werden.
- Mit dem **Reset** Button löschen Sie Ihre Lab-Umgebung vollständig. Dadurch gehen alle virtuellen Server und Ihre geleisteten Übungen verloren.

Nachdem Sie auf den **Start Lab** Link geklickt haben, kann es einen Moment dauern, bis die Lab-Umgebung gestartet wurde.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/bsEimage.png)

Sie erkennen, dass die Lab Umgebung gestartet ist, nachdem der Status-Indikator von Rot zu Grün gewechselt hat. Klicken Sie nun auf den Status-Indikator um auf die Lab-Umgebung zu gelangen.

<p class="callout warning">Sie müssen In Ihrem Browser Pop-Ups von awsacademy.instructure.com zulassen, damit die Lab-Umgebung geöffnet werden kann.</p>

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/KQTimage.png)

Es öffnet sich nun ein neues Fenster mit der **AWS Management Console** in der Sie die Übungen absolvieren werden.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/IrVimage.png)

<p class="callout info">Dies ist die Ausgangslage für Ihre Übungen. Für jede Übung müssen Sie wieder gleich in die AWS Management Console einsteigen.  
</p>

Wenn Sie mit Ihren Arbeiten für längere Zeit fertig sind, empiehlt es sich die Lab-Umgebung über as AWS Academy Portal wieder zu beenden. Klicken Sie hierzu einfach auf den **End Lab** Link.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/o6Uimage.png)

# EC2 Instanz anlegen

In AWS versteh man unter EC2 (Elastic Cloud Computing) eine virtuelle Maschine, welche auf der AWS-Umgebung läuft. Nachfolgende Anleitung beschreibt, wie eine EC2-Instanz (Server) angelegt werden kann.

1. Melden Sie sich gem. der Anleitung [Einstieg in die AWS-Lab-Umgebung](https://shelf.iten.io/ch-tbz-it/Stud/m123/-/blob/toBeMerged_ITM/02_DNS/AWS/Einstieg%20in%20die%20AWS-Lab-Umgebung.md) auf Ihrem AWS-Lab an.
2. Klicken Sie in das Suchfeld und suchen Sie nach dem Begriff **EC2**. Klicken Sie auf das erhaltene Resultat: [![aws_ec2_search.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/aws-ec2-search.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/aws-ec2-search.png)
3. Sie befinden sich nun auf dem E2C Dashboard. Suchen Sie dort die Gruppe **Instance starten** und klicken Sie auf den Button **Instance starten**:  
    [![ec2_start_instance.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/ec2-start-instance.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/ec2-start-instance.png)
4. Tragen Sie unter **Namen** einen passenden Namen für die virtuelle Maschine ein. (z. B. wenn Sie einen DNS-Server bereitstellen müssen, macht es Sinn den Server dns-server-01 o. ä. zu benennen).
5. Stellen Sie sicher, dass die Linux-Distribution **Amazon Linux** ausgewählt ist:[![ec2_choose_linux_distribution.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/ec2-choose-linux-distribution.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/ec2-choose-linux-distribution.png)
6. Wählen Sie als Instanz-Typ die Konfiguration **t2.medium** aus:
    
    [![ec2_instance_type.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/ec2-instance-type.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/ec2-instance-type.png)
7. <p class="callout warning">Wenn Sie bereits ein Schlüsselpaar für Ihre Gruppe erstellt haben, wählen Sie das Schlüsselpaar aus. Es muss kein neues Paar erstellt werden.</p>
    
    [![ec2-choose-key.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/ec2-choose-key.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/ec2-choose-key.png)
    
    Haben Sie noch kein Schlüsselpaar erstellt, dann erstellen Sie ein Schlüsselpaar für Ihre Gruppe wie im Abschnitt **Schlüsselpaar erstellen** beschrieben ist.
8. Unter den **Netzwerkeinstellungen** müssen nun noch die Grundlegenden Firewall Einstellungen getätigt werden.
    
    
    - Wählen Sie die Option \*\*Sicherheitsgruppe erstellen
    - Aktivieren Sie die Option **Datenverkehr von SSH zulassen** und setzen Sie die Option auf **Überall**
    - Aktivieren Sie die Option **HTTPS-Datenverkehr aus dem Internet zulassen**
    - Aktivieren Sie die Option **HTTP-Datenverkehr aus dem Internet zulassen**
    
    [![ec2-network-settings.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/ec2-network-settings.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/ec2-network-settings.png)
9. Bestätigen Sie nun mit dem Button **Instance starten**

## [](#schl%C3%BCsselpaar-erstellen)Schlüsselpaar erstellen

<p class="callout warning"> Erstellen Sie nur ein neues Schlüsselpaar, wenn Sie nicht bereits eines für die Gruppe erstellt haben. Gebe Sie acht auf den privaten Schlüssel, welcher heruntergeladen wird.</p>

<p class="callout warning">Pro Gruppe muss nur ein Schlüssel erstellt werden. Der Schlüssel wird an alle Teilnehmer der Gruppe verteilt.</p>

1. Klicken Sie im Assistenten bei der Erstellung einer neuen EC2 Instanz auf die Option **Neues Schlüsselpaar erstellen**
    
    [![ec2-new-key.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/ec2-new-key.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/ec2-new-key.png)
2. Tragen Sie als Schlüsselpaarname den Namen Ihrer Gruppe ein.
3. Belassen Sie die Option **Typ des Schlüsselpaars** auf **RSA**
4. Belassen Sie die Option **Dateiformat für privaten Schlüssel** auf **.pem**
5. Klicken Sie abschliessend auf den Button **Schlüsselpaar erstellen**. Es wird nun automatisch den privaten Teil des Schlüssels heruntergeladen. Speichern Sie diesen an einem Ort wo Sie den Schlüssel wieder finden und leiten Sie die Datei den weiteren Gruppenmitgliedern weiter.
6. Sie können nun den neuen Schlüssel im Dropdown auswählen und mit der Erstellung der virtuellen Maschine weiterfahren:
    
    [![ec2-choose-key.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/kp2ec2-choose-key.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/kp2ec2-choose-key.png)

## [](#per-ssh-auf-die-vm-verbinden)Per SSH auf die VM verbinden.

1. Laden Sie die Software Tabby Terminal herunter:  
    [https://tabby.sh](https://tabby.sh)
2. Installieren Sie die Software Tabby Terminal.
3. Starten Sie die Software und klicken Sie auf das Zahnrad in der oberen rechten Ecke:  
    [![tabby-term-settings.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/tabby-term-settings.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/tabby-term-settings.png)
4. Klicken Sie im Menü auf **Profiles &amp; connections** und anschliessend auf den Button **New profile**:
    
    [![tabby-profiles-connections.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/tabby-profiles-connections.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/tabby-profiles-connections.png)
5. Wählen Sie als Basis-Profil **SSH connection** aus:
    
    [![tabby-ssh-connection-profile.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/tabby-ssh-connection-profile.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/tabby-ssh-connection-profile.png)
6. Nun müssen folgende Einstellungen gesetzt werden:
    
    
    - **Name**: Setzen Sie einen aussagekräftigen Namen
    - **Host**: Tragen Sie hier die öffentliche IP-Adresse Ihrer VM ein. Sie finden diese in der Übersicht der Instanzen.
    - **Username**: Tragen Sie hier den Benutzernamen **ec2-user** ein.
    - Setzen Sie die Authentifizierungsmethode auf **Key**
    - Fügen Sie nun ihren privaten Schlüssel über den Button **Add a private key** hinzu. [![tabby-connection-settings.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/0T4tabby-connection-settings.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/0T4tabby-connection-settings.png)
7. Speichern Sie die Einstellung und starten Sie die Verbindung zum Server.
    
    [![tabby-start-connection.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/tabby-start-connection.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/tabby-start-connection.png)

# Linux Grundlagen



# Linux Einstieg

Linux ist ein freies und quelloffenes Betriebssystem, das für die Verwendung auf Computern, Servern, mobilen Geräten und anderen Geräten konzipiert ist. Es wurde ursprünglich von Linus Torvalds entwickelt und wird seitdem von einer weltweiten Gemeinschaft von Programmierern ständig weiterentwickelt. Linux ist ein zuverlässiges, sicheres und robustes Betriebssystem und wird wegen seiner Flexibilität und Kosteneffizienz häufig im professionellen Bereich eingesetzt. Es wird auch häufig als Alternative zu proprietären Betriebssystemen wie Windows verwendet.

Das zentrale Kernstück des Betriebssystems ist der Linux-Kernel. Er ist verantwortlich für das Verwalten der Ressourcen des Computers, das Ausführen von Programmen, das Verarbeiten von Anweisungen und vieles mehr. Es ist das Herzstück des Betriebssystems, das alle anderen Komponenten zusammenführt.

Wie unter Windows auch, können unter Linux Anwenderprogramme ausgeführt werden. Ausführbare Windows-Programme und Linux-Programme sind hierbei in erster Linie nicht miteinander kompatibel, da die zugrundeliegende Architektur unterschiedlich ist. Viele Programme werden jedoch zwischenzeitlich auch speziell für Linux bereitgestellt.

Während bei Windows viele Programme aus dem Internet heruntergeladen und installiert werden, hat sich unter Linux die Software-Verwaltung über sogenannte Paketmanager etabliert. Paketmanager wie **apt** und **yum** ermöglichen es den Benutzern, Programme aus einer Vielzahl von Quellen zu installieren und zu verwalten. Die Installation kann dabei direkt über das Terminal vorgenommen werden. Die Programme müssen somit nicht manuell heruntergeladen werden um diese zu installieren oder aktualisieren.

## [](#die-shell)Die Shell

Ein ganz spezielles Anwenderprogramm ist die **Shell** - die "Benutzeroberfläche". Es existieren viele verschiedene Shells - in diesem Modul werden wir mit der Bash (**B**ourne **a**gain **sh**ell) arbeiten. Diese ist die Standardshell auf Linuxsystemen. Alle Shells stellen dem Benutzer eine Kommandozeile zur Verfügung, mit der Befehle eingegeben werden können, die direkt als Systemaufrufe an das Betriebssystem weitergeleitet werden.

[![image.png](https://shelf.iten.io/uploads/images/gallery/2022-11/scaled-1680-/G2bimage.png)](https://shelf.iten.io/uploads/images/gallery/2022-11/G2bimage.png)

Es gibt auch grafische Shells für Linux. Dies sind wie bereits von Windows bekannt, Desktop-Umgebungen welche mit der Maus bedient werden können. Bekannte Vertreter sind hierbei Gnome, Unity, KDE, oder Cinnamon.

Die grafischen Shells spielen in diesem Modul keine Rolle. Da Server oftmals ohne Bildausgabe ausgestattet sind, wird auf Server-Umgebungen bevorzugt die Text-Konsole verwendet.

## [](#dateisystem)Dateisystem

Wie Windows arbeitet Linux ebenfalls mit Dateien. Im Unterschied zu Windows, hat aber nicht jedes Laufwerk einen eigenen Dateibaum, sondern es existiert ein einziger Dateibaum wo auch die Laufwerke mit eingebunden werden.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-11/scaled-1680-/Lfvimage.png)

### [](#das-root-verzeichnis-)Das Root-Verzeichnis /

Das Root-Verzeichnis ist das oberste Verzeichnis im Linux Dateibaum. Es ist eine Partition, in der das Root-Verzeichnis eingehängt ist. Weiter Laufwerke und Partition werden an beliebigen Stellen im Dateibaum eingehängt (mounted).

Im Wurzelverzeichnis / darf sich neben den weiteren Verzeichnissen /bin /etc /home /opt /tmp /usr und /var nur eine einzige normale Datei befinden. Dies ist der Linux-Kernel. Heutzutage ist der Linux-Kernel jedoch meistens im Verzeichnis /boot ausgelagert.

#### [](#bin)/bin

In diesem Verzeichnis liegen sogenannte Binaries, also binäre Programme, jedoch nur jene, die für die wichtigsten Arbeiten am System benötigt werden. Alle User haben in diesem Verzeichnis Lesezugriff.

### [](#boot)/boot

Hier liegt der Linux-Kernel und alle Dateien, die er zum Starten benötigt. Nur der root-Benutzer hat auf dieses Verzeichnis Zugriff.

### [](#dev)/dev

Hier befinden sich die Gerätedateien. Dies sind Schnittstellen zum Kernel, die ein bestimmtes Gerät bezeichnen. Unter Linux kann fast jede Hardware mit einer solchen Gerätedatei angesprochen werden. Wichtig ist, dass diese Dateien keinen physischen Platz auf der Festplatte beanspruchen. Sie existieren nur virtuell.

### [](#etc)/etc

Alle systemweit gültigen Konfigurationsdateien (Netzwerk, Bootmanager, Systemstartskripte, u.s.w) werden hier gespeichert. Auch die Dateien für die Benutzerverwaltung (z.B. "passwd" und "shadow" mit den Benutzern und deren Passwörtern) sind hier abgelegt.

Viele Prozesse müssen in der Lage sein, diese Dateien zu lesen, um bestimmte Informationen zu erhalten. Daher muss das Verzeichnis für alle Benutzer lesbar sein.

### [](#home)/home

Jeder dem Betriebssystem bekannte Benutzer hat sein eigenes Verzeichnis, welches in der Regel denselben Namen wie der Benutzer trägt. Wir nennen solche Verzeichnisse die "Heimatverzeichnisse" der Benutzer. Sie befinden sich alle (mit Ausnahme des "root"-Verzeichnisses des Systemadministrators) im Verzeichnis /home. Nach dem Einloggen (Anmeldung am System mit Benutzernamen und Passwort) befinden sich alle Benutzer immer in ihrem Home-Verzeichnis.

In der Regel darf ein Benutzer in seinem eigenen Home-Verzeichnis alles tun - auch Dateien anlegen, löschen und ändern. Ausserhalb seines Verzeichnisses hat ein normaler Benutzer in der Regel nur Leserechte - er darf dort keine Dateien ändern, anlegen oder löschen.

### [](#root)/root

Dies ist das Heimatverzeichnis des Systemadministrators "root". Aber warum befindet sich dieses Verzeichnis nicht im Verzeichnis /home? Das ist ganz einfach: /home wird oft als eigene Partition eingerichtet. Diese Partition wird aber nur beim Systemstart eingebunden. Sollte ein Fehler auftreten, muss der Systemadministrator in der Lage sein, das System zu starten, ohne alle Partitionen einzubinden. Daher muss auf dem Root-Verzeichnis bereits ein funktionierendes System vorhanden sein. Das Home-Verzeichnis ist jedoch ein wesentlicher Bestandteil eines funktionierenden Systems. Deshalb befindet sich das Home-Verzeichnis von "root" direkt auf dem Root-Verzeichnis und in der gleichen Partition.

In frühen Unix-Systemen war das Home-Verzeichnis von "root" tatsächlich das Root-Verzeichnis, aber da ein Home-Verzeichnis immer viele Dateien enthält, wurde dies zu unübersichtlich und sein Home-Verzeichnis wurde in das /root-Verzeichnis verschoben.

### [](#sbin)/sbin

Wie in /bin gibt es auch hier Binärdateien, allerdings solche, die hauptsächlich vom Systemadministrator verwendet werden - sozusagen "Systembinärdateien".

### [](#tmp)/tmp

In diesem Verzeichnis werden, wie der Name schon sagt, temporäre Dateien gespeichert, die nach der Benutzung nicht mehr benötigt werden. Alle Benutzer müssen hier schreiben können, aber es ist kein guter Ort, um die eigenen Daten sicher aufzubewahren. Der gesamte Inhalt wird normalerweise bei einem Neustart des Systems gelöscht.

### [](#usr)/usr

Dieses Verzeichnis enthält alle wichtigen Programme, die das System anbietet. Dabei steht "usr" nicht für "user", wie oft fälschlicherweise angenommen wird, sondern für "Unix System Resources".

Analog zum Stammverzeichnis finden wir die Unterverzeichnisse **/usr/bin**, **/usr/lib** und **/usr/sbin**, deren Bedeutung der des Stammverzeichnisses entspricht.

- **/usr/local** dient der Trennung von distributionseigenen und fremden, zusätzlich installierten Programmen. Unter /usr/local finden wir die gleichen Verzeichnisse wie im Verzeichnis /usr selbst. Selbstkompilierte Programme sollten immer in /usr/local und nie direkt in /usr installiert werden und die Konfigurationsskripte der Programme sehen dies in der Regel als Standard vor.
- **/usr/share** enthält architekturunabhängige Daten, die verschiedene Programme zum Betrieb benötigen und die nicht verändert werden.
- **/usr/src** enthält den Quellcode für alle Programme des Standardsystems.

### [](#var)/var

Dieses Verzeichnis enthält Daten, die oft von Programmen neu geschrieben werden müssen. Ursprünglich waren diese Daten auch unter /usr zu finden, aber der Wunsch, /usr schreibgeschützt mounten zu können, machte eine Trennung notwendig. Hier werden Mails auf einem Mailserver zwischengespeichert (/var/spool) und alle Programme schreiben hier ihre Log-Dateien (/var/log).

Daneben gibt es noch einige andere Verzeichnisse und Unterverzeichnisse, die zum Teil leer sind oder nur symbolische Links auf andere Verzeichnisse enthalten und oft aus Kompatibilitätsgründen existieren.

### [](#opt)/opt

Nachdem immer mehr grosse Programmpakete installiert wurden, kam die Überlegung auf, diese nicht mehr in das Verzeichnis /usr zu legen, sondern ein eigenes Verzeichnis dafür anzulegen. Tatsächlich nutzen aber nur wenige Programme diese Möglichkeit von sich aus und auf vielen Systemen bleibt dieses Verzeichnis leer.

# Praktische Übung

1. Erstellen Sie eine neue EC2 Instanz. Klicken Sie anschliessend auf den Button **Mit Instance verbinden** um eine Web-Bash zu öffnen:  
    [![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/Prmimage.png)](https://shelf.iten.io/uploads/images/gallery/2022-10/Prmimage.png)
2. Selektieren Sie den Tab **EC2-Instance-Verbindung** und klicken Sie auf den Button **Verbinden**

Sie sehen nun folgende Ausgabe nach dem erfolgreichen Login.

```shell

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 7 available
Run "sudo yum update" to apply all updates.
```

Die Anmeldung ist unter dem Benutzer **ec2-user** erfolgt. Sie können dies verifizieren, indem Sie nun den folgenden Befehl eintippen und mit Enter bestätigen:

```
whoami
```

**Frage:** Was für eine Ausgabe sehen Sie und was bewirkt der Befehl whoami vermutlich?

Der Benutzer ec2-user hat nur eingeschränkte Rechte. Mit diesem Benutzer können Sie beispielsweise keine System-Dateien einsehen oder verändern. Aus diesem Grund müssen Sie nun dem Betriebssystem mitteilen, dass Sie gerne nun mit dem Administrator-Benutzer arbeiten möchten. Verwenden Sie hierzu den Befehl **sudo su** und bestätigen Sie mit Enter.

```
[ec2-user@ip-172-31-95-132 ~]$ sudo su
[root@ip-172-31-95-132 ec2-user]# 
```

**Frage:** Was hat sich nun an der Text-Eingabe verändert. Beachten Sie den obenstehenden Output genau. Wie lautet der Name des Admin-Benutzers?

<p class="callout warning">Mit dem Admin-Benutzer können Sie uneingeschränkt Dateien verändern auf dem Linux-System. Man spricht hier von dem sogenannten Root-Zugriff. Damit können Sie aber auch vieles kaputt machen. Setzen Sie daher auf einer produktiven Umgebung Befehle mit Bedacht ab.</p>

#### Navigation im Dateisystem

Sie sind es sich gewohnt, dass Ordner visuell dargestellt werden um darin zu navigieren. In der Shell ist dies etwas anders. Die Ordner und Dateien werden als Text aufgelistet. Als erstes möchten wir nun herausfinden, in welchem Verzeichnis wir uns genau befinden. Dazu können Sie den Befehl **pwd** verwenden:

```shell
[root@ip-172-31-95-132 ec2-user]# pwd
/home/ec2-user
```

Vermutlich befinden sie sich ebenfalls im Home Verzeichnis des Benutzers ec2-user. Das Home-Verzeichnis entspricht hierbei dem C:/Users/&lt;Benutzer&gt; Verzeichnis unter Windows. Sie finden hier die persönlichen Daten des Benutzers.

Wenn Sie nun sehen möchten, ob sich im Verzeichnis des Benutzers ec2-user irgenwelche Dateien oder Verzeichnisse befinden, können Sie den Befehl **ls** absetzen. ls steht für Listing und listet alle Elemente in einem Verzeichnis auf:

```shell
[root@ip-172-31-95-132 ec2-user]# ls
[root@ip-172-31-95-132 ec2-user]# 
```

Sie sehen nun vermutlich kein Resultat. Es hat somit vermutlich keine Dateien. Dies stimmt jedoch nicht ganz, denn genau wie unter Windows, kann es versteckte Dateien geben. Diese können Sie aufrufen, indem Sie dem Befehl **ls** einen Parameter mitgeben (auch als Flag bekannt). Wir geben dem Befehl **ls** nun den Parameter **a** für all mit. Damit listen wir alle Dateien und Verzeichnisse auf, auch die versteckten. Ein Parameter wird mit einem Abstand mit einem Bindestrich dem gewünschten Befehl angehängt:

```shell
[root@ip-172-31-95-132 ec2-user]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .ssh
```

Nun werden die versteckten Dateien und Verzeichnisse ersichtlich. Sie können Sich nun vorstellen, dass dies bei vielen Dateien und Verzeichnissen eher unübersichtlich ist. Aus diesem Grund existiert ein weiterer Parameter. Mit dem Parameter **l** (kleines L) kann eine Listendarstellung erzwungen werden. Die beiden Parameter **l** und **a** können dabei kombiniert werden. Dies sieht so aus:

```shell
[root@ip-172-31-95-132 ec2-user]# ls -la
total 12
drwx------ 3 ec2-user ec2-user  74 Oct 17 22:30 .
drwxr-xr-x 3 root     root      22 Oct 17 22:30 ..
-rw-r--r-- 1 ec2-user ec2-user  18 Jul 15  2020 .bash_logout
-rw-r--r-- 1 ec2-user ec2-user 193 Jul 15  2020 .bash_profile
-rw-r--r-- 1 ec2-user ec2-user 231 Jul 15  2020 .bashrc
drwx------ 2 ec2-user ec2-user  29 Oct 17 22:30 .ssh
```

Nun sind viele Informationen ersichtlich.

- Die erste Spalte gibt die Berechtigungen der Dateien und Verzeichnissen aus. Sie erinnern sich aus dem Modul 117. (R = Read, W = Write und X = Execute). Der erste Buchstabe gibt hierbei an, ob es sich um eine Datei oder ein Verzeichnis handelt (d = Directory (Verzeichnis) / - = Datei)
- Die dritte Spalte gibt den Besitzer der Datei aus. Wir sehen, die meisten Elemente gehören dem Benutzer ec2-user und ein Element dem Benutzer Root
- Die vierte Spalte gibt die Gruppe welcher die Datei zugeordnet ist.
- Die fünfte Spalte gibt die Grösse der Datei in Bytes an.
- Die sechste bis achte Spalte gibt das Datum und die Uhrzeit an, wo die Datei das letzte Mal verändert wurde.
- In der letzten Spalte ist der Name der Datei oder des Verzeichnisses ersichtlich.

Weiter sehen Sie im Verzeichnis zwei komische Elemente bestehend aus einem Punkt (.) und einem Doppelpunkt (..). Diese repräsentieren das aktuelle Verzeichnis (.) sowie das übergeordnete Verzeichnis (..). Wir benötigen diese Elemente zur Navigation innerhalb des Dateisystems.

<p class="callout success">Nun können Sie den Inhalt in einem Verzeichnis anzeigen lassen und interpretieren.</p>

##### Navigieren

Sie haben nun gelernt, wie Sie den Inhalt in einem Verzeichnis anzeigen können. Nun wird es Zeit, dass Sie sich auch andere Verzeichnisse anschauen können. Aus diesem Grund werden Sie nun als erstes ein Verzeichnis höher Navigieren. Dazu verwenden Sie den Befehl **cd**. Dies ist die Abkürzung für change directory (Ändere das Verzeichnis). Der Befehl cd erfordert immer die Angabe des Zielverzeichnisses. Wenn wir nun eine Verzeichnis-Ebene nach oben navigieren möchten, setzen Sie folgenden Befehl **cd ..** ab:

```shell
[root@ip-172-31-95-132 ec2-user]# cd ..
[root@ip-172-31-95-132 home]# 
```

**Frage:** Wie erkennen Sie den Namen des übergeordneten Verzeichnisses nachdem Sie gewechselt haben, ohne dass Sie den Befehl pwd verwenden? Wie lautete der Name des Verzeichnisses?

Kontrollieren Sie anschliessend mit dem Befehl **pwd** ob Ihre Vermutung korrekt ist.

Navigieren Sie nun wieder in das Verzeichnis des Benutzers ec2-user:

```shell
[root@ip-172-31-95-132 ec2-user]# cd ..
[root@ip-172-31-95-132 home]# 
```

<p class="callout info">Geheimtipp: Wenn Sie im Dateisystem navigieren, können Sie die Tab-Taste verwenden. Es handelt sich hierbei um eine vervollständigungs-Funktion. Tippen Sie **cd** und anschliessend die Tab-Taste. Sie sehen nun alle verfügbaren Verzeichnisse. Schreiben Sie nun den ersten Buchstaben des gewünschten Verzeichnisses und tippen Sie erneut Tab. Der Name wird nun im Befehl automatisch ergänzt.</p>

<p class="callout success">Sie können nun im Dateisystem navigieren.</p>

#### Dateien schreiben

Es gibt verschiedene Möglichkeiten wie Sie unter Linux eine Datei erstellen oder bearbeiten können. Hierzu sind vorallem zwei Text-Editoren bekannt, Vim und Nano. Einen Text-Editor benötigen Sie, sobald z. B. eine Konfigurationdatei angepasst werden soll.

In dieser Übung werden wir den Text-Editor Nano verwenden, da dieser etwas einfacher ist. Falls Sie mit Vim bereits vertraut sind können die Aufgaben natürlich auch mit Vim gelöst werden.

Prüfen Sie als erstes mit den Befehl **pwd** ob Sie sich im korrekten Verzeichnis /home/ec2-user befinden. Der Befehl **pwd** gibt den Pfad aus, in dem sich der Benutzer aktuell befindet (Present Working Directory / Aktuelles Arbeitsverzeichnis). Erstellen Sie nun eine neue Datei mit dem Namen Testdatei.txt indem Sie nano aufrufen und als erstes Argument den Namen der Datei übergeben:

```
nano Testdatei.txt 
```

Nano öffnet nun im Editiermodus und Sie können Ihren Inhalt schreiben. Um die Datei zu speichern und beenden verwenden Sie die Tastenkombination CTRL + X. Nano wird Sie nun fragen, ob der gesetzte Dateinamen in Ordnung ist. Bestätigen Sie hier einfach mit Enter.

Sie können nun den Inhalt der Datei anzeigen. Eine Möglichkeit ist natürlich, dass Sie die Datei mit Nano wieder im Bearbeitungsmodus öffnen. Sie können aber auch mit dem Befehl **cat** den Inhalt der Datei direkt im Terminal darstellen lassen. Als Argument geben Sie den Dateinamen der gewünschten Datei an.

```shell
[root@ip-172-31-95-132 ec2-user]# cat Textdatei.txt 
Das ist der Inhalt meiner Textdatei:

1. Listenelement
2. Listenelement
3. Listenelement
[root@ip-172-31-95-132 ec2-user]# 
```

##### Dateien verschieben

Falls Sie mit dem Namen der Datei nicht einverstanden sind können Sie diesen einfach umbenennen. Hierzu existiert der Befehl mv. Der Name leitet sich ab von move, denn der Befehlt kann auch Dateien von einem Ort zu einem anderen Ort verschieben.

Als erstes werden wir aber anschauen, wie eine Datei mit mv umbenannt werden kann:

```shell
[root@ip-172-31-95-132 ec2-user]# mv Textdatei.txt Textdatei-umbenannt.txt
```

**Frage:** Mit welchem Befehl können Sie nun kontrollieren ob die Umbenennung nun geklappt hat?

Nun werden wir die Datei aus dem Verzeichnis /home/ec2-user in das Verzeichnis für temporäre Dateien /tmp verschieben.

```shell
[root@ip-172-31-95-132 ec2-user]# mv Textdatei-umbenannt.txt /tmp/
```

Beachten Sie, dass dieser Befehl in dieser Form nur funktioniert, wenn Sie sich im selben Verzeichnis wie die zu verschiebenede Datei befinden. Sollten Sie aktuell in einem anderen Verzeichnis sein (prüfen mit **pwd**) müssen Sie den vollen Pfad der Datei angeben:

```shell
[root@ip-172-31-95-132 ec2-user]# mv /home/ec2-user/Textdatei-umbenannt.txt /tmp/
```

Kontrollieren Sie nun ob die Datei im Verzeichnis /home/ec2-user ordnungsgemäss verschwunden ist. Wechseln Sie anschliessend in das Verzeichnis /tmp und prüfen Sie, ob Sie hier die Datei finden.

##### Dateien löschen

Wenn Sie eine Datei löschen möchten, können Sie dies mit dem Befehl **rm** bewerkstelligen. Der name **rm** leitete sich von remove ab und bedeutet sprichwörtlich entfernen.

<p class="callout danger">Der Befehl **rm** hat keine Papierkorb-Funktion. Wird eine Datei mit **rm** gelöscht, dann ist diese auch wirklich weg.</p>

Den Namen der zu löschenden Datei geben Sie als Argument dem Befehl **rm** mit:

```shell
[root@ip-172-31-95-132 tmp]# rm Textdatei-umbenannt.txt 
rm: remove regular file ‘Textdatei-umbenannt.txt’? 
```

Bestätigen Sie indem Sie **y** tippen.

### Cheatsheet

Nachfolgend finden Sie die wichtigsten Linux-Befehle, welche Sie für dieses Modul benötigen werden:

<table border="1" id="bkmrk-befehl%C2%A0-bedeutung-be" style="border-collapse: collapse; width: 100%; height: 249.766px; border-width: 1px;"><colgroup><col style="width: 17.0782%;"></col><col style="width: 44.7265%;"></col><col style="width: 38.3189%;"></col></colgroup><thead><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-width: 1px;">Befehl </td><td style="height: 29.7969px; border-width: 1px;">Bedeutung</td><td style="height: 29.7969px; border-width: 1px;">Beispiel</td></tr></thead><tbody><tr style="height: 63.3906px;"><td style="height: 63.3906px; border-width: 1px;">ls</td><td style="height: 63.3906px; border-width: 1px;">Listete den Inhalt in einem Verzeichnis auf. Mit dem Parameter -la werden auch versteckte Dateien abgezeigt und das Ergebnis in Listenform dargestellt.</td><td style="height: 63.3906px; border-width: 1px;">ls -la</td></tr><tr style="height: 46.5938px;"><td style="border-width: 1px; height: 46.5938px;">cd </td><td style="border-width: 1px; height: 46.5938px;">Wechselt in ein anderes Verzeichnis</td><td style="border-width: 1px; height: 46.5938px;">cd /home/ec2-user  
cd ..</td></tr><tr style="height: 29.7969px;"><td style="border-width: 1px; height: 29.7969px;">pwd</td><td style="border-width: 1px; height: 29.7969px;">Zeigt den Pfad des aktuellen Arbteitsverzeichnisses</td><td style="border-width: 1px; height: 29.7969px;">pwd</td></tr><tr style="height: 80.1875px;"><td style="border-width: 1px; height: 80.1875px;">nano</td><td style="border-width: 1px; height: 80.1875px;">Ein Editor mit der Textdateien erstellt und bearbeitet werden können.  
  
CTRL + X um eine Datei zu speichern</td><td style="border-width: 1px; height: 80.1875px;">nano datei.txt</td></tr><tr><td style="border-width: 1px;">mv</td><td style="border-width: 1px;">Kann eine Datei verschieben oder umbenennen</td><td style="border-width: 1px;">mv alter-name.txt neuer-name.txt

mv /hiome/ec2-user/datei.txt /tmp

</td></tr><tr><td style="border-width: 1px;">rm</td><td style="border-width: 1px;">Löscht eine Datei</td><td style="border-width: 1px;">rm datei.txt

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

# Eine statische IP-Adresse zuweisen

Standardmässig wird die öffentliche IP-Adresse einer EC2 Instanz bei jedem Neustart der Lab-Umgebung neu zugewiesen. Falls Sie dies verhindern möchten, müssen Sie der EC2 Instanz spezifische eine dedizierte IP-Adresse zuweisen. Der betreffende Dienst bei AWS nennt sich Elastische IPs.

Erstellen Sie vorgängig eine EC2 VM mit der Sie arbeiten möchten. Setzen Sie die Option **Öffentliche IP automatisch zuweisen** auf **Deaktivieren**. Dadurch wird die VM ohne eine dynamische öffentliche IP-Adresse erstellt. Die statisch öffentliche IP-Adresse wird anschliessend zugewiesen.

![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/1kbimage.png)

Nachdem Sie die VM angelegt haben, bei der Sie eine statische IP-Adresse zuweisen möchten, können Sie nun eine statische IP-Adresse erstellen, welche dann einer beliebigen Instanz zugewiesen werden kann. Gehen Sie hierzu wie folgt vor:

1. Klicken Sie im AWS Hauptmenü auf **Services** -&gt; **Netzwerk &amp; Bereitstellung von Inhalten** -&gt; **VPC** ![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/U4Timage.png)
2. Auf der VPC-Übersicht können Sie nun die Einstellungen über **Elastic IPs** öffnen:  
    ![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/4Yvimage.png)
3. Klicken Sie nun in der rechten oberen Ecke auf den orangen Button Elastic **IP-Adresse zuweisen** und wählen Sie anschliessend die Option **Amazon-Pool mit IPv4-Adressen.** Bestätigen Sie mit dem Button **Zuweisen.**
4. Die neue IP-Adresse erscheint nun in der Liste. Selektieren Sie die gewünschte IP-Adresse und klicken Sie auf den Button **Aktionen** und anschliessend auf **Elastic IP-Adresse zuordnen**.  
    ![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/rhhimage.png)
5. Wählen Sie als Ressourcen-Typ nun die Option **Instance** aus und wählen Sie über das Suchfeld die gewünschte Instanz aus. Bestätigen Sie anschliessend mit dem Button **Zuordnen**.  
    ![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/ii6image.png)
6. Wenn Sie nun auf die Übersicht Ihrere EC2-Instanzen gehen, sollten Sie sehen, dass die gewünschte Instanz nun eine öffentliche IP-Adresse erhalten hat:  
    ![image.png](https://shelf.iten.io/uploads/images/gallery/2022-10/scaled-1680-/iS3image.png)

# Sicherheitsgruppe erstellen

AWS regelt den Zugriff auf die VM mit einer vorangeschalteten Firewall. Daher muss man oftmals als erstes in AWS eine Sicherheitsgruppe erstellen. Mit dieser Sicherheitsgruppe wird die Firewall des Servers konfiguriert.

<div class="pointer-container" id="bkmrk-%C2%A0"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="Link kopieren" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>1. Starten Sie die [AWS Academy Lab-Umgebung](https://shelf.iten.io/books/einstieg-in-aws-academy "Einstieg in AWS Academy").
2. Klicken Sie auf **Services** -&gt; **Datenverarbeitung** um die EC2 Übersicht zu öffnen.
3. Klicken Sie in der Gruppe **Ressourcen** auf **Sicherheitsgruppen** um zur Übersicht mit den Sicherheitsgruppen zu gelangen.  
    [![image.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/dwGimage.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/dwGimage.png)
4. Klicken Sie auf den orangen Button **Sicherheitsgruppe erstellen**.
5. Wählen Sie einen passenden Namen wie z. B. DNS-Server. Diese Sicherheitsgruppe können Sie dann für alle DNS-Server verwenden, welche Sie in der AWS-Umgebung erstellen. Setzen Sie ebenfalls eine aussagekräftige Beschreibung wie "Gewaehrt den Zugriff fuer DNS-Dienste von extern" (Sonderzeichen sind nicht erlaubt)
6. Klicken Sie nun unter **Regeln für eingehenden Datenverkehr** auf **Regel hinzufügen**.
7. Fügen Sie nun jeweils die nötigen Regeln hinzu. Hierzu finden Sie meistens in der Aufgabe konkrete Angaben, welche Ports freigeschaltet werden müssen. Nachfolgen ein Beispiel für einen DNS-Dienst. (Port TCP/UDP 53 und Port TCP 22)  
    [![image.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/n1kimage.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/n1kimage.png)
8. Bei Regeln für ausgehenden Datenverkehr sollte bereits eine Regel existieren für den gesamten Datenverkehr. Diese können Sie so belassen:  
    [![image.png](https://shelf.iten.io/uploads/images/gallery/2022-12/scaled-1680-/md0image.png)](https://shelf.iten.io/uploads/images/gallery/2022-12/md0image.png)
9. Bestätigen Sie nun mit dem orangen Button **Sicherheitsgruppe erstellen**

Die nun erstellte Sicherheitsgruppe kann bei der Erstellung einer neuen VM dieser zugewiesen werden.