Schlagwort-Archive: Linux

FTP-Uploads per Shell-Script

Ab und an komme auch ich nicht drumrum mit Zielen zu arbeiten, welche keine SSH/SFTP-Verbindung zulassen, sondern nur per FTP(S) erreichbar sind. Grade beim Automatisieren über Shell-Scripte ist das reichlich unschön. Ein praktischer Client ist in diesem Fall das Urgestein ncftp. Mit dessen Tools lässt sich z.B. schnell ein ein entferntes Verzeichnis löschen und durch die lokale Kopie ersetzen:

echo 'rm foo/bar/*
rm foo/baz/*
rmdir foo/bar
rmdir foo/baz
' | ncftp -u $USER -p $PASS $HOST

ncftpput -R -u $USER -p $PASS $HOST /foo/* ~/dev/foo/*

Windows Shutdown per Linux

Ab und an möchte man entfernte Rechner mal runterfahren. Mit Linux-Zielen ist das per ssh üblicherweise kein Problem, möchte man jedoch von einem Linux-PC den Shutdown-Befehl an einen Windows-Rechner geben muss man schon einmal suchen. Abhilfe schafft wie üblich Samba, welches den „net“-Befehl mitbringt. Ein Shutdown sieht dann wie folgt aus:

net rpc SHUTDOWN -C "Grund für den Shutdown" -f -I 127.0.0.1 -U username%password

CUPS/foomatic/gutenprint: „Unable to get list of printer drivers: Success“

Eigenlich bin ich ja Verfechter papierloser Abläufe, leider sind viele Behörden damit nicht einverstanden oder schreiben sinnloserweise selbstgestrickte Vorgaben statt offener Standards vor. Zum Glück stehen hier noch ein paar Drucker aus den 80ern und 90ern rum, die nicht nach 10 Seiten das Zeitliche segnen. Also: Drucker raus, Papier rein. Error. Bei der Installation des Druckers auf meinen PCs – genauer der Suche nach möglichen Treibern – meldete CUPS teilweise folgende, sehr aussagekräftige, Fehlermeldung:

Unable to get list of printer drivers: Success

Auffällig dabei: Ein Perl-Script bezüglich Foomatic belagert zuvor einen CPU-Kern. Auch konnte ich bei einem System beobachten, dass der Fehler erst nach Installation zusätzlicher Treiber (foomatic-db & Co) auftrat, mit „leerer“ Treiber-Liste jedoch nicht. Der Fehler ist konstant, also sowohl in der Desktop-GUI als auch im CUPS-Webinterface reproduzierbar.

tl;dr: Don’t do gutenprint…

Schauen wir mal genauer auf den 100%-Prozess: Dieser wird vom Nutzer „daemon“ gestartet und hat kein nice-Level. Der genaue Aufruf lautet

/usr/bin/perl /usr/lib/cups/driver/foomatic list

Das Script selbst lässt sich auch auf der Konsole manuell starten. „list“ gibt hierbei nicht wirklich etwas – auch nach mehreren Minuten keine Ausgabe. „help“ am Ende zeigt die möglichen Optionen:

foomatic -A
foomatic -P
foomatic -p [-d ] [-w]
foomatic list
foomatic cat [-w]
foomatic -h

-A : show all Printer ID’s and compatible drivers
-P : show all Printer ID’s whose names and model
matched by the RE. For example:
-P HP will match all names with HP in them
-p : Printer ID
-d : Driver name
If the driver is not specified then the default driver
for the is used.
list : List all possible PPDs in the format needed by the
cups-driverd
cat : Generate PPD file appropriate to the .
Available CUPS PPD URIs are listed by
„foomatic list“.
-w : Generate PPD which is compatible with the CUPS PostScript
driver for Windows (GUI strings are limited to 39
characters).
-h : show help information

Leider scheint es – jedenfalls laut Hilfe – keinen verbose- oder debug-Modus zu geben. Strace to the rescue. Zu sehen nicht viel – die Treiber-Dateien werden nacheinander geladen, die letzten Zeilen lauten:

stat(„/usr/share/foomatic/db/source/driver/xes.xml“, {st_mode=S_IFREG|0644, st_size=522, …}) = 0
stat(„/usr/share/foomatic/db/source/driver/xes.xml“, {st_mode=S_IFREG|0644, st_size=522, …}) = 0
stat(„/usr/share/foomatic/db/source/driver/xes.xml“, {st_mode=S_IFREG|0644, st_size=522, …}) = 0
open(„/usr/share/foomatic/db/source/driver/xes.xml“, O_RDONLY) = 3
lseek(3, 0, SEEK_CUR) = 0
read(3, „\n

Dummerweise ist „xes.xml“ auch die alphabetisch letzte Datei, also eher kein Fehler darin zu vermuten. Narf. Nunja – räumen wir mal auf. Unter /usr/share/foomatic/db/source müssen die Dateien unter PPD, driver, opt und printer weichen. Success. Kind of. Der Foomatic-Prozess endet ohne Fehler, also muss einer der Treiber der Übeltäter sein. Als erstes wandert opt wieder zurück, hier ist nicht viel drin. Noch alles OK. Auch das zurückkopieren von PPD zeigt keine Änderung. Printer klingt interessanter, daher spiele ich hier jede Datei einzel zurück:

for i in * ;do mv $i ../printer && echo $i && (/usr/bin/perl /usr/lib/cups/driver/foomatic list || exit) ; done

Dauert zu lange – ich entscheide mich nur die XML-Dateien der für mich interessanten Hersteller zu nutzen. Läuft noch. Es folgt Drivers. Weniger dateien, trotzdem manuell. Erster Kandidat: necp6 – ein Treiber für meinen Nadeldrucker. Passt – foomatic list liefert nun eine Liste aller NEC-Nadeldrucker. Fehlt noch mein Laser. Da Gutenprint schnell sein soll kopiere ich deren XMLs – nichts geht mehr. Hört sich nach Verursacher an – kopieren wir alles außer Gutenprint: Passt. Auch in CUPS lässt sich nun der Drucker anlegen. Fehler Gefunden würde ich sagen…

Monitorprofile mit xrandr-mgr

Mehrere Monitore machen Spaß. An meinem Hauptplatz werkeln 4 TFTs an einem Rechner – Mail, Code, Testausgaben, Medien – alles ist irgendwo dauerhaft sichtbar. Was etwas nervig ist sind jedoch Spiele: Diese landen unabhängig von der Primärmonitordefinition immer auf dem linken Monitor. Bisher habe ich hier manuell mit xrandr nachgeholfen und vor Start des Spiels meinen Desktop auf den TFT vor meiner Nase beschränkt. Leider hat xrandr keine undo-Button, das heißt nach dem Spielen musste ich immer wieder per Hand nachhelfen.

Heute ich mir das Tool xrandr-mgr begegnet, welches das anlegen von benannten Profilen erlaubt. Für mich nicht direkt nutzbar, da sich meine Konfiguration häufig ändert, aber für ein temporäres Merken des vorherigen Konfiguration trotzdem Ideal.

BitBastelei #146 – SSH unter Linux

BitBastelei #146 - SSH unter Linux

(41 MB) 00:30:06

2015-04-26 10:00 🛈

Vom Verbinden bis zum Tunneln
Alle Angaben beziehen sich auf OpenSSH

Befehle:

Verbinden zum Rechner:
ssh evil.server

Verbinden zum Rechner mit Nutzerangabe
ssh anderernutzer@evil.server

Host-Keys anzeigen
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key
(bzw. passender Key)

Host-Key aus „Adressbuch“ löschen
ssh-keygen -R evil.server

Neues Schlüsselpaar erzeugen
ssh-keygen

Key auf Server kopieren
ssh-copy-id username@evil.server

Passwort eines Keys ändern
ssh-keygen -f ~/.ssh/id_rsa -p

Argumente
-p 1234 – Port 1234 statt Port 22 nutzen
-C – Kompression einschalten
-v – verbose – zusätzliche Ausgaben zur Fehlersuche

Lokale Weiterleitung
ssh -L 127.0.0.1:1234:192.168.0.2:80 evil.server
Lokale Verbindungen an Port 1234 werden über evil.server an 192.168.0.2 Port 80 weitergeleitet

Remote Weiterleitung
ssh -R 0.0.0.0:1235:127.0.0.1:80 evil.server
Verbindungen auf eine beliebige IP von evil.server auf Port 1235 werden an Port 80 des lokalen PCs weitergeleitet

SOCKS-Proxy
ssh -D 3128 evil.server
Es wird ein SOCKS-Proxy auf Port 3128 gestartet. Dieser kann z.B. mit Firefox genutzt werden

X11-Forwarding
ssh -XY evil.server
Nun können in der Sitzung grafische Programme gestartet werden. Die Anzeige erfolgt auf dem lokalen PC

Config-Files
Alle Argumente und weitere Optionen können global oder pro Ziel in den Konfigurationen hinterlegt werden. Die Benutzerkonfiguration ist unter ~/.ssh/config zu finden, die Systemweite üblicherweise unter /etc/ssh/ssh_config

Escape-Sequenz
In einer SSH-Sitzung kann man üblicherweise mit der Tilde-Taste (~) ein internes Menü aufrufen. Die Wichtigsten Befehle:
~? Hilfe anzeigen
~. SSH-Verbindung beenden (auch wenn Gegenseite nicht mehr reagiert)
~# Liste der Verbindungen (incl. Tunnel) anzeigen
~C Interne Konsole aufrufen – hier kann man nachträglich Tunnel (-L, -R, -D) aufbauen

Weitere Ideen:
– ssh-agent: Kennwörter für SSH-Keys mussen nur alle X Minuten eingegeben werden
– autossh: SSH-Verbindung bei Abbrüchen neu Aufbauen
– SSH mit Pipes: Pipes lassen sich über SSH auch an entfernte Rechner senden
2-Faktor-Anmeldung, z.B. mit Google Authenticator
Host-Keys in DNS hinterlegen

LUG-MYK

BitBastelei #144 – Samsung Galaxy S3: Root & Cyanogenmod

BitBastelei #144 - Samsung Galaxy S3: Root & Cyanogenmod

(45 MB) 00:15:16

2015-04-12 10:00 🛈

Samsung Galaxy S3 unter Linux rooten und mit Cyanogenmod ausstatten

USB-Debugging aktivieren: http://www.giga.de/extra/android-spezials/specials/was-ist-usb-debugging-und-wie-laesst-es-sich-aktivieren/
EFS sichern: http://www.handy-faq.de/forum/samsung_galaxy_s3_forum/228151-samsung_galaxy_s3_efs_backup_imei_sichern.html

[Linux] Der Zufall und warum Cryptofunktionen manchmal ewig dauern

Wer schon einmal auf einem Embedded-System wie Router oder einer VM versucht hat einen geheimen Schlüssel unter Linux zu erzeugen wird das kennen: Es dauert ewig. Schuld daran ist nicht nur die meist spartanische Leistung des Prozessors, sondern auch die Art, mit welcher Linux seine Zufallsdaten erzeugt.

Wie Zufällig darf es denn sein?

Holen wir mal etwas aus: Viele Verschlüsselungen benötigen – beispielsweise zur Erstellung von Schlüsseln – Zufallswerte. Leider ist ein PC mit seinen An-Aus recht vorhersagbar und das genaue Gegenteil von Zufall. Um trotzdem verschlüsseln zu können kommen Pseudozufallsgeneratoren zum Einsatz. Diese verwenden meist schlecht vorhersagbare Quellen um eine hohe Qualität der Zufallszahlen zu erreichen – also eine Zahl, deren Herleitung man möglichst später nicht mehr nachvollziehen kann. Quelle kann Beispielsweise das Rauschen eines Gerätes, vergleichbar mit einem zu laut eingestellten Eingangs einer Soundkarte, sein.

Von vollen und von leeren Pools

Unter Linux kümmert sich der Kernel selbst um die Sammlung dieses Zufalls, diesen verwaltet er im Entropiepool. Üblicherweise werden maximal 4096 Bit vorgehalten, den aktuellen Füllstand kann man unter /proc/sys/kernel/random/entropy_avail einsehen. Um Zufallszahlen zu erhalten gibt es nun zwei Geräte mit den selben Aufgaben, aber wichtigen Unterschieden:

/dev/random stellt die Daten aus dem Pool zur Verfügung und dabei sicher, dass die Daten eine gewisse Qualität haben. Das bedeutet allerdings auch, dass – wenn die 4096bit aufgebraucht sind – das Lesen so lange pausiert wird, bis neue Zufallswerte vorliegen. Das ist Ideal für Verschlüsselungen und andere kritische Bereiche in denen sensible Daten behandelt werden sollen. Gleichzeitig heißt es auch, dass Systeme mit geringer Nutzung entsprechend lange zum Lesen benötigen. Häufig wird empfohlen für Fesplatten- oder Netzlast zu sorgen oder Maus und Tastatur intensiv zu nutzen um zusätzlichen Zufall zu generieren, ob dies tatsächlich auch für den Linux RNG hilft oder nur einen Placeboeffekt darstellt ist mir nicht bekannt.

/dev/urandom stellt die selben Daten bereit, blockiert allerdings nicht. Hierbei macht man sich eine Eigenheit eines Zufalls zu Nutze: Die Zufallswerte sind nicht wie ein Treibstoff, der durch Nutzung verbrannt wird, sondern eher das geschriebene Wort eines Füllers. Ist die Quelle des Zufalls langsam erschöpft, also die Tinte fast leer, sieht das Geschriebene nicht mehr schön aus, ist aber immer noch deutlich besser als Nichts. Je länger man jedoch mit leerer Patrone schreibt, desto schlechter wird das Ergenis. Aber zurück: Ist der Pool also leer werden die übrigen Daten nochmal in die Mangel genommen und neu gemischt um zumindest irgendwas zu haben. Ganz nach dem Motto: Egal wie, es kommt etwas raus. Die Qualität der herauspurzelnden Werte ist – wie oben schon angerissen – nicht garantiert, vor allem bei leerem Pool und wenig Aktivität steigt die Gefahr, dass die Werte nachvollziehbar werden. Für wichtige Crypto sollte man urandom entsprechend nicht benutzen, reicht aber „etwas Zufall“ aus – beispielsweise um Werte für ein Spiel oder das testen einer Festplatte zu erhalten – ist man hier richtig und kann viel Zeit sparen. Auch kann es als „letzter Ausweg“ genutzt werden, wenn Zeit wichtiger ist als Sicherheit – oder soll der Kunde des Onlineshops mehrere Minuten beim Laden warten, weil grade der Pool leer ist?

Programmdiktatur

Während man als Programmierer die Wahl zwischen den Qualitäten hat ist man als Nutzer meist den Entscheidungen des Programmierers ausgeliefert. Dies macht auch meist Sinn, beispielsweise wenn das Cryptoprotokoll auf dem blockierenden /dev/random beharrt. Arbeitet man jedoch beispielsweise auf einem Testsystem und muss hunderte Schlüssel erzeugen, die ohnehin nur unwichtige Testdaten verarbeiten, wäre ein umschalten auf /dev/urandom hilfreich. Sicher, man könnte den Symlink verbiegen, aber wirklich schön ist das nicht.

Mittelweg Füllhilfen

Eine Lösung kann ein zusätzlicher Zufallsgenerator sein, welcher als weitere Quelle die Füllung des Entropiepools beschleunigen kann. Eine Möglichkeit ist es – wenn vorhanden – die Hardware zu bemühen. Viele aktuelle Rechner haben einen Zusallsgenerator eingebaut, beispielsweise unterstützen Intel-CPUs mit DRNG entsprechende funktionen oder auch das vielfach verbaute TPM-Modul kann hierzu verwendet werden. Nutzer von QEmu können mit virtio_rng auch virtuelle Rechner versorgen. Nutzbar machen lässt sich dies über den rngd, welcher als Dienst gestartet die Vermittlung übernimmt und meist in einem Paket namens rng-tools o.Ä. zu finden ist. Die Gefahr, dass die Hardwareimplementierung eine Lücke hat besteht natürlich immer, denn diese Quellen sind meist fest verdrahtet und Lücken im Algorithmus können nicht „weggepatched“ werden. Auch liegen die Details der Implementierung häufig nicht offen, sodass die Qualität der Zahlen nicht prüfbar ist. Um hier zumindest ein grundsätzliches Fallnetz zu ziehen wird rngd in der Standardeinstellung nur anteilmäßig zur Generierung der Zahlen genutzt.

Steht keine Hardware zur Verfügung, beispielsweise in vielen VM-Umgebungen, ist es auch in Software möglich. Der bekannteste Vertreter ist hierbei haveged. Hierbei wird sich zu nutze gemacht, dass der Prozessor intern einige Operationen durchführt, welche nicht vorhersagbar erscheinen. Der Vorteil: Diese Quelle ist auf jedem Rechner verfügbar – vom normalen PC bis hin zum kleinsten Router. Problem: Nicht jeder Prozessor ist „gleich zufällig“, ob die Qualität also hoch ist lässt sich nur schwer bestimmen.

Pest oder Cholera?

Welchen Weg man wählt, dass muss man für sich selbst entscheiden. Lange Wartezeiten ergeben zwar meist eine höhere Sicherheit, aber in der heutigen Zeit zählen all zu oft andere Werte. Viele Nutzer sind nicht bereit ihen Komfort für Sicherheit zu opfern. Ein Hardware-RNG kann – wenn vorhanden und man der Quelle genug vertraut – eine große Hilfe sein. Auch Software ist als Ausweg eine Option. Am Ende lässt sich Zufall jedoch nie testen, die Qualität der einzelnene Lösungen ist also nur schwer zu bewerten. Am Ende ist es meist eine gute Idee mehrere Quellen zu nutzen und so den Zufall des Zufalls nicht ganz dem Zufall zu überlassen.

Linux: ARP-Cache zurücksetzen

Oops, das war daneben… Durch eine falsche Routerkonfiguration fühlte sich dieser für alle IPs eines Subnetzes zuständig und hat entsprechend brav auf jeden ARP-Requests geantwortet. Ergebnis: Die Systeme im betroffenen Subnet konnten untereinander nicht mehr kommunizieren. Kein Problem: Config rückgängig und schon läuft wieder alles, oder? Nicht ganz, denn die Server fragen nicht jedes mal neu nach der MAC-Adresse. Zum Glück funktionierte der Zugriff von draußen noch – diese läuft ja über den Router, also schnell auf die Shell der Linux-Kisten und den Cache zurücksetzen:

ip neigh flush all

Schon ist wieder Ruhe im Monitoring. Fein.

Mehr Arten den Cahce zu löschen, z.B. nur für bestimmte Netzwerkkarten oder Ziele, finden sich in der Manitu-Wiki.

[Linux/GnuPG] Key-Erstellung nicht möglich: command get_passphrase failed: Operation cancelled

Beim Versuch einen GPG-Key für eine Backupverschlüsselung zu erzeugen bricht GPG an der Stelle, an der nach einem Kennwort gefragt werden müsste, mit folgender Meldung ab:

can't connect to `/home/user/.gnupg/S.gpg-agent': No such file or directory
gpg-agent[4854]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.

Grund dafür ist offenbar die Art, mit welcher die aktuelle Shell gestartet wurde. Ich nutzte su um von root, mit dem ich die nötigen Pakete installiert hatte, in den Benutzerkontext des Backupnutzers zu wechseln. Dies seint allerdings etwas Chaos bei der Umgebungsdefinition zu verursachen und wird von GPG offenbar nicht unterstützt. Mann muss sich mit dem User direkt auf der Konsole oder per SSH anmelden, dann lässt sich der Schlüssel fehlerfrei generieren. (via christian-stankowic.de)

Intel Haswell-ULT Integrated Graphics: Performance vs. Battery unter Linux

Mal wieder geht es um die interne Grafik der Haswell-CPUs: Ich arbeite häufig am Laptop, dieser ist mit i5 und der der internen Grafik ausreichend schnell um auf dem Sofa etwas zu Arbeiten und nebenbei HD-Videos per HDMI auf dem TV darzustellen. Etwas verwundert war ich, als ich vor kurzem Unterwegs war. Ein kleiner Film zwischendurch sollte ja passen, aber selbst 720p-Material auf dem internen Montior war nicht ruckelfrei zu schaffen.

Das Problem scheinen die Stromsparfunktionen zu sein: Startet oder Resumed man das System im Akkubetrieb nimmt die Grafikleistung massiv ab. Auch ein späterer Wechsel auf Netzbetrieb bringt hier keine Änderung. Einzige  Lösung: System ausschalten oder in StBy versetzen, Netzkabel anschließen und starten, schon hat man wieder volle Performance – auch im Akkubetrieb. Sehr ärgerlich, vor allem da man hierzu  nahezu keine Dokumentation im Netz findet. Einige behaupten, es wäre eine Funktion des SpeedStep/EIST-Treibers, dieser wird jedoch eigentlich unterstützt, scheint aber keine Grafikfunktionen zu implementieren.

Da offenbar das Umschalten bisher (3.19.2) nicht sauber funktioniert würde ich  fast empfehlen die Stromsparfunktionen der Grafikkarte fürs erste im BIOS abzuschalten.