Intelligente Lösungen
in neuer Dimension

Benutzer-Zuordnung in LXC-Containern mit Ubuntu-18.04

Heute ist mir mehr oder weniger zufällig aufgefallen, dass meine Ubuntu-18.04-Container ohne Benutzer-Zuordnung laufen. Der Benutzer “root” innerhalb des Containers entspricht also dem Benutzer “root” außerhalb. Damit fehlt aus meiner Sicht eine wichtige Hürde für Ausbrechmöglichkeiten!

Hier beschreibe ich, wie ich das Problem korrigiere

Sichtung der LXC-Container mit Ubuntu-16.04

Die LXC-Container, die unter Ubuntu-16.04 laufen, haben diese Zuordnungen für Benutzer und Gruppen:

  • lxc.id_map = u 0 165536 65536
  • lxc.id_map = g 0 165536 65536

Das bedeutet, dass der Benutzer “root” innerhalb des Containers dem Benutzer “165536” außerhalb des Containers zugeordnet ist. Gleiches gilt für die Gruppe. Dieser Benutzer kann außerhalb des Containers quasi keinerlei Aktionen durchführen!

Anpassung des Basiscontainers

  • Bereiche wählen
    • User: 100000 – 165535 (Länge: 65536)
    • Group: 100000 – 165535 (Länge: 65536)
  • /etc/subuid und /etc/subgid erweitern auf dem LXC-Host (auch für “root”, mehrere Zeilen pro UID sind OK)
  • LXC-Container stoppen: lxc-stop -n ubuntu1804-64
  • Skript lxc-fuidshift.sh auf den LXC-Host kopieren
  • Skript ausführen: lxc-fuidshift.sh -u 0:100000 -g 0:100000 /var/lib/lxc/ubuntu1804-64
  • Konfiguration vom LXC-Container anpassen, Datei /var/lib/lxc/ubuntu1804-64/config
Änderungen an der Datei config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     #lxc.include = /usr/share/lxc/config/nesting.conf
     # (Be aware this has security implications)
     # Distribution configuration
     lxc.include = /usr/share/lxc/config/ubuntu.common.conf
    +lxc.include = /usr/share/lxc/config/ubuntu.userns.conf
     lxc.arch = linux64
     # Container specific configuration
    +lxc.id_map = u 0 100000 65536
    +lxc.id_map = g 0 100000 65536
     # Network configuration
     lxc.network.type = veth
     lxc.network.link = lxcbr1
     lxc.network.flags = up

  • LXC-Container starten: lxc-start -d -n ubuntu1804-64

Anpassung der anderen Container

Ermittlung aller Container ohne Zuordnung:

1
2
cd /var/lib/lxc
grep -L id_map */config|xargs -n1 dirname

Für die betroffenen Container muß analog zum Basiscontainer vorgegangen werden!

Änderungshistorie

  • 2019-04-30: Erste Version

SLES10: Von VMwarePlayer zu VirtualBox

Für einen Kundenauftrag bestand für mich die Notwendigkeit, eine VM mit SLES10 von VMwarePlayer zu VirtualBox zu migrieren.

VM erstellen

  1. VirtualBox starten
  2. Oracle VM VirtualBox Manager – Neu
  3. Virtuelle Maschine erzeugen
    • Name: SLES10
    • Ordner: …
    • Typ: Linux
    • Version: openSUSE (64-bit)
    • Speichergröße: 2048 MB
    • Vorhandene Festplatte verwenden: VMDK-Datei vom VMwarePlayer
    • Erzeugen

Erste Starts

Leider klappt der Start der frisch angelegten VM nicht. Sowohl beim “normalen” Startvorgang, als auch mein “failsafe”n Startvorgang bleibt die VM während des Starts hängen. Details sind nachfolgenden Bildschirmfotos zu entnehmen!

Normal

VirtualBox - SLES10 - normal

Failsafe

VirtualBox - SLES10 - failsafe

Korrektur

  1. VirtualBox starten
  2. Oracle VM VirtualBox Manager – VM auswählen (links in der Liste) – System
  3. Einstellungen – Beschleunigung – Paravirtualisierung
    • Ist: “voreingestellt”
    • Soll: “keine”, “minimal”, “Hyper-V” oder “legacy” (diese Werte funktionieren alle)

Zweiter Start

Nun startet die VM (fast) wie üblich, man kann sich im Textmodus anmelden. Probleme gibt es lediglich bei der grafischen Anmeldung (… die brauche ich aber nicht).

KDE-NEON installieren

Hier beschreibe ich, wie ich meinen Rechner mit KDE-Neon einrichte.

ISO herunterladen

USB-Stick erzeugen

