Category Archives: Linux

Linux

Unitymedia WifiSpot unter Linux / wpa_supplicant.conf

Hier eine funktionierende, getestete Config für Unitymedia WifiSpot unter Linux für eure /etc/wpa_supplicant.conf:

network={
ssid=”Unitymedia WifiSpot”
#bssid=xx:xx:xx:xx:xx:xx
key_mgmt=WPA-EAP
eap=PEAP
identity=”unitymedia/dein@mailadresse.de”
password=”PASSWORT”
}

Falls ihr eure Logindaten nicht wißt: Im Kundencenter unter „Meine Produkte“ / „Internet“ / „Einstellungen WifiSpot“ ein Passwort vergeben. Wenn es mehrere WifiSpots gibt, von denen nur einer stabil läuft, tragt seine MAC unter bssid ein. Ansonsten braucht ihr die Zeile nicht. Viel Spaß! 🙂

Windows 10 Installation USB-Stick unter Linux erstellen (UEFI/neueres BIOS)

Aktualisiert zuletzt am 23.11.2019 für Windows 10 1909. Die letzte von mir selbst verifizierte Version ist 1903, bitte sagt in den Kommentaren bescheid, ob 1909 auch funktioniert.

Um unter Linux für Windows 10 einen USB-Stick zur Installation erstellen, muss man etwas mehr tun, es gibt keine vorgefertigten Tools. Hier eine Kurzanleitung für Moderne PCs mit UEFI:

Gebt mir bitte in den Kommentaren Feedback, ob es funktioniert!

Zuerst die NEUE Methode, ab Windows 10 1809. Danke an zilla für den Hinweis auf Wimsplit.

Die NTFS-Methode von George99 funktionierte bei mir nicht, falls ihr sie erfolgreich testet, gebt bitte Feedback.

/dev/sda im Folgenden durch euren USB-Stick ersetzen.

# Partitionierung
DEVICE=/dev/sda

# Partitionierung auf dem USB Stick löschen
dd if=/dev/zero of=$DEVICE bs=1M count=1

# Installation der nötigen Tools um die wim Dateien zu splitten, denn vfat 
# kann keine Dateien > 4GB behandeln
sudo apt-get install wimtools
# Partitionen einrichten
fdisk ${DEVICE}
n
p
1
ENTER
ENTER
t
c
a
w

# Formatierung, mounten des Laufwerks
mkfs.vfat ${DEVICE}1
mkdir /mnt/usb
mount ${DEVICE}1 /mnt/usb

# Kopieren der Daten
mkdir Win10
mount -o loop Win10_1909_German_x64.iso Win10
rsync -avP --exclude='sources/install.wim' Win10/ /mnt/usb/
wimsplit Win10/sources/install.wim /mnt/usb/sources/install.swm 2500
# Aushängen der Laufwerke
umount /mnt/usb
umount Win10

Nun einfach davon booten. Ins BIOS kommt ihr meist, wenn ihr sofort nach dem Einschalten eures PCs ESC, F1, F2, F8, F11 oder F12 drückt. Viel Erfolg!

Alternativ bitte diese ALTE Methode verwenden, um Windows 10 1709 zu installieren. Danach Windows werkeln lassen, bis alle Updates drauf sind. Das ist etwas nervig, aber funktioniert definitiv – ganz ohne wimsplit.

# Partitionierung
DEVICE=/dev/sda

# Partitionierung auf dem USB Stick löschen
dd if=/dev/zero of=$DEVICE bs=1M count=1

# Partitionen einrichten
fdisk ${DEVICE}
n
p
1
ENTER
ENTER
t
c
a
w

# Formatierung, mounten des Laufwerks
mkfs.vfat ${DEVICE}1
mkdir /mnt/usb
mount ${DEVICE}1 /mnt/usb

