Linux

Linux Documentatie

Algemeen

Algemeen

Rechten toekennen met chmod

Met het commando chmod kan je rechten toekennen en wijzigen op bestanden en directories. De syntax voor chmod is:

$ chmod options mode file

Meer informatie hierover kan je opvragen in de terminal met het commando:

man chmod

Gebruikersklassen en chmod

In Linux heeft elk bestand op een server individuele toegangsrechten. Hetzelfde geldt voor directories. De toegangsrechten worden geregeld volgens drie klassen van gebruikers:

Toegangsrechten

Het Linux bestandssysteem heeft drie basisrechten. Elk van de bovengenoemde gebruikersaccounts kan verschillende rechten hebben die door de eigenaar van het bestand zijn toegewezen:

Denk er bij het toekennen van toegangsrechten aan dat machtigingen in Linux niet worden geërfd. Ofwel, als je een bestand in een directory aanmaakt, krijgt dat bestand niet automatisch de toegangsrechten die voor de hele directory gelden. Individuele bestandsrechten vloeien voort uit de machtiging van het programma dat het bestand heeft aangemaakt.

Weergave van toegangsrechten in de terminal

Met het volgende commando kan je de bestanden en direcories weergeven en de bijbehorende rechten zien:

ls -l

Hier onder zie je een voorbeeld:

alex@alex-Lenovo-G500:~/test-chmod$ ls -l
totaal 12
drwxr-xr-x 2 alex alex 4096 mei 4 13:47 dir01
drwxr-xr-x 2 alex alex 4096 mei 4 13:48 dir02
drwxr-xr-x 2 alex alex 4096 mei 4 13:48 dir03
-rw-r--r-- 1 alex alex 0 mei 4 13:47 file01.txt

De volgende illustratie laat duidelijk zien hoe de rechten in elkaar steken:

chmod01.jpg

De rwx (read, write, execute) parameters kan je aanpassen voor de eigenaar (user)groep (group) en anderen (others).
Dit is het zogenaamde rechtenmasker en bestaat uit een octale notatie van drie cijfers. Onderstaande illustratie maakt dit duidelijk:

chmod02.png

Ieder cijfer bestaat dus uit drie bits en kan dus lopen van 0 t/m 7. Op deze manier kan je de rechten toekennen.

 
Voorbeelden:

Stel dat we in ons voorbeeld de rechten willen wijzigen van de directory “dir01”, zodanig dat iedereen alles mag, dan kan dat als volgt:

chmod 777 dir01


Stel dat we in ons voorbeeld de rechten willen wijzigen van het bestand “file01.txt”, zodanig dat alleen de gebruiker kan lezen en schrijven, dan kan dat als volgt:

chmod 600 file01.txt

Stel dat we alleen de rechten van alle onderliggende directories willen wijzigen en niet van de bestanden:

find /home/alex/test-chmod/ -type d -exec chmod 755 {} \;

Stel dat we alleen de rechten van alle onderliggende bestanden willen wijzigen en niet van de directories:

find /home/alex/test-chmod/ -type f -exec chmod 644 {} \;

Symbolische notatie

In plaats van de octale notatie kan men ook de rechten wijzigen door een symbolische notatie. Zie ook onderstaande illustratie:

chmod03.png

Voorbeelden:

Stel dat we in ons voorbeeld de rechten willen wijzigen van de directory “dir01”, zodanig dat iedereen alles mag, dan kan dat als volgt:

chmod ugo+rwx dir01

Onderstaand commando heeft hetzelfde effect:

chmod a+rwx dir01


Op deze manier kan men ook bepaalde rechten weer verwijderen:

chmod o-rwx dir01

Sticky bit:

Met sticky bit kan je de rechten op mappen en bestanden beperken. Als je een map gedeeld hebt met andere gebruikers, maar je wilt niet dat die gebruikers bestanden kunnen verwijderen of hernoemen, dan kan je de sticky bit aanzetten om dit te voorkomen. De rechten van de gebruikers worden daarmee ingeperkt. Alleen de eigenaar en de root gebruiker hebben dan nog wel alle rechten. Gebruikers kunnen dan nog wel bestanden toevoegen. Sticky bit wordt enkel toegepast op directories en niet op bestanden. Wanneer de sticky bit aan staat voor een directory, zijn de bestanden in die directory ook beschermd.
Het toepassen van de sticky bit is eenvoudig, hiervoor wordt de t vlag gebruikt met chmod:

Voorbeelden:

In onderstaand voorbeeld wordt de map “dir01” beschermd door het sticky bit aan te zetten:

chmod +t dir01

Uitzetten kan dan dus weer met:

chmod -t dir01

Je kunt zien wanneer er een sticky bit is gezet op een directory. Dit wordt aangegeven met de letter “t” in het laatste octet:

alex@alex-Lenovo-G500:~/test-chmod$ ls -l
totaal 12
drwxrwxrwt 2 alex alex 4096 mei 4 13:47 dir01
drwxr-xr-x 2 alex alex 4096 mei 4 13:48 dir02
drwxr-xr-x 2 alex alex 4096 mei 4 13:48 dir03
-rw------- 1 alex alex 0 mei 4 13:47 file01.txt

 
Stel dat je nu de sticky bit wilt aan zetten voor alle onderliggende directories, dan kan dat als volgt:

find /home/alex/test-chmod/ -type d -exec chmod +t {} \;

Uitzetten kan dan weer met:

find /home/alex/test-chmod/ -type d -exec chmod -t {} \;

 

Bash

Bash

Wachten op toets in Bash script (press any key)

Soms kan het handig zijn dat je in een Bash script moet wachten op een toets aanslag voordat het terminal venster weer sluit.
Dit kan eenvoudig door onderstaand commando toe te voegen in je Bash script:

read -n 1 -s -r -p "Press any key to continue"

Na het uitvoeren van het script wacht deze nu op een willekeurige toets aanslag om vervolgens het terminal venster te sluiten.

 

Databases

Debian

Debian

Debian backports repository instellen

In de Debian backports repository vind je pakketten die vaak nieuwer zijn dan uit de originele “stable” repository.
Nadeel is wel dat deze Debian pakketten vaak in de fase “testing” of “unstable” zitten, dus niet volledig getest zijn op betrouwbaarheid, veiligheid of stabiliteit. Maar voor sommige toepassingen kan het wel handig zijn om deze backports repository te gebruiken.

We gaan nu de repository toevoegen aan de Debian sources.list. Open hiervoor een nieuw bestand in je editor:

nano /etc/apt/sources.list.d/backports.list

En voeg hier de volgende regel in:

deb http://deb.debian.org/debian buster-backports main

Hierna kan je de update uitvoeren:

apt-get update

Na deze actie kan je pakketten installeren uit de backports repository.
Wanneer je een pakket specifiek uit de backports repository wilt installeren kan dat met:

apt-get -t buster-backports install "package"
Debian

Installatie van PHP 7.4 / 7.3 / 7.2 / 7.1 in Debian 10

In Debian 10 is de standaard PHP versie 7.3
Wanneer je andere versies van PHP wilt gebruiken en eventueel naast elkaar wilt draaien kan je via onderstaande stappen dit voor elkaar krijgen.

Toevoegen van de third-party PHP repository

We moeten eerst een aantal benodigde pakketten installeren:

apt update
apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https

Importeren van de key:

wget https://packages.sury.org/php/apt.gpg
apt-key add apt.gpg

Toevoegen van de SURY repository:

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.list

Update de repository index:

apt-get update

Installeren van de PHP pakketten

Afhankelijk van de PHP versie kan je nu de PHP pakketten installeren.
Voor PHP 7.4 kan je dit doen met:

apt-get install php7.4 php7.4-cli php7.4-common

Op deze manier kan je dus ook PHP 7.3 / 7.2 / 7.1 installeren door de versie aan te passen (dus 7.4 wordt 7.3 of 7.2 of 7.1).
Je kunt dus meerdere PHP versies naast elkaar installeren. Iedere PHP versie heeft zijn eigen configuratie bestanden in de directory /etc/php/7.X

De default PHP versie instellen

Met onderstaand commando kan je de default PHP versie instellen (in dit voorbeeld PHP versie 7.4):

update-alternatives --set php /usr/bin/php7.4

PHP versie checken

php -v

Firewall

Firewall

Configureren van NAT in UFW

Als je gebruik wilt maken van NAT om data van de externe naar de interne netwerk interface te routeren, dan dienen er een aantal configuratiebestanden gewijzigd te worden. Dit zijn etc/default/ufw , /etc/ufw/before.rules en /etc/ufw/sysctl.conf. Open eerst /etc/default/ufw met de editor (bijvoorbeeld nano):

nano /etc/default/ufw

En wijzig de volgende regel:

DEFAULT_FORWARD_POLICY="ACCEPT"

Vervolgens dienen we ipv4 forwarding toe te staan. Dit doen we door het bestand /etc/ufw/sysctl.conf te openen in de editor:

nano /etc/ufw/sysctl.conf

En wijzig de volgende regel:

net/ipv4/ip_forward=1

Vervolgens openen we /etc/ufw/before.rules in de editor:

nano /etc/ufw/before.rules

En voeg het volgende toe voor de filter regels:

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-F
# Forward traffic through eth0 - Change to match your out-interface
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT

De optie “-F” (Flush) heb ik er ingezet zodat de NAT tabel eerst wordt gewist. Wanneer men UFW uitschakelt en weer inschakelt, komen er dubbele regels in te staan. Hiermee wordt dit voorkomen. Sla het bestand op en herstart UFW met:

ufw disable
ufw enable

Configureren van Port Forwarding in UFW

Als je bijvoorbeeld verkeer van poort 80 en 443 wilt forwarden naar een server met IP adres 192.168.1.120, dan dien je eerst het bestand /etc/ufw/before.rules te openen in de editor:

nano /etc/default/before.rules

En wijzig je het bestand als volgt:

:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.120:80
-A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.120:443

Vervolgens herstart je UFW weer met:

ufw disable
ufw enable


Vervolgens dien je nog wel kenbaar te maken dat tcp verkeer voor poort 80 en 443 toegestaan wordt:

ufw allow 80/tcp
ufw allow 443/tcp

Bovenstaande regels geven toegang voor alle IP adressen van buiten af voor poort 80 en 443. Om dit te beperken tot een specifiek publiek IP adres zou je het volgende kunnen opgeven:

ufw allow from <PUBLIEK IP-ADRES> to any port 80 proto tcp
ufw allow from <PUBLIEK IP-ADRES> to any port 443 proto tcp

Hier onder volgt nog een voorbeeld van port forwarding waarbij de WAN interface luistert op poort 1999 en vervolgens doorsluist naar poort 80 van de PC met IP-adres 192.168.10.211:

-A PREROUTING -i eth0 -p tcp --dport 1999 -j DNAT --to-destination 192.168.10.211:80


Bron:

Linuxconfig.org

Firewall

UFW Commando’s

UFW staat voor Uncomplicated FireWall en is de standaard firewall van Ubuntu. Eigenlijk is het een front-end om de standaard firewall configuratie in Linux (IPTables) te vergemakkelijken. Hier onder volgen veel gebruikte commando’s en voorbeelden.

UFW inschakelen

ufw enable

UFW uitschakelen

ufw disable

Status checken

ufw status verbose

Bekijk de regels in /etc/ufw (.rules)

ufw show raw

UFW Allow syntax en voorbeelden

ufw allow <port>/<optional: protocol>
Voorbeeld: To allow incoming tcp and udp packet on port 53
ufw allow 53
Voorbeeld: To allow incoming tcp packets on port 53
ufw allow 53/tcp
Voorbeeld: To allow incoming udp packets on port 53
ufw allow 53/udp

UFW Deny syntax en voorbeelden

ufw deny <port>/<optional: protocol>
Voorbeeld: To deny tcp and udp packets on port 53
ufw deny 53
Voorbeeld: To deny incoming tcp packets on port 53
ufw deny 53/tcp
Voorbeeld: To deny incoming udp packets on port 53
ufw deny 53/udp

Bestaande regels verwijderen

To delete a rule, simply prefix the original rule with delete. For example, if the original rule was:
ufw deny 80/tcp
Use this to delete it:
ufw delete deny 80/tcp

Port ranges

For port ranges you can use the colon (:) to separate the lowest and the highest port in the range.
For example:
ufw allow 10000:15000/udp
ufw deny 8000:8100/tcp

Comments

Example: Open port 53 and write a comment about rule too
ufw allow 53 comment 'open tcp and udp port 53 for dns'

UFW services

You can also allow or deny by service name since ufw reads from /etc/services
To see get a list of services:
less /etc/services
Allow by Service Name
ufw allow <service name>
Voorbeeld: to allow ssh by name
ufw allow ssh
Deny by Service Name
ufw deny <service name>
Voorbeeld: to deny ssh by name
ufw deny ssh

UFW Logging

To enable logging use:
ufw logging on
To disable logging use:
ufw logging off

UFW Advanced Syntax: Allow

Allow by Specific IP:
ufw allow from <ip address>
Voorbeeld:To allow packets from 207.46.232.182:
ufw allow from 207.46.232.182
Allow by Subnet:
You may use a net mask :
ufw allow from 192.168.1.0/24
Allow by specific port and IP address:
ufw allow from <target> to <destination> port <port number>
Voorbeeld: allow IP address 192.168.0.4 access to port 22 for all protocols
ufw allow from 192.168.0.4 to any port 22
Allow by specific port, IP address and protocol:
ufw allow from <target> to <destination> port <port number> proto <protocol name>
Voorbeeld: allow IP address 192.168.0.4 access to port 22 using TCP
ufw allow from 192.168.0.4 to any port 22 proto tcp

UFW Advanced Syntax: Deny

Deny by specific IP:
ufw deny from <ip address>
Voorbeeld:To block packets from 207.46.232.182:
ufw deny from 207.46.232.182
Deny by specific port and IP address:
ufw deny from <ip address> to <protocol> port <port number>
Voorbeeld: deny ip address 192.168.0.1 access to port 22 for all protocols
ufw deny from 192.168.0.1 to any port 22
Advanced Example
Scenario: You want to block access to port 22 from 192.168.0.1 and 192.168.0.7
but allow all other 192.168.0.x IPs to have access to port 22 using tcp
ufw deny from 192.168.0.1 to any port 22
ufw deny from 192.168.0.7 to any port 22
ufw allow from 192.168.0.0/24 to any port 22 proto tcp

Laat de regels zien met een regelnummer

ufw status numbered

Regels verwijderen of tussenvoegen op basis van regelnummers

You may then delete rules using the number.
This will delete the first rule and rules will shift up to fill in the list:
ufw delete 1
Insert numbered rule:
ufw insert 1 allow from <ip address>

Enable Ping

Note: Security by obscurity may be of very little actual benefit with modern cracker scripts.
By default, UFW allows ping requests. You may find you wish to leave (icmp) ping requests enabled
to diagnose networking problems.
In order to disable ping (icmp) requests, you need to edit /etc/ufw/before.rules and remove the following lines:
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
or change the "ACCEPT" to "DROP"
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

Reload UFW

When you edit UFW configuration files, you need to run reload command.
For example, you can edit /etc/ufw/before.rules, enter:
nano /etc/ufw/before.rules
After saving the changes reload UFW with:
ufw reload

Resetting UFW to defaults and make inactive

ufw reset


Bron:

https://help.ubuntu.com/community/UFW

Netwerk

Netwerk

OpenWRT opkg-upgrade script

Binnen OpenWRT kan je met het onderstaand commando bekijken of er updates beschikbaar zijn voor de geïnstalleerde pakketten:

opkg list-upgradable

Wanneer dit het geval is, dan is het standaard niet echt makkelijk om deze pakketten allemaal tegelijk te upgraden. Het commando om pakketten binnen OpenWRT te upgraden is:

opkg upgrade pakket01 pakket02 pakket03

Er is een script beschikbaar die dit allemaal makkelijker maakt, namelijk opkg-upgrade. Het installeren van het script gaat het makkelijkst via het commando git. Wanneer je onderstaande commando’s uitvoert, dan wordt het script gedownload en geïnstalleerd.

git clone git://github.com/tavinus/opkg-upgrade.git
cd opkg-upgrade
./opkg-upgrade.sh -i

Het script wordt dan in een directory geplaatst die ook in het pad staat. Het is dan direct uit te voeren met het volgende commando:

opkg-upgrade

Wanneer er dan upgrades beschikbaar zijn, dan krijg je direct de vraag of je ze allemaal wilt upgraden. Zie ook onderstaande screenshot:

openwrt-opkg-upgrade-1.jpg

Er zijn nog meer opties mogelijk met het script. Voor deze opties kan je de help opvragen met:

opkg-upgrade -h


Bron:

GitHub opkg-upgrade

 


Netwerk

OpenWRT SSH Public Key Authenticatie

In dit artikel binnen de kennisbank is al beschreven hoe je SSH authenticatie kan toepassen binnen Linux. In de OpenWRT router software kan je via de Luci web interface heel eenvoudig de inhoud van de public key plakken in het daarvoor bestemde veld. OpenWRT maakt standaard gebruik van de Dropbear SSH server. Log in via de OpenWRT web interface en ga vervolgens naar het menu System –>> Administration

openwrt-ssh01.jpg

Onder in de pagina vind je dan het veld SSH-Keys. Hier kan je de inhoud van de public key in plakken en vervolgens opslaan met Save and Apply.

openwrt-ssh02.jpg

Onder het kopje SSH Access kan je vervolgens nog aangeven of je SSH password authentication wilt toestaan of niet. Ook voor de root gebruiker.

openwrt-ssh03.jpg

Netwerk

TAP interface maken in Ubuntu / Linuxmint

Methode 1:


Maak een interface aan:

sudo nano /etc/network/interfaces.d/tap0.cfg

Plaats hier het volgende in:

auto tap0
iface tap0 inet manual
    pre-up ip tuntap add dev tap0 mode tap user alex group netdev
    pre-up ip a add 10.1.1.1/24 dev tap0
    up ip link set dev tap0 up
    post-down ip link del dev tap0

Handmatig kan je de interface verwijderen met:

sudo ifdown tap0

en weer up brengen met:

sudo ifup tap0


Methode 2:


Installeer pakket uml-utilities:

sudo apt-get install uml-utilities

Maak een script:

nano /home/alex/scripts/create-tap-int.sh

Plaats het onderstaande hier in:

#! /bin/bash
tunctl -u alex -g netdev -t tap0
ifconfig tap0 10.1.1.1 netmask 255.255.255.0 up

Pas de rechten aan:

sudo chmod u+x /home/alex/scripts/create-tap-int.sh

Zorg er voor dat het script automatisch start bij het opstarten van de PC.
Maak hiervoor het volgende aan:

sudo nano /etc/systemd/system/tap-int.service

En plaats hier het volgende in:

[Unit]
Description=Create TAP interface
After=network.target

[Service]
ExecStart=/home/alex/scripts/create-tap-int.sh

[Install]
WantedBy=multi-user.target

Onderstaande opdracht uitvoeren om bovenstaande script automatisch te starten tijdens opstarten:

sudo systemctl enable tap-int.service

En start dan de nieuw gemaakte service op met:

sudo systemctl start tap-int.service

Je kunt de TAP interface verwijderen met:

sudo tunctl -d tap0

 

 

Netwerk

Netstat Listening Ports

Met onderstaand commando kan je in Linux de "Listening Ports" bekijken.
Dit kan handig zijn wanneer er bijvoorbeeld een service niet wilt starten omdat er al een poort in gebruik is.

sudo netstat -tunlp

netstat-listening-ports.png

Python

Python

Default Python versie wijzigen in Debian 10

Je kunt meerdere Python versies installeren in Linux.
Om te zien welke versie op dit moment actief (default) is kan je het volgende uitvoeren:

python -V

Om te zien welke versies geinstalleerd zijn in Linux kan je het volgende commando uitvoeren:

ls /usr/bin/python*

Prioriteren van de verschillende Python versies

Wanneer je met bovenstaand commando weet welke Python versies zijn geinstalleerd, dan kan je met onderstaand commando de prioriteit aangeven:

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2

In bovenstaand geval heeft Python versie 3.8 de hoogste prioriteit, dus dan is dit de default Python versie.

Wanneer je een Python versie hebt geïnstalleerd vanuit source (zelf gecompileerd), dan kan je deze versie toevoegen met:

update-alternatives --install /usr/bin/python python /usr/local/bin/python3.9 3

Hiermee wordt Python3.9 op prioriteit 3 gezet en heeft dus in dit geval de hoogste prioriteit. Deze versie is dan de actieve Python versie.

Switchen tussen default Python versie

Wanneer je een andere Python versie de default versie wilt maken, voer dan onderstaand commando uit:

update-alternatives --config python

Je kunt de default versie weer controleren met: python -V

Python

Python 3.8 installeren in Debian 10 (Buster)

Python 3.8 installeren

In Debian 10 hebben we standaard alleen de beschikking over Python 2.7 en Python 3.7. Je kan met onderstaand commando controleren welke versies van Python geinstalleerd zijn in Debian:

ls /usr/bin/python*

De actieve Python versie kan je controleren met:

python -V