1
2
3
# Ermitteln: Welche /dev/sdX-Datei gehört zum USB-Stick?
# -> Bei mir: /dev/sdb [WICHTIG! NICHT "RATEN"!]
dd if=neon-user-...iso of=/dev/sdb

Installation durchführen

  • Von USB starten
  • Bei UEFI-PCs: “Textoberfläche” muß sichtbar sein für das Boot-Menü! Wenn’s grafisch aussieht, dann startet der USB-Stick im BIOS-Modus, das sorgt für Probleme!
  • Installation – Komplette Platte mit verschlüsseltem LVM

Partitionierung korrigieren

  • Von USB-Stick booten
  • sudo -s
  • cryptsetup luksOpen /dev/sda5 cheer
  • vgscan
  • vgchange -a y
  • lvscan
  • lvresize --resizefs --size 20G /dev/neon-vg/root (… dauert eine ganze Weile, knapp 2 Minuten)

Die nachfolgenden Kommandos scheinen unnötig zu sein, ich habe sie auf einem Rechner ausgeführt, auf dem anderen nicht:

  • mount /dev/neon-vg/root /mnt
  • for dir in /dev /dev/pts /proc /sys /run; do sudo mount --bind $dir /mnt/$dir; done
  • chroot /mnt /bin/bash
  • grub-install /dev/sda
  • update-grub

Neustart:

  • exit
  • reboot

Pakete aktualisieren

1
2
3
4
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get clean

Zusatzpakete installieren

1
2
sudo apt-get install joe openconnect openvpn git emacs
sudo apt-get install net-tools sshuttle chromium-browser

Partitionen anlegen

1
2
3
sudo lvcreate -n root2 -L 20G neon-vg
sudo lvcreate -n home -L 20G neon-vg
sudo mkfs.ext4 /dev/neon-vg/home

Home-Partition umziehen

1
2
3
4
5
6
sudo -s
mount /dev/neon-vg/home /mnt
cd /mnt
cp -a /home/uli .
# /etc/fstab editieren
reboot

Anpassungen

  • 4 Arbeitsflächen, 1 Zeile, Wechsel mit Strg-1 … Strg-4
  • Strg-Alt-T: Konsole öffnen (… klappt mit Standard-Einstellungen oft nicht –> zusätzlich konfigurieren)

USB-Stick nicht beschreibbar

Heute habe ich versucht, einen SanDisk-USB-Stick auf meinem Laptop mit dd zu beschreiben. Das hat zunächst nicht funkioniert, es erschienen immer Fehlermeldungen der Art:

1
dd: konnte '/dev/sdb' nicht öffnen: Das Dateisystem ist nur lesbar

Diese Dinge habe ich dann ausprobiert:

  • sudo hdparm -r0 /dev/sdb … kein Erfolg
  • sudo blockdev --setrw /dev/sdb … kein Erfolg
  • Änderungen an usb-storage: Funktioniert

Sichten von /var/log/syslog zeigt sowas:

1
2
3
4
5
6
7
8
... scsi 6:0:0:0: Direct-Access     SanDisk  Cruzer Fit       1.26 PQ: 0 ANSI: 5
... sd 6:0:0:0: Attached scsi generic sg2 type 0
... sd 6:0:0:0: [sdb] 62530624 512-byte logical blocks: (32.0 GB/29.8 GiB)
... sd 6:0:0:0: [sdb] Write Protect is on
... sd 6:0:0:0: [sdb] Mode Sense: 43 00 80 00
... sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
...  sdb:
... sd 6:0:0:0: [sdb] Attached SCSI removable disk

Hier der Ablauf der Änderungen an “usb-storage”:

  • Sichten der USB-IDs: lsusb|grep -i cruzer Bus 002 Device 003: ID 0781:5571 SanDisk Corp. Cruzer Fit
  • Abklemmen von “usb-storage”: sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage
  • Neues Einklinken von “usb-storage”: sudo modprobe usb_storage quirks=0781:5571:w

Nach der Korrektur sieht /var/log/syslog so aus:

1
2
3
4
5
6
7
... scsi 6:0:0:0: Direct-Access     SanDisk  Cruzer Fit       1.26 PQ: 0 ANSI: 5
... sd 6:0:0:0: Attached scsi generic sg2 type 0
... sd 6:0:0:0: [sdb] 62530624 512-byte logical blocks: (32.0 GB/29.8 GiB)
... sd 6:0:0:0: [sdb] Assuming Write Enabled
... sd 6:0:0:0: [sdb] Assuming drive cache: write through
...  sdb:
... sd 6:0:0:0: [sdb] Attached SCSI removable disk

LXC-Container Ubuntu-18.04

Hier beschreibe ich, wie ich meinen Basiscontainer erzeuge.