# Kopieren der Daten
mkdir Win10
mount -o loop Win10_1709_German_x64.iso Win10
cp -a Win10/* /mnt/usb

# Aushängen der Laufwerke
umount /mnt/usb
umount Win10

Review of Open-E DSS v7

Initially, we were looking for a 10GE-iSCSI storage solution that would do synchronous or at least memory-synchronous mirroring of data to a second system and automatic failover. We planned to use the system as storage backend for a few dozens VMs, and wanted the storage to be highly available on a shared IP. Active-Active supported seemed pretty awesome too, and the system should allow seamless failover.

However, some vendors didn’t provide this option, others were too expensive and the project was an open bidding, so we had to be cheap. The only viable options seemed to be building something ourselves or buying Open-E from a distributor that would take care of the hardware part. They were also offering 24/7 support. It sounded pretty good, and our distributor was saying he did a couple of installations with it, so we went for it. The system consisted of:

Continue reading

Hidden Services

Nicht jede Software unterstützt das URL-Schema von Tor hidden services; in dem Falle kann man als hack einfach socat benutzen, hier im Beispiel wird ein IRC hidden service mit  irssi genutzt:

socat TCP4-LISTEN:4223,fork SOCKS4A:localhost:XYZ.onion:6667,socksport=9050

Dadurch wird der Port lokal gebunden und über den lokalen Tor Socks Port auf den Hidden Service umgeleitet. In irssi tippt kann man nun einfach:

/connect localhost 4223

Ich finde das einen schönen generischen Hack, den ich euch nicht vorenthalten wollte. 🙂

Gentoo Linux Security Weekend

Last weekend, Gentoo Linux developers a3li and keytoaster came around and with help from p-y and underling via IRC, we killed the huge backlog of open CVEs in our tracker, voted on about 100 security bugs, drafted several dozens of GLSAs and were hunting bugs on GLSAMaker2. We also had good company from (non-security) developer idl0r on saturday. 🙂

During the week, we polished up some GLSAs and since sunday, we send these (a lot more to come!):

OpenSSL: Multiple vulnerabilities
Wireshark: Multiple vulnerabilities
Bugzilla: Multiple vulnerabilities
Dovecot: Multiple vulnerabilities
GnuTLS: Multiple vulnerabilities
PHP: Multiple vulnerabilities
vsftpd: Denial of Service
feh: Multiple vulnerabilities
Conky: Privilege escalation
Wget: User-assisted file creation or overwrite
Adobe Flash Player: Multiple vulnerabilities

Thanks for helping out, everyone!

Here are some impressions:

 

 

 

 

 

byebye, SLES 9

Heute kam wenig überraschend eine Mail von Novell, dass der SLES 9 Support nun nach 7 Jahren zu Ende ist – außer man ist LTS Kunde – was wohl ziemlich teuer wird und nur für Großunternehmen Sinn macht. SLES9 ist so dermaßen angegraut, beim Blick auf die Paketversionen wird man schon leicht Nostalgisch… ;D

 

Interessant sind die Statistiken:

Gesamte Updates: 1565
Security: 767
Empfohlen: 718
Optional: 72
YaST: 8

Das CVE-Tracking war im ersten Jahr nicht vollständig, daher sind die Nummer eigentlich etwas höher.

Insgesamte CVE-Einträge: 1447

Top CVE-Kanidaten:

127 IBM Java 5
125 IBM Java 1.4.2
84 kernel
66 SUN Java 1.4.2
76 clamav
68 ethereal
58 mozilla
44 cups
32 mysql
31 libpng
28 freetype2
24 ruby
21 XFree86
20 libexif
18 mailman
18 horde
16 quagga
17 tomcat
16 apache2
15 openssh
15 gd
14 python
13 yast2-packagemanager-devel
13 km_nss
12 openssl
12 samba
11 tk
10 pcre

Interessant, dass der Kernel sogar schlimmer als Mozilla war…ich dachte das wäre unmöglich… :/ Clamav mit 76 Löchern finde ich aber auch eine ziemliche Katastrophe, zumal das ja auch oftmals auf Mailgateways läuft…

LD_PRELOAD magic

Wenn man z.B. ein Programm hat, dass prüft, ob man eine bestimmte CPU hat – z.B. weil es nicht unter qemu verwendet werden soll – kann es sinnvoll sein, den Check zu umgehen, bzw. dem Programm vorzugaukeln, dass alles OK ist. Hierfür kann man idealerweise LD_PRELOAD nutzen, welches einen bestehenden Library Call überlädt. Im Detail läuft das wie folgt ab:

– man findet die Adresse des originalen Library Calls per dlsym()
– man deklariert die Funktion, sie überlädt die originale Funktion (hier: open())
– man schreibt in der Funktion je nach übergebenem Parameter um, zurückliefert wird
– oder man führt die Originalfunktion aus

/*
* open_preload.c
*/
 
#define _GNU_SOURCE
#include <sys/syscall.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dlfcn.h>
#include <dirent.h>
 
static void init (void) __attribute__ ((constructor));
 
int (*real_open)(__const char *name, int flags, mode_t mode);
 
static void init (void)
{
        real_open = dlsym(RTLD_NEXT,"open");
}
 
int open(const char *pathname, int flags, mode_t mode)
{
	if (strcmp(pathname,"/proc/cpuinfo") == 0)
	{
		return(real_open("/tmp/cpuinfo",flags,mode));
	}
	else
	{
        	return(real_open(pathname,flags,mode));
	}
 
}

Das Ganze compiliert und testet man dann wie folgt:

[sb@machine ~]$ echo test > /tmp/cpuinfo
[sb@machine ~]$ gcc -g -fpic -shared -ldl -o open_preload.so open_preload.c
[sb@machine ~]$ LD_PRELOAD="./open_preload.so" cat /proc/cpuinfo 
test
[sb@machine ~]$

Das fühlt sich schon ein wenig nach RootKit-Programmierung an. 😉

awesome: Laptop Batteriestatus anzeigen

Hier ein weiterer Tipp für awesome: der Laptop Batteriestatus soll angezeigt werden. Zuerst kopiert man das von mir gestern programmierte Tool cbatt nach /home/name/cbatt.sh, dann trägt man folgendes in der rc.lua ein:

mybattmon = widget({ type = "textbox", name = "mybattmon", align = "right" })
function battery_status ()
        local fd=io.popen("/home/name/cbatt.sh", "r")
        local line=fd:read()
        return line
end
 
mybattmon.text = " " .. battery_status() .. " "
my_battmon_timer=timer({timeout=30})
my_battmon_timer:add_signal("timeout", function()
    mybattmon.text = " " .. battery_status() .. " "
end)
my_battmon_timer:start()

Unter mywibox[s].widgets = { … } fügt man dann noch an der gewünschten Stelle mybattmon hinzu, und fertig ist die Chose. Der Timeout legt fest, wie oft das Script aufgerufen wird; jede Sekunde wäre m.A. arg übertrieben und verkürzt die Akkulaufzeit sicherlich.

Wer wie im Vorpost mehrere Rechner hat, und die Batterieanzeige z.B. nur auf dem Laptop anzeigen will, nutzt folgenden Schnippsel um das Ganze zu erweitern:

    -- hostname auslesen
    a=io.popen("uname -n");
    io.input(a)
    if io.read() == "laptop" then
    	batt=1
    end
 
    -- Add widgets to the wibox - order matters
    mywibox[s].widgets = {
        {
            mylauncher,
            mytaglist[s],
            mypromptbox[s],
            layout = awful.widget.layout.horizontal.leftright
        },
        mylayoutbox[s],
        mytextclock,
	batt == 1 and mybattmon,		-- Batterie nur beim richtigen Host hinzufügen
        s == 1 and mysystray or nil,
        mytasklist[s],
        layout = awful.widget.layout.horizontal.rightleft
    }

awesome: individuelle Hintergrundbilder pro Host

Wer sein ~ in einem Versionskontrollsystem wie z.B. git pflegt, trackt damit seine gesamten Daten, um z.B. auf verschiedenen Rechnern immer gleiche Datenbestände incl. Versionierung zu haben. Das Problem dabei ist, dass der Windowmanager (hier: awesome) für die verschiedenen Geräte ggfs. auch andere Einstellungen braucht, z.B. für das Hintergrundbild. Über den uname des Systems kann man einfach unterscheiden, wo das Script grade aktuell ausgeführt wird und erspart sich das Pflegen von 2 Konfigurationen. Hierzu erstellt man z.B. unter Gentoo die ~/.config/awesome/theme.lua wie folgt:

theme_path = "/usr/share/awesome/themes/default/theme.lua"
theme = dofile(theme_path)
a=io.popen("uname -n");
io.input(a)
 
if io.read() == "laptop" then
theme.wallpaper_cmd = { "awsetbg /home/user/real_1280x800.jpg" }
else
theme.wallpaper_cmd = { "awsetbg /home/user/real_1920x1280.jpg" }
end
 
return theme

Voila – es wird immer das korrekt dimensionierte Wallpaper geladen.