Archiv ‘Linux’

Mittwoch, 31. August 2016

Server mit vergessenen SSH-Schlüsseln ausfindig machen

Vor einigen Tagen habe ich das Schlüsselmanagement für meine SSH-Zugänge völlig umgekrempelt.

Da ich auf Nummer sicher gehen wollte, dass ich den alten Private Key nicht auf bei mir in Vergessenheit geratenen Systemen übersehen hatte, analysierte ich in den Folgetagen die Log-Datei /var/log/auth.log auf meinem zentralen Linux-Server.

Sucht man mittels cat | grep nach „Failed“, erhält man Einträge in der folgenden Form:

...
Aug 25 22:37:09 ALPHA sshd[8539]: Failed publickey for %user% from 85.X.X.X
...

Dies ist aber nur der Beginn der Nachforschung — als nächstes muss man stark hirnen, auf welchem Server das betreffende Script laufen könnte — schliesslich gibt ssh nur eine öffentliche IP-Adresse aus (der verursachende Server steht hinter einem NAT-Router und besitzt eine private IP).

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 31. August 2016

MIBs unter Debian installieren

Da es sich dabei um teilweise Copyright-geschützte Werke handelt, stehen sie über die normalen Debian-Repositories nicht zur Verfügung. Nachfolgend ist erklärt, wie man diese trotzdem installiert.

/etc/apt/sources

Hier fügt man die non-free-Pakete hinzu:

...
deb 		http://debian.ethz.ch/debian/ testing main non-free
...
deb		http://debian.ethz.ch/debian/ stable main non-free
...

Danach aktualisiert man das Paketverzeichnis:

# apt-get update

Jetzt findet Debian das Paket snmp-mibs-downloader:

# apt-get install snmp-mibs-downloader

Sobald das Paket installiert ist, muss man das Bash-Script ausführen, welches unter /usr/bin/download-mibs liegt:

# download-mibs

Die (von mir nicht berührten) Konfigurationsdateien des Tools liegen unter /etc/snmp-mibs-downloader.

Das Script lädt allerlei MIBs herunter, deponiert diese zeitweile in /tmp und kopiert sie dann in das Verzeichnis /var/lib/mibs.

Interessanterweise finden sich gemäss einer E-Mail-Konversation auch unter /usr/share/snmp/mibs/ weitere MIBs. Ich denke aber, dass snmpwalk diese ignoriert.

/etc/snmp/snmp.conf

Damit snmpwalk diese MIBs nun auch wirklich interpretiert, muss noch die Konfigurationsdatei angepasst, das heisst konkret die Zeile mibs : auskommentiert werden:

# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loading them by commenting out the following line.
#mibs :

Quelle: SNMP Clients — Command line client applications

Um zu sehen, ob man richtig liegt, führt man am Besten den folgenden Testbefehl aus (vorausgesetzt, auf dem Server lauscht auch ein snmpd):

$ snmpwalk -c s1kr1t -v 1 localhost hrStorageTable
HOST-RESOURCES-MIB::hrStorageIndex.1 = INTEGER: 1
...

Auf einem System, welche diese MIBs nicht installiert hat, erhält man stattdessen folgende Fehlermeldung:

$ $ snmpwalk -c s1kr1t -v 1 localhost hrStorageTable
hrStorageTable: Unknown Object Identifier (Sub-id not found: (top) -> hrStorageTable)

Probiert man es mit der OID, klappt es — logischerweise:

$ snmpwalk -c s1kr1t -v 1 localhost .1.3.6.1.2.1.25.2.3
iso.3.6.1.2.1.25.2.3.1.1.1 = INTEGER: 1
...

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 31. August 2016

Mit chmod gleichzeitig unterschiedliche Berechtigungsbits von Dateien und Verzeichnissen setzen

Wer kennt es nicht? Hantiert man rekursiv mit chmod herum, steht man immer vor dem Problem, dass man Verzeichnisse unterschiedlich von Dateien behandeln muss. Verlieren nämlich Verzeichnisse das Execution-Bit (--x), kann man nicht mehr in diese cden …

Fortgeschrittene Linuxer verwenden in solchen Fällen wahrscheinlich einen Zweizeiler in der Form …

$ find /unclean-directory -type d -exec chmod 700 '{}' ';'
$ find /unclean-directory -type f -exec chmod 600 '{}' ';'

Doch die wahren Profis wissen (wie ich seit gestern), dass das noch viel, viel einfacher funktioniert:

$ chmod -R u=rwX,go= /unclean-directory