Basiscontainer via LXD herunterladen und aktualisieren

1
2
3
4
5
6
7
8
9
10
11
# Auf dem Host...
lxc launch ubuntu:18.04 ubuntu-1804
lxc exec ubuntu-1804 /bin/bash

# Im Container...
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get autoremove
apt-get clean
poweroff

Nacharbeiten

Zusatzpakete installieren

Für meine tägliche Arbeit brauche ich

  • joe
  • apt-transport-https
  • openssh-server (scheint bei 18.04 bereits per Standard installiert zu sein)
  • net-tools (für ifconfig und netstat)

Diese Pakete installiere ich im Container so:

1
2
3
4
5
apt-get install joe
apt-get install apt-transport-https
apt-get install openssh-server
apt-get install net-tools # ... provides ifconfig and netstat
apt-get clean

OpenSSH aktivieren

1
systemctl enable ssh

SSH-Zugriff via PubKey

1
2
3
4
5
6
7
mkdir /root/.ssh
chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
cat >>/root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1cd... Uli's SSH Key
^D

Ewige Protokollierung mit Zeitstempel

Siehe StackOverflow -Unlimited Bash History.

/etc/bash.bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
HISTFILESIZE=
HISTSIZE=
HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; ${PROMPT_COMMAND:-true}"
# Log last command to syslog
log_command () {
 echo "${USER} $(HISTTIMEFORMAT='' builtin history 1|cut -c8-)" |  logger -t shell -p user.info
}
PROMPT_COMMAND="${PROMPT_COMMAND:-true};log_command"

/etc/skel/.bashrc und /root/.bashrc und /home/ubuntu/.bashrc

Bislang:

1
2
3
4
...
HISTSIZE=1000
HISTFILESIZE=2000
...

Neu:

1
2
3
4
...
#HISTSIZE=1000
#HISTFILESIZE=2000
...

Zeitzone korrigieren

1
2
3
4
5
root@ubuntu-1804:~# date
Mon Apr  8 04:59:43 UTC 2019
root@ubuntu-1804:~# timedatectl set-timezone Europe/Berlin
root@ubuntu-1804:~# date
Mon Apr  8 07:00:21 CEST 2019

Änderungshistorie

  • 2019-04-29: Bash-Historie in /var/log/syslog speichern

Linux-Kommandozeile: Farbe von Ordnern ändern

Ich verwende eine Kommandozeile mit schwarzem Hintergrund. Wenn ich mir Ordnernamen anzeigen lasse, so werden diese “dunkelblau” dargestellt. Ich kann sie kam erkennen:

dunkelblau

Hier beschreibe ich, wie ich die Farbe der Ordnernamen in “hellpink” wandle:

  1. Farbcode ermitteln: AskUbuntu kennt alle Varianten – 1;35
  2. Datei ~/.bashrc editieren
    • PS1-Zeile editieren: “01;34m” –> “01;35m”
    • Ganz unten neue Zeile: LS_COLORS=$LS_COLORS:'di=1;35:' ; export LS_COLORS

Neue Kommandozeile öffnen und neue Farben genießen!

pink

Hier noch die Änderungen an ~/.bashrc als DIFF:

Änderungen an ~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--- .bashrc_dunkelblau  2019-04-06 06:29:35.311364698 +0000
+++ .bashrc     2019-04-06 06:30:12.583362700 +0000
@@ -57,7 +57,7 @@
 fi

 if [ "$color_prompt" = yes ]; then