Nu kunnen we Python vanuit de source installeren, maar we hebben ook de beschikking over een repository die beschikbaar is gesteld door Pascal Roeleven. Het voordeel is dat we dan op de normale manier de Python 3.8 pakketten kunnen installeren.
Voordat we hiermee verder gaan moeten we eerst nog een paar benodigde pakketten installeren:

apt-get install gpg wget

Daarna kunnen we de GPG key installeren die nodig is:

wget https://pascalroeleven.nl/deb-pascalroeleven.gpg
apt-key add deb-pascalroeleven.gpg

Nu moeten we nog de sources.list aanmaken. Hiervoor maken we een nieuw bestand aan met de tekst editor:

nano /etc/apt/sources.list.d/python3.8-pascalroeleven.list

Hier plaatsen we het volgende in:

deb http://deb.pascalroeleven.nl/python3.8 buster-backports main

Hierna een update uitvoeren:

apt-get update

En dan uiteindelijk Python 3.8 installeren:

apt-get install python3.8 python3.8-venv python3.8-dev


BRON:

Python 3.8 backport for Debian buster

Python

Python installeren vanuit source in Debian 10

De nieuwste Python versie is vrij eenvoudig te installeren vanuit de broncode (source). In onderstaande stappen wordt beschreven hoe men dit kan doen.

Benodigde pakketten installeren

apt-get install build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev

Downloaden Python broncode

Op het moment van schrijven is Python 3.9.4 de nieuwste versie.
Deze gaan we downloaden en uitpakken.

cd /usr/src
wget https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz
tar xzf Python-3.9.4.tgz

Python compileren en installeren

cd Python-3.9.4
./configure --enable-optimizations
make altinstall

Het laatste commando “make altinstall” zorgt er voor dat de nieuwe versie naast de bestaande Python versies wordt geïnstalleerd. Doet men dit niet, dan wordt de bestaande versie overschreven.
Python 3.9.4 is nu geïnstalleerd in /usr/local/bin.

Controleren Python versie

Je kunt nu de Python versie controleren met:

python3.9 -V

Python verwijderen

Wanneer Python op deze manier wordt geïnstalleerd, dan kan men niet met een commando de installatie weer ongedaan maken. Hiervoor dient men de bestanden en directories met de hand te verwijderen. Onderstaande commando’s zorgen ervoor dat alles verwijderd wordt:

rm -f /usr/local/bin/2to3-3.9
rm -f /usr/local/bin/easy_install-3.9
rm -f /usr/local/bin/idle3.9
rm -f /usr/local/bin/pip3.9
rm -f /usr/local/bin/pydoc3.9
rm -f /usr/local/bin/python3.9
rm -f /usr/local/bin/python3.9-config
rm -rf /usr/local/bin/include/python3.9
rm -f /usr/local/lib/libpython3.9.a
rm -rf /usr/local/lib/python3.9
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/share/man/man1/python3.9.1


BRON:

How to Install Python 3.8 on Ubuntu, Debian and LinuxMint


Python

Virtualenv gebruiken in Python3

Virtualenv is een tool om een geïsoleerde Python omgeving te maken.
Deze omgeving heeft zijn eigen installatie directory die geen libraries deelt met andere virtuele omgevingen.

Verschil tussen virtualenv en venv

venv is een Python package dat standaard aanwezig is in Python3 (niet in Python2).
virtualenv is een python library die meer functionaliteiten biedt dan venv.
Via onderstaande link kan je zien wat de verschillen zijn tussen deze twee omgevingen:

Virtualenv installeren met behulp van pip3

We gaan er van uit dat Python3 is geïnstalleerd vanuit de source zoals beschreven in dit artikel.
Op het moment van schrijven is dit Python3.9.4. Je kan met onderstaand commando controleren welke versie Python actief is:

python3.9 -V

Met onderstaand commando kan je zien wat het pad is waar Python3.9 is geïnstalleerd:

which python3.9

In ons geval is dat /usr/local/bin/python3.9

We gaan nu eerst de package pip updaten. pip is de Python package installer.

python3.9 -m pip install --upgrade pip

Hierna kunnen we de virtualenv package gaan installeren:

pip3 install virtualenv

Virtuele Python omgeving maken

We kunnen nu een virtuele omgeving aanmaken met behulp van het commando virtualenv.
Let er op dat je ingelogd bent als de gebruiker waarvoor je de virtuele omgeving wilt maken.
In onderstaand voorbeeld log ik in vanuit de root console als de gebruiker alex:

sudo -su alex

En maak dan nu de virtuele omgeving aan met:

virtualenv -p /usr/local/bin/python3.9 /home/alex/pythonvenv

Je krijgt dan een vergelijkbare output te zien zoals hier onder:

alex@tux:~$ virtualenv -p /usr/local/bin/python3.9 /home/alex/pythonvenv

created virtual environment CPython3.9.4.final.0-64 in 274ms
creator CPython3Posix(dest=/mnt/sdb3/home/alex/pythonvenv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/mnt/sdb3/home/alex/.local/share/virtualenv)
added seed packages: pip==21.0.1, setuptools==56.0.0, wheel==0.36.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

Je kan de virtuele omgeving een willekeurige naam geven. In bovenstaand voorbeeld is dit dus pythonvenv.
Er wordt dan automatisch een directory aangemaakt met deze naam waarin de virtuele omgeving in wordt gemaakt.
Wanneer je daarin kijkt zie je de volgende directories staan:

alex@tux:~/pythonvenv$ ls -l
total 12
drwxr-xr-x 2 alex alex 4096 Apr 23 11:59 bin
drwxr-xr-x 3 alex alex 4096 Apr 23 11:59 lib
-rw-r--r-- 1 alex alex  227 Apr 23 11:59 pyvenv.cfg

Je ziet dat er binnen de virtuele omgeving de directories bin en lib zijn aangemaakt, evenals een configuratie bestand pyenv.cfg.
De virtuele omgeving heeft nu zijn eigen python en pip versie en de benodigde libraries.
Het activeren van de virtuele python omgeving kan je doen met:

source /home/alex/pythonvenv/bin/activate

Je ziet dan ook de prompt veranderen in:

(pythonvenv) alex@tux:~$ 

De prefix tussen haakjes (pythonvenv) geeft aan dat je in de virtuele python omgeving werkt.
Het de-activeren kan nu met het commando:

deactivate

Je krijgt dan weer de normale prompt terug.

Verwijderen van de virtuele Python omgeving

Het verwijderen van de virtuele Python omgeving is niets meer dan het verwijderen van de complete directory inclusief onderliggende directories en bestanden:

rm -rf /home/alex/pythonvenv


BRON:

Installing and using virtualenv with Python 3

Servers

Servers

Nginx installatie Debian 10 (Nginx repository)

Nginx is een snelle en lichtgewicht webserver die veel gebruikt wordt (naast Apache webserver).
In Debian heb je standaard de beschikking over de Nginx pakketten, maar dit is niet de nieuwste versie.
We kunnen de repository toevoegen van Nginx zelf. Hiermee hebben we dan de beschikking over de nieuwste versies.

Installeren benodigde pakketten

apt-get install curl gnupg2 ca-certificates lsb-release

Repository toevoegen voor de Nginx stable release

echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list

Repository toevoegen voor de Nginx mainline release

echo "deb http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list

Instellen repository pinning

Met onderstaand commando stellen we Debian zodanig in dat de Nginx repository voorrang heeft op de standaard Debian repository:

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \     | sudo tee /etc/apt/preferences.d/99nginx

Importeren van de Nginx signing key

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Wanneer je OK te zien krijgt is dit goed gegaan.

Installeren van Nginx

apt-get update
apt-get install nginx

Bron:

Nginx website
Hostup – How to Install Nginx and PHP 7.4 on Debian 10

SSH

SSH

SSH Public Key Authenticatie

public-private-300x127-1.png

SSH wordt gebruikt om op afstand in te kunnen loggen op een Linux systeem. Je kunt inloggen door middel van een gebruikersnaam en wachtwoord, maar veiliger is het om dit te doen met behulp van public key authenticatie. Hiervoor dienen we een public en private key te genereren op de PC waar vandaan we willen inloggen op het remote systeem. Hier onder volgen voorbeelden voor zowel een Linux als Windows PC.

SSH key’s genereren op een Linux PC

Open een terminal (Ctrl-Alt-T) en voer het volgende commando uit om een private en public key te genereren:

ssh-keygen

Er wordt nu gevraagd een bestandsnaam op te geven. Wanneer je dit niet doet, wordt standaard de naam id_rsa (private key) en id_rsa.pub (public key) gegeven aan de bestanden. Standaard worden de private en public key opgeslagen in de verborgen directory genaamd .ssh van de gebruiker waarmee ingelogd is. Dit is dus de directory ~/.ssh. Er wordt ook gevraagd om een “passphrase” tijdens het genereren. Dit is een wachtwoord waarmee de private key beveiligd wordt. Je kunt dit eventueel overslaan door bij de vraag niets op te geven. Het wachtwoord wordt gevraagd tijdens de inlog sessie op de remote machine. Indien geen wachtwoord is opgegeven wordt je direct ingelogd.

ssh-keygen-e1520435536763.png

Wanneer je een bestandsnaam opgeeft tijdens het genereren, dan dien je deze bestandsnaam op te geven in het ssh commando door middel van de optie -i (identity file). Bij de standaard naam (id_rsa) is dit niet nodig. Hier onder staat een voorbeeld:

ssh -i ~/.ssh/linuxfun.key username@linuxfun.nl

Als je gebruik maakt van een SSH config bestand in de .ssh directory, dan kan je dit opgeven met de parameter IdentityFile. Zie het voorbeeld hier onder:

Host linuxfun
    HostName linuxfun.nl
    User username
    IdentityFile ~/.ssh/linuxfun.key

Meer informatie over het SSH config bestand vind je hier. Nu we de private en public key gegenereerd hebben, moeten we de public key op de remote machine zien te krijgen. Dit kan o.a. door middel van het commando scp. Een voorbeeld staat hier onder:

scp ~/.ssh/id_rsa.pub username@linuxfun.nl:

De public key id_rsa.pub wordt hiermee gekopieerd naar de home directory van de gebruiker <username>. Wanneer de public key op de remote machine staat, dien je nu daarop in te loggen. We moeten de inhoud van de public key in het bestand ~/.ssh/authorized_keys zien te krijgen. Wanneer de directory .ssh en het bestand authorized_keys nog niet bestaan op de remote machine, dan dienen we deze eerst aan te maken. Zie de commando’s hier onder:

mkdir ~/.ssh
touch ~/.ssh/authorized_keys

Wanneer het bestand authorized_keys al bestaat, dan wordt door bovenstaande commando’s het bestand niet overschreven. We kunnen nu de inhoud van de public key toevoegen aan het bestand authorized_keys met het commando:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Je kunt controleren of de public key goed in het bestand authorized_keys staat met het commando:

more ~/.ssh/authorized_keys

Je kunt nu veilig de public key verwijderen van het remote systeem met:

rm ~/id_rsa.pub

Wanneer je een kopie wilt bewaren van de public key, dan kan je deze het beste verplaatsen naar de .ssh directory:

mv ~/id_rsa.pub ~/.ssh/

Het is nu mogelijk in te loggen op het remote systeem door middel van de ssh key’s. Dit gebeurt nu automatisch zonder een inlognaam en wachtwoord op te hoeven geven. Wanneer men een private key heeft gegenereerd met een wachtwoord (passphrase), dan dient men dit wachtwoord op te geven tijdens het inloggen.


SSH key’s genereren op een Windows PC

Onder Microsoft Windows kan je de public en private key’s genereren met behulp van de tool PuTTYgen. Dit is een tool die geïnstalleerd wordt samen met de SSH client PuTTY. Je kunt dit hier downloaden. Na installatie vind je de tools terug in het Windows start menu onder PuTTY. Start nu het programma PuTTYgen op en klik op Generate.

puttygen01.jpg

Je kunt nu de key’s genereren door de muis te bewegen in het vak Key.

puttygen02.jpg

Wanneer dit klaar is, zie je het volgende resultaat:

puttygen03.jpg

Door nu op de knop Save private key te klikken, kan je de private key opslaan op je Windows PC. Er wordt dan gevraagd of je de private key wilt opslaan zonder wachtwoord (passphrase). Wil je de private key beveiligen met een wachtwoord, vul dan de regel Key passphrase in en bevestig dit in de regel Confirm passphrase. De private key wordt opgeslagen met de extensie .ppk en kan direct gebruikt worden met de SSH client PuTTY. De public key, voor de remote machine, kunnen we naar het klembord kopiëren door met de rechter muisknop in het veld public key te klikken. Hier kiezen we vervolgens Alles selecteren (als dit nog niet geselecteerd is) en daarna voor Kopiëren. Door nu in te loggen op de remote machine, kan je vervolgens de public key plakken in het bestand ~/.ssh/authorized_keys met behulp van je favoriete tekst editor.


puttygen04.jpg

Om de private key te gebruiken in PuTTY open je dit programma en maak je een nieuwe connectie aan of je opent een bestaande connectie. Vervolgens ga je in de linker boom structuur naar de categorie Connection en selecteer je hier onder Data. In het veld Auto-login username kan je de gebruiker invullen waarmee je automatisch wilt inloggen.

putty01.jpg

Vervolgens kies je onder Connection de optie SSH en hier onder optie Auth. In het veld Private key file for authentication blader je naar het private key bestand met de .ppk extensie.

putty02.jpg

Om de configuratie op te slaan selecteer je boven in de boom structuur voor Session en vervolgens Save.

putty03.jpg

Wanneer dit is opgeslagen, kan je de verbinding maken met de remote machine en log je automatisch in. Mocht je de private key beveiligd hebben met een wachtwoord, voer dit dan in wanneer je inlogt en hierom gevraagd wordt.  


Uitschakelen password login in SSH

Nu we gebruik maken van public en private keys, is het verstandig om het inloggen via wachtwoorden uit te schakelen. Hier onder volgen de instructies voor zowel OpenSSH als Dropbear voor Debian Linux:

OpenSSH

Open het volgende bestand in een tekst editor:

nano /etc/ssh/sshd_config

Pas daar de volgende opties aan:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

Wanneer je niet wilt dat je als root kan inloggen, pas dan onderstaande optie aan:

class="lang:default decode:true " title="Disable root login">PermitRootLogin no


Sla het bestand op en herstart de ssh daemon met:

/etc/init.d/ssh reload
OF
sudo systemctl reload ssh

Dropbear

Open het volgende bestand in een tekst editor:

nano /etc/default/dropbear

En pas de volgende optie aan:

DROPBEAR_EXTRA_ARGS="-g -s"

Wanneer je niet wilt dat je als root kan inloggen, dan kan je de parameter -w nog toevoegen. Herstart de Dropbear daemon met:

/etc/init.d/dropbear restart

Bronnen:

Set up SSH public-key authentication to connect to a remote system
Dropbear, SFTP and passwordless logins in Debian
How to disable ssh password login on Linux to increase security

SSH

SSH shortcuts maken in Linux

ssh-300x110-1.jpg

SSH wordt veelvuldig gebruikt in Linux om via een terminal in te loggen op een remote machine. Dit gaat dan via de command line en ziet er bijvoorbeeld als volgt uit: ssh -p 2222 root@192.168.7.6 (Hierin is -p de poort waar ssh op luistert, standaard poort 22). Nu kan je in Linux zogenaamde ssh shortcuts maken, zodat je niet iedere keer die lange commando’s hoeft in te tikken. Je krijgt dan bijvoorbeeld een commando als: ssh thuis Dit kan je vastleggen in het bestand config. Dit bestand hoort dan te staan in de verborgen directory .ssh die op zijn beurt weer staat onder de Home directory van een Linux gebruiker. We gaan dus eerst naar de juiste directory met behulp van onderstaand commando:

cd ~/.ssh

Hierna kunnen we het bestand config gaan maken met:

nano config

