---
title:  "Red Hat Linux: Intro 1"
excerpt: "Een eerste basisles voor werken met RHEL en afgeleiden"
date:   "2024-03-24T21:00:00.000Z"
author: Eli Winderickx
hero_image: /cover_RHELIntro1.png
category: RHEL,Linux,Intro
---
## Toegang tot een server
### De terminal
Om te kunnen verbinden met een server op een veilige manier is SSH de standaard bij Linux servers. Dit commando is breed beschikbaar en eenvoudig te configureren.

MacOS: Terminal
Windows: Powershell, Command prompt, Terminal

> Voor Windows kan je best onder Services de SSH Agent `automatisch` laten laden en daarna `uitvoeren`. Dit zorgt er voor dat Windows ook onze SSH keys beter zal begrijpen.

### SSH key aanmaken
Vooraleer we gaan verbinden, zorgen we best dat we dat op een veilige manier doen; SSH sleutels. Hierbij gaan we een cryptografische berekening laten doen die ons zal authenticeren bij de server. De eerste stap is een sleutel aanmaken. Dat proces moet in principe maar eenmalig gebeuren maar technisch gezien kan je voor iedere server een andere sleutel maken, al is dat niet erg handig.

De optie `-t` gaat ons de mogelijkheid geven om een sterkere cryptografische beveiliging te doen van onze sleutels. Als je die `-t` optie niet meegeeft, zal er standaard `RSA` gebruikt worden. Voldoende veilig voor huis en tuin toepassingen maar niet voor omgevingen waar hackers op azen. Verder is `-C` een optie die gerust weggelaten kan worden, Dan wordt jouw gebruikersnaam gebruikt in combinatie met jouw toestelnaam.

```bash
ssh-keygen -t ed25519 -C "Training"
# Generating public/private ed25519 key pair.
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in /home/training/.ssh/id_training
# Your public key has been saved in /home/training/.ssh/id_training.pub
# The key fingerprint is:
```

Hiermee genereren we een `private sleutel` alsook een `publieke sleutel`. Die eerste, private sleutel, zal onze toegang naar de server worden. Deze moeten we goed beschermen en mogen we **nooit** delen!. Het andere bestand, te herkennen aan de `.pub`achteraan, is de publieke sleutel en gaat feitelijk als slot functioneren waarvoor we de private sleutel kunnen gebruiken.

We worden gevraagd voor de locatie van de sleutel op te geven. Hierbij gaan we ook ineens de naam van het bestand voor de private sleutel ingeven. We krijgen vervolgens de mogelijkheid om een wachtwoord in te geven. Voor de training kunnen we dat gerust leeg laten maar in productie kies je hier best een veilig en goed te onthouden wachtwoord. **Sla dat wachtwoord veilig op in een wachtwoord manager**

Nu we een key gemaakt hebben, moeten we tegen de SSH service vertellen dat we deze willen gebruiken als we naar servers gaan verbinden. Dit kunnen we eenvoudig met het `ssh-add` commando. Geef daarnaast ook het pad mee naar jouw `private sleutel`. Als je een wachtwoord ingesteld hebt, moet je dat nu ingeven.

```bash
ssh-add /home/training/.ssh/id_ed25519
```

### SSH configuratie
Omdat we graag efficient werken, willen we dat de computer ineens de juiste gegevens voor de juiste server zal gebruiken. Dit kunnen we opslaan in een configuratie bestand. Gebruik een tekst editor om nu `/home/training/.ssh/config` aan te passen. Geven we dit niet mee, kunnen we dat nog steeds gebruiken om naar de server te verbinden maar dan gaat de SSH service alle keys af die hebben toegevoegd en moeten we ook alle informatie zoals gebruiker, sleutel en misschien poortnummer meegeven in de commandline om te verbinden naar de server.

```
Host training
    hostname server.training.be
    user training
Host server
    hostname 10.10.1.20
    port 22222
    user admin
    IdentityFile ~/.ssh/id_ed25519
Host *
    IdentityFile ~/.ssh/id_training
    AddKeysToAgent yes
    # MacOS
    UseKeychain yes
```

### Verbinden naar de server
Om er nu voor te zorgen dat de server onze sleutels zal accepteren, moeten we onze **publieke** sleutel naar server verplaatst krijgen. Hier is er opnieuw een commando voor voorzien. Met onderstaand commando geven we expliciet in welke informatie we nodig hebben om onze `publieke sleutel` op de juiste plaats te krijgen. Omdat we zonet de configuratie goed gezet hebben, moeten we dat alemaal niet doen en kunnen we een verkorte versie gebruiken.

> Let op! Het wachtwoord dat nu gevraagd wordt, is het wachtwoord van de gebruiker op de server.

```bash
# Expliciete versie
ssh-copy-id -i /home/training/.ssh/id_training training@server.training.arpa
# Ingekorte versie door SSH config
ssh-copy-id training
# Effectief verbinden
ssh training
```

### De gebruiker
We zijn nu verbonden met de server:
- met onze eigen gebruiker
- op een veilige methode
- eenvoudig

De gebruiker waarmee we nu verbonden zijn naar de server heeft enkele belangrijke eigenschappen. Deze zijn belangijk in hoe we kunnen werken in de server en wat we mogen doen op de server. Dit kunnen we even opvragen met onderstaande commando's

```bash
# Wat is onze user, userid, groep en groupid
id
# Welke instellingen staan er klaar voor onze user
grep $USER /etc/passwd
```

Via het `id` commando krijgen we nu de `userid` terug met `username`, de primaire `groupid` en `group` en eventuele additionele groupen.

Het `grep` commando, waarop we later nog verder terugkomen, gaat onze gebruiker opzoeken in `/etc/passwd`. Hierin staan nog een paar belangrijke eigenschappen van onze gebruiker opgelijst zoals; Hoe noemt onze gebruiker, user- en groupid, onze homefolder en de shell die we willen gebruiken als we op de server komen.

De `homefolder` is jouw persoonlijke map op deze server en kan je gebruiken om eventueel een paar bestanden relevant voor de server te bewaren of te bewerken. Vooral naar een snelle trainingkup van configuratie bestanden kan de `homefolder` wel handig zijn maar ook daarover later meer.

```
training:x:1000:1000:training gebruiker:/home/training:/usr/bin/bash
```

### Administrator rechten
De root user is koning op de server. Dat is de eerste gebruiker die aangemaakt wordt en heeft **alle** rechten. Waar we kunnen gaan we dus hier geen gebruik van maken. Die gebruiker heeft te veel macht en in de verkeerde handen kan dit veel verkeerd doen. In de plaats daarvan gaan we, wanneer we het nodig hebben, onze commando's voorvoegen met `sudo`; `Substitute User, Do`.

Deze rechten hebben we gekregen via een groep. Vaak is dat de `wheel` groep maar afhankelijk van de Linux distributie en interne configuratie, kan dat ook een andere groep worden. Om te weten te komen welke groep dat is en wat je hierdoor mag doen, kunnen we een kijkje nemen in het `/etc/sudoers` bestand.

Het relevante stukje staat vrij onderaan. Onderstaand lees je als volgt: De groep `wheel` mag op `alle machines` die deze configuratie gebruiken, als `alle gebruikers`, `alle commando's` uitvoeren. Uiteraard omdat we nu een enkele server gebruiken, is deze configuratie enkel geldig op de server waarop we aangemeld zijn. Verder kunnen we naast de `root` user ook commando's uitvoeren als een andere gebruiker door `sudo` uit te voeren met de `-u` flag.

> Opletten met aanpassingen aan dit bestand! Je kan jezelf rechten afnemen en zo administratief toegang ontzeggen. Best maak je een extra bestand aan in `/etc/sudoers.d/`!

```
%wheel	ALL=(ALL)	ALL
```

## De commandline
### Navigeren in de terminal
Standaard in `Red Hat Enterprise Linux` wordt `Bash` oftewel de `Born Again Shell` voorzien voor de gebruikers. Zoals de naam doet vermoeden is dit niet de enigste shell die beschikbaar is. Als we software gaan bekijken, kunnen we zo'n alternatieve shell installeren en proberen gebruiken. Voor nu gaan we even `bash` verkennen.

In `bash` komen er een aantal commando's meegeleverd met de shell die ons zullen helpen om te navigeren in de shell. Maar eerst misschien even kijken naar de shell zelf.

```
Gebruiker@server:~$
```

We zien op een oogopslag met welke gebruiker we aangemeld zijn en hoe de server noemt gevolgd door de map waarin we ons bevinden. De map `~` is eigenlijk niet de exacte map waarin we zitten maar meteen een bash shortcut naar de map waarin we zitten. Deze verwijst naar onze Home folder. Als we dat willen verifiëren, kunnen we `pwd` uitvoeren. Dit gaat ons het volledige pad tonen.

```bash
# verplaats naar een bovenliggende map
cd ..
# Verplaats naar een specifieke map
cd /tmp
# verplaats naar de map die we net bezocht hadden
cd -
# Terug naar onze home map
cd ~
```

### Autocompletion
Handig! Maar het kan nog beter. Als we naar een lang pad willen navigeren zoals `/usr/share/bash-completion/completions/` kunnen we simpel weg de eerste letters intypen en vervolgens tweemaal op de tab toets drukken. We krijgen dan ofwel suggesties te zien als er meerdere opties zijn ofwel wordt ons pad automatisch aangevuld met het juiste pad.

```bash
# Navigeer naar de juiste map
cd /usr/share/bash-completion/completions/
# Keer terug naar de homefolder
cd ~
# of
cd -
```

### BASH shortcuts
Hiernaast zijn er nog enkele handige shortcuts die ons leven als administrator handiger gaan maken.

```bash
bash
# Control + D gaat onze huidige sessie afmelden
chd
# Control + C gaat de huidige handeling stoppen.
# Ofwel stopt dit een bestaand proces
# Ofwel maakt dit onze entry leeg

# Control + R staat ons toe te zoeken in onze geschiedenis
cd /usr
```

> Control + Z is ook een handige shortcut maar komt later tijdens processen aan bod

### History
Die geschiedenis kunnen we ook op andere manieren opvragen. De meest eenvoudige manier is via het `history` commando. Hier krijgen we meteen een lijst te zien van alle commando's die we hebben uitgevoerd met daarvoor een getal. Dat getal telt op per commando en kunnen we ook gebruiken om een bepaald commando rechtstreeks opnieuw uit te voeren.

```bash
history
!1
cd
# Door nu op Alt + . te drukken, kunnen we ook terug in onze geschredenis gaan
# Het laatste woord, variabele of commando van de history wordt toegevoegd
# aan ons commando.
```