-    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;35m\]\w\[\033[00m\]\$ '
 else
     PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 fi
@@ -115,3 +115,4 @@
     . /etc/bash_completion
   fi
 fi
+LS_COLORS=$LS_COLORS:'di=1;35:' ; export LS_COLORS

Aktualisierung von MariaDB

Bei meinen Ubuntu-Containern kommt es immer wieder vor, dass die Aktualisierung von MariaDB mit folgenden Ausgaben hängen bleibt:

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo apt-get update
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
...
Setting up kmod (22-1ubuntu5.2) ...
Installing new version of config file /etc/modprobe.d/blacklist.conf ...
Setting up mariadb-client-core-10.0 (10.0.38-0ubuntu0.16.04.1) ...
Setting up mariadb-client-10.0 (10.0.38-0ubuntu0.16.04.1) ...
Setting up mariadb-server-core-10.0 (10.0.38-0ubuntu0.16.04.1) ...
Setting up mariadb-server-10.0 (10.0.38-0ubuntu0.16.04.1) ...

Manchmal hilft SEHR langes Warten!

Manchmal muß auch manuell nachgeholfen werden:

1
2
3
4
5
6
7
8
9
10
$ sudo service mysql stop
$ ps waux|grep dpkg|grep -v grep|cut -c10-15|xargs sudo kill
$ ps waux|grep dpkg|grep -v grep|cut -c10-15|xargs sudo kill -15
$ ps waux|grep dpkg|grep -v grep|cut -c10-15|xargs sudo kill -9
$ ps waux|grep mysql|grep -v grep|cut -c10-15|xargs sudo kill
$ ps waux|grep mysql|grep -v grep|cut -c10-15|xargs sudo kill -15
$ ps waux|grep mysql|grep -v grep|cut -c10-15|xargs sudo kill -9
$ sudo apt-get upgrade
$ sudo dpkg --configure -a
$ sudo apt-get upgrade

Bislang hat danach dann immer alles funktioniert!

Server-Zertifikat anzeigen mit OPENSSL

Gelegentlich muß ich mir ein Server-Zertifikat von der Konsole aus ansehen. Das geht am besten mit OPENSSL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Mit TLS-SNI
$ openssl s_client  -showcerts -connect {hostname}:443 -servername {hostname}|openssl x509 -text|less
...
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
        Validity
            Not Before: Feb  8 00:00:00 2019 GMT
            Not After : Feb  7 23:59:59 2021 GMT
        Subject: OU = Domain Control Validated, OU = PositiveSSL Multi-Domain
...
            X509v3 Subject Alternative Name: 
                DNS:{hostname}, DNS:{alias1}, DNS: {alias2}
...

# Ohne TLS-SNI
$ openssl s_client  -showcerts -connect {hostname}:443|openssl x509 -text|less
...

ImageMagick - SVG nach PNG wandeln

Manchmal muß ich SVG-Dateien nach PNG wandeln. Das Werkzeug meiner Wahl hierfür ist ImageMagick und davon das Werkzeug convert. Ich verwende Version 6.7.7:

1
2
3
4
$ convert --version
Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP    

Einfachste Variante

Im Grunde genommen muß man nur dies ausführen:

1
2
# convert {svg-datei} {png-datei}
$ convert mypicture.svg mypicture.png

Danach hat man die PNG-Datei.

Transparenter Hintergrund

Meine SVG-Datei hat einen weißen Hintergrund. Der wird mit der einfachsten Variante auch so in die PNG-Datei übernommen. Oft ist mir’s lieber, wenn der Hintergrund transparent ist, das erreiche ich so:

1
convert -background transparent mypicture.svg mypicture.png

Treppen entfernen

Die Option “+antialias” soll die Treppenbildung reduzieren. Ich kann keine Auswirkung feststellen, eventuell ist die bei mir per Standard aktiv:

1
2
$ convert +antialias -background transparent\
   mypicture.svg mypicture.png

Größe anpassen

Mit file mypicture.png kontrolliere ich die Größe der PNG-Datei:

1
2
$ file mypicture.png
mypicture: PNG image data, 744 x 1053, 16-bit gray+alpha, non-interlaced

Die Größe gefällt mir nicht, ich hätte gerne eine Höhe von einem Achtel dieser Größe.

1
2
3
$ convert -density 72  mypicture.svg mypicture.png
$ file mypicture.png
mypicture: PNG image data, 744 x 1053, 16-bit gray+alpha, non-interlaced

Mit 72 kommt die Größe 744x1053 heraus. Versuchen wir’s mit der Hälfte davon:

1
2
3
$ convert -density 36  mypicture.svg mypicture.png
$ file mypicture.png
mypicture: PNG image data, 149 x 210, 16-bit gray+alpha, non-interlaced

Folgende Optionen haben nicht funktioniert:

  • -size (breite)x(hoehe) … scheint einfach ignoriert zu werden
  • -resize (breite)x(hoehe) … verschlechtert die Qualität, weil erst gerastert und dann umgerechnet wird

Inkscape - Rand bei SVG-Grafiken

Ich habe einige SVG-Grafiken, bei denen die Objekte scheinbar “zufällig” mitten im Arbeitsbereich stehen. Ein Beispiel ist dies:

dp-logo-mit-rand

Für die Weiterverarbeitung und Einbindung ist das relativ ungeschickt. Ich hätte gerne eine SVG-Grafik, die “bündig” mit den enthaltenen Objekten abschließt.

Hilfsmittel hierfür: Inkscape!

Hier der genaue Ablauf:

  1. Inkscape starten: inkscape mypicture.svg
  2. Datei – Dokumenteneinstellungen
  3. Seitengröße – Seitengröße an Inhalt anpassen …
  4. Alle Umrandungen bei 0 belassen (oder auf 0 setzen)
  5. Seite in Auswahl einpassen
  6. Speichern

Danach ist die SVG-Grafik randlos:

dp-logo-ohne-rand