Das grosse X sagt chmod, dass es das Executable-Bit nur bei Verzeichnissen setzen soll (und bei Dateien, die dieses bereits gesetzt haben). u=rwX bedeutet, dass der Owner der Datei Lese-, Schreib und (variable) Exekutionsrechte erhält. go= sagt aus, dass die Gruppe sowie die Anderen (others) keine Berechtigung erhalten. Ausgedeutscht also 700 für Verzeichnisse und 600 für Dateien.

Quellen: The use of the uppercase X in chmod und How can I change all of the contents inside of directory to what the default file ownership and permissions are?

Tags: , , , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 31. August 2016

Nach einem Update rkhunter aktualisieren

Seit einiger Zeit habe ich rkhunter auf meinen Linux-Servern am Laufen. Das Tool soll helfen, irgendwie auf das System gelangte Rootkits aufzuspüren und mich — im Schadensfall — darüber zu informieren.

Wenn ich zuweilen an Konfigurationsdateien selber Hand anlege, kann es vorkommen, dass rkhunter danach Warnungen ausspuckt:

Warning: User 'globi' has been added to the passwd file.
Warning: Group 'globi' has been added to the group file.

Dies behebt man mit folgenden Befehlen:

# rkhunter --update
[ Rootkit Hunter version 1.4.0 ]

Checking rkhunter data files...
  Checking file mirrors.dat                                  [ No update ]
  Checking file programs_bad.dat                             [ No update ]
  Checking file backdoorports.dat                            [ No update ]
  Checking file suspscan.dat                                 [ No update ]
  Checking file i18n/cn                                      [ No update ]
  Checking file i18n/de                                      [ No update ]
  Checking file i18n/en                                      [ No update ]
  Checking file i18n/tr                                      [ No update ]
  Checking file i18n/tr.utf8                                 [ No update ]
  Checking file i18n/zh                                      [ No update ]
  Checking file i18n/zh.utf8                                 [ No update ]
# rkhunter --propupd
File updated: searched for 177 files, found 150

Quelle: How To Use RKHunter to Guard Against Rootkits on an Ubuntu VPS

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2016

Dem Raspberry Pi 3 chinesische Schriftzeichen beibringen

Seit einigen Woche betreibe ich mein heimisches Dashboard auf einem Raspberry Pi 3 und bin von der Performance begeistert! Sogar Chrome kriegt man nun als Installationspaket mitgeliefert.

Leider zeigte Chrome nach der Standardinstallation chinesische Schriftzeichen (bei den Währungsinfos) nicht an. Folgende Pakete rüsten chinesische Schriftzeichen nach:

# apt-get install fonts-arphic-bkai00mp fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp

Quelle: Chinese Debian Mini Howto — 2. Installing Chinese Fonts

Tags: , , , , , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2016

PHP-Fehlermeldungen ausser E_DEPRECATED loggen

Unter Apache (.htaccess oder VirtualHost-Konfiguration) stellt man dies folgendermassen ein:

...
php_value error_reporting 24575
...

Den ersten Hinweis lieferte How to disable deprecated messages in Joomla?. Doch die dort angegebene Konstante (22527) ist überholt, weil PHP 7 neue Fehlerkonstanten mitbringt, welche noch hinzuaddiert werden müssen.

Hierfür habe ich mich der Liste unter Error Handling — Predefined Constants bedient, und

32767 - 8192 = 24575

berechnet.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2016

Auf dem Laptop einen Web-Server aktivieren, um Dateien auf ein iPad und iPhone herunterzuladen

Update 2021: Unter Python 3 lässt sich der Server folgendermassen starten:

$ python3 -m http.server

Quelle: What is the Python 3 equivalent of “python -m SimpleHTTPServer”

In den Ferien stand ich vor dem Problem, eine ca. 50 MB grosse Datei (Teneriffa-Reiseführer von Lonely Planet) von meinem Laptop auf mein iPad und mein iPhone zu kopieren.

Ein Versand per E-Mail war aus zwei Gründen ausgeschlossen: Mein Mail-Server akzeptiert solch grosse Dateien gar nicht erst, und ausserdem verfügte unser AirBnB nur über ein popeliges ADSL-Modem mit Geschwindigkeiten um die Jahrhundertwende. Das Modem hätte mich dementsprechend zuerst mit einem extrem langen Upload zum Mail-Server und anschliessend mit einem extrem langen Download vom Mail-Server genervt. Zu guter Letzt unterstützt mein MacBook auch kein AirDrop, um Dateien per Bluetooth oder WLAN zwischen iOS und OS X-Geräten auszutauschen.