Hier kunnen we de regels plaatsen die we nodig hebben. Voorbeeld:

Host thuis
    HostName 192.168.7.6
    User root
    Port 2222
Host example2
    HostName example.com
    User root
Host example3
    HostName 64.233.160.0
    User userxyz123
    Port 56000
Host amazon1
    HostName ec2.amazon.com
    User ec2-user
    IdentityFile /path/to/special/privatekey/amazon.pem

Sla het bestand op. De ssh shortcuts zijn direct actief. Uitgaande van bovenstaand voorbeeld kan je nu verbinding maken met de commando’s: ssh thuis, ssh example2, ssh example3, ssh amazon1

Bron:

How to Create an SSH Shortcut

 

 

 

 

Ubuntu - LinuxMint

Ubuntu - LinuxMint

Opstartbare USB stick maken voor installatie

Met onderstaand commando kan men vanaf de commandline een opstartbare USB stick maken om bijvoorbeeld LinuxMint te installeren. Deze instructie kan ook gebruikt worden om een opstartbare USB stick te maken voor Debian 10 (Buster).

sudo dd bs=4M if=/path/to/linuxmint-19.3-xfce-64bit.iso of=/dev/sdx status=progress oflag=sync

Zorg er voor dat je het juiste pad naar het ISO bestand invoert.
/dev/sdx is de USB stick waar je naar toe wilt schrijven.
Controleer met sudo fdisk -l welk device jouw USB stick is.

 

Users en Groups

Users en Groups

Een gebruiker aan een groep (of tweede groep) toevoegen

Een nieuwe groep aanmaken

groupadd mynewgroup

Een bestaande gebruiker aan een groep toevoegen

usermod -a -G examplegroup exampleusername

Voorbeeld: om de gebruiker geek aan de groep sudo toe te voegen voer je het volgende commando uit:

usermod -a -G sudo geek

Primary group wijzigen van een gebruiker

usermod -g groupname username

Let hier op de optie -g. De kleine letter g wil zeggen dat je een Primary Group toekent.
Wanneer je de hoofdletter -G gebruikt, dan ken je de gebruiker toe aan de Secondary Group.

Laat alle groepen zien waar de huidige gebruiker aan toegekend is

groups

Om de numerieke ID’s te zien die toegekend zijn aan een groep kan je het commando id gebruiken:

id

Om de groepen te laten zien waar een andere gebruiker aan toegekend is kan je onderstaand commando geven:

groups exampleusername

En de numerieke ID’s met:

id exampleusername

Een nieuwe gebruiker en aan een groep toekennen in één commando

useradd -G examplegroup exampleusername

Voorbeeld: maak een nieuwe gebruiker jsmith en voeg hem toe aan de groep ftp:

useradd -G ftp jsmith

Een wachtwoord toekennen aan de gebruiker kan dan achteraf met:

passwd jsmith

Een gebruiker toevoegen aan meerdere groepen

usermod -a -G group1,group2,group3 exampleusername

Je kan een gebruiker toevoegen aan net zoveel groepen als je zelf wilt door deze te scheiden met een komma.

Laat alle groepen zien in het systeem

getent group

Bron:

https://www.howtogeek.com/50787/add-a-user-to-a-group-or-second-group-on-linux/

Virtualisatie

Virtualisatie

VirtualBox problemen met Bridged netwerk en Wifi

Ik maak al lange tijd gebruik van Virtualbox onder Linux om het een en ander uit te proberen.
Op een gegeven moment merkte ik dat de bridged network adapter in VirtualBox niet meer werkte in combinatie met de wifi adapter in mijn laptop (LinuxMint 20.1). Bridged mode werkte wel met de vaste netwerk adapter, en het werkte wel met de wifi adapter wanneer ik een vast IP adres toekende aan de netwerk adapter in de virtuele machine. Blijkbaar werkt dan de DHCP client niet goed.
Ik kreeg dit weer werkend door de optie Promiscuous Mode op VM’s toestaan te zetten in de geavanceerde instellingen van de virtuele netwerk adapter (zie onderstaande afbeelding).

VirtualBox_Bridged.png

Virtualisatie

Meer dan 4 netwerk interfaces maken in Virtualbox

Set Mode and enable NIC

When a Mode is set the NIC will be enabled.

  1. Set NIC five to Host-Only Mode and User vboxnet0 (Initially existing Host-Only Net)

     

    VBoxManage modifyvm network-test --nic5 hostonly
    VBoxManage modifyvm network-test --hostonlyadapter5 "vboxnet0"
  2. Set NIC five to Bridge eth1

     

    VBoxManage modifyvm network-test --nic5 bridged
    VBoxManage modifyvm network-test --bridgeadapter5 "eth1'
  3. Set NIC to NAT Mode

     

    VBoxManage modifyvm network-test --nic5 nat
  4. Use the internal VM net “test01”

     

    VBoxManage modifyvm network-test --nic5 intnet
    VBoxManage modifyvm network-test --intnet5 "test01"


    Configuring NIC

    • To use VLAN and some other things in VMs the Promiscuous mode have to be enabled

       

      VBoxManage modifyvm network-test --nicpromisc5 allow-all
    • Use other hardware type (Intel Pro/1000 MT Server)

       

      VBoxManage modifyvm network-test --nictype5 82545EM
    • Dis/connect cable

       

      VBoxManage modifyvm network-test --cableconnected5 off

    BRON: More than 4 Network Cards in Virtualbox

VPN