Was nun? Das standardmässige unter OS X installierte Python eilt einem zur Hilfe: Man öffnet das Terminal, navigiert zum Verzeichnis, in welcher sich die gewünschte Datei befindet, und gibt dann folgenden Befehl ein:

$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

Nachdem man mittels ifconfig oder dem Network-Modul unter System Preferences die IP-Adresse des Laptops ausfindig gemacht hat, surft man auf den iOS-Geräten die folgende URL mit Safari an:

http://10.1.2.3:8000/

Ein Klick auf den Dokumentenlink, und innert weniger Sekunden wird das grosse PDF angezeigt und kann in iBooks gespeichert werden.

Python meldet auf der Kommandozeile dabei Folgendes:

10.25.9.220 - - [04/Jul/2016 10:14:18] "GET / HTTP/1.1" 200 -
10.25.9.220 - - [04/Jul/2016 10:14:20] "GET /canary-islands-6-whole-book.pdf HTTP/1.1" 200 -
10.25.9.208 - - [04/Jul/2016 10:15:12] "GET / HTTP/1.1" 200 -
10.25.9.208 - - [04/Jul/2016 10:15:18] "GET /canary-islands-6-whole-book.pdf HTTP/1.1" 200 -
10.25.9.235 - - [04/Jul/2016 10:15:57] "GET / HTTP/1.1" 200 -
10.25.9.235 - - [04/Jul/2016 10:16:03] "GET /canary-islands-6-whole-book.pdf HTTP/1.1" 200 -

Tags: , , , , , ,
Labels: Apple, Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 27. August 2016

SNMPd schreibt standardmässig kein PID-Datei mehr

Ein kürzlich erfolgtes Update des SNMPd-Pakets auf meinem Debian-Server hatte zur Folge, dass meine monit-Installation den Service fälschlicherweise als offline meldete.

Dies, weil monit nach der PID-Datei des SNMP-Daemons Ausschau hält, um dessen Prozess-ID auszulesen und auf Existenz zu prüfen. Bei Debian liegt diese Datei unter /var/run/snmpd.pid.

Folgendermassen re-aktivierte ich die PID-Datei:

/etc/systemd/system/multi-user.target.wants/snmpd.service

Vor der Anpassung …

...
ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux,mteTrigger,mteTriggerConf -f
...

… und nach der Anpassung:

...
ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux,mteTrigger,mteTriggerConf -f -p /var/run/snmpd.pid
...

Anschliessend folgte noch ein Neustart des Daemons:

# systemctl stop snmpd
Warning: snmpd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
# systemctl daemon-reload
# systemctl stop snmpd
# systemctl start snmpd

Und prompt meldete mir monit, dass der Service wieder online sei.

Tags: , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 16. Mai 2016

Wo befinden sich unter Debian die systemd Service-Dateien?

Unzählige dieser Service-Files finden sich in diesem Ordner:

/lib/systemd/system

Quelle: Making your package work with systemd sowie Getting Started With systemd on Debian Jessie

Das Service-File für MySQL habe ich hingegen hier gefunden:

/etc/systemd/system/mysql.service

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Montag, 16. Mai 2016

MariaDB (MySQL) meldet „ERROR 1436 (HY000) at line 574: Thread stack overrun“

Damit die Migration von MySQL nach MariaDB sauber abläuft, ist es wichtig, nach der De-Installation von MySQL und der erfolgreichen Installation von MariaDB folgendes Kommando auszuführen (Anstoss war eine Fehlermeldung in mysql.log):

# mysql_upgrade
...
ERROR 1436 (HY000) at line 574: Thread stack overrun:  5904 bytes used of a 131072 byte stack, and 0 bytes needed.  Use 'mysqld --thread_stack=#' to specify a bigger stack.

Blöd nur, wenn diese Fehlermeldung erscheint. Nach einer kurzen Google-Suche stellte sich heraus, dass mein Konfigurationstuning in /etc/mysql/my.cnf einen Kollateralschaden verursacht hatte. In der Konfigurationsdatei hatte ich nämlich eingestellt:

...
[mysqld]
...
thread_stack		= 128K

Dieser Wert berechnet sich für jedes System basierend auf dessen Eigenschaften und es macht deshalb keinen Sinn, den Wert in my.cnf hartzukodieren, wie der Artikel MySQL error 1436: Thread stack overrun, with simple query aufzeigt.

Das Problem löste sich in Luft auf, indem ich den Eintrag auskommentierte …

#thread_stack		= 128K

… und den Datenbankserver neu startete:

# systemctl restart mysql

Tags: , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen