Entries filed under Linux

MySQL Server absichern

Posted on 7. März 2012 Comments

Was bei einem Webhoster der Admin automatisch übernimmt, muss man bei einer Installation z.B. auf dem eigenen Homeserver selbst machen. Ich gehe hier von einem über Paketquellen installierten MySQL Server der Version 5.0.57 auf einem Apache der Version 2.2.10 unter SuSE Linux Enterprise Server(SLES) aus. Wer einigermaßen englisch spricht dem ist auch Kapitel 2.18.2. Securing the Initial MySQL Accounts der offiziellen MySQL Dokumentation empfohlen. Bevor man startet natürlich den MySQL Server starten.

Als allererstes sollte man Passwörter setzen, dazu loggt man sich ein:

mysql -u root

Dann bekommt man so eine shell:

 mysql>

Der Befehl um sich die Benutzer anzugucken ist:

SELECT User,Host,Password FROM mysql.user

Der beliebte SELECT * Befehl ist hier nicht zu empfehlen, da mysql.user wie man schön an

describe mysql.user;

merkt, 37 Spalten hat und somit auf den meisten Bildschirm die Konsole sprengt;-)
Hier sollte jetzt eigentlich nur der root-Benutzer(der alles kann) auftauchen und evtl. einige anonyme Accounts. Die bekommt man mit folgendem Befehl gelöscht:

DELETE FROM mysql.user WHERE User='' AND Password=''

Sollte man einen User hinzugefügt haben kann(Empfohlen! Nie den root User für Anwendungen nehmen), man mit folgendem Befehl die Rechte feststellen.

SHOW GRANTS FOR 'user'@'localhost'

Alternativ gehen die folgenden Befehle:

SELECT User,Select_priv,Insert_priv,Update_priv,Delete_priv FROM mysql.user;

Die entsprechenden Rechte aus DDL, DCL und DML kann man dem oben genannten describe Befehl entnehmen. Der User hatte bei mir standardmässig Rechte um von jedem Host aus zu verbinden. Dies wird durch den Wildcard % vermerkt, der sich bei in der Host Spalte vom User befindet. Möchte man die üblichen Web-Applikationen auf dem Server laufen lassen, z.B. CMS wie WordPress für Blogs oder Drupal für Websites, braucht man keine Verbindung von außerhalb sondern nur von localhost(dort liegen die PHP-Dateien von denen die Abfragen kommen, der User kann auf dem ganzen Internet zugreifen, bzw. das ist Sache des Apaches)

DELETE FROM mysql.user WHERE Host='%';

Jetzt kann es sein, dass der User oder auch root nur für einige Hosts ein Passwort hat. Deswegen sollte man für alle Hosts den folgenden Befehl ausführen:

 SET PASSWORD FOR 'root'@'HOST' = PASSWORD('newpwd');

Wenn man Initialisierungsanleitungen gefolgt ist hat man eventuell eine Datebank namens test. Dies lässt sich ganz einfach feststellen:

SHOW DATABASES;

Mit diesem drop-Befehl löscht man diese unnötige Datenbank:

DROP DATABASE test;

Daneben gibts es noch die eben benutze mysql und die information_schema Datenbank, die man nicht löschen sollte.

Ein weiterer Tweak ist, den Benutzernamen von root zu ändern, um automatisierten brute-force Attacken auf das root Passwort aus dem Weg zu gehen:

UPDATE mysql.user SET User='myNameForRoot' WHERE User='root';

Zum Reload der ganzen Berechtigungen, z.B. nach Anlegen eines neuen Users muss man mit folgendem Befehl die Rechte neu einlesen

FLUSH PRIVILEGES;

Ausserdem gibt es noch die Möglichkeit mysqld in einer chroot Umgebung laufen zu lassen, dazu vielleicht später mehr.
Quellen

  • www.pantz.org/software/mysql/mysqlcommands.html
  • http://dev.mysql.com/doc/refman/5.1/de/delete.html
  • http://dev.mysql.com/doc/refman/4.1/en/adding-users.html
  • http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html

ext4 Volume mit SliTaz 3.0(stable) mounten

Posted on 29. Februar 2012 Comments

Entweder von pkgs.slitaz.org die Pakete runterladen oder mit tazpkg über die Repositories das Paket linux-ext4 installieren. Dann sollte entweder sofort oder nach modprobe ext4 der mount Befehl funktionieren:

mount -t ext4 /dev/sda1 /mnt/harddisk

Wenn man das permanent haben möchte(z.B. Festplatteninstallation oder eigene Live-CD), natürlich wie gehabt ext4 in /etc/rcS.conf einfügen, bei mir z.B.:

[...]
LOAD_MODULES = "e1000 ext4"
[...]

Credits to mojo at vanilla.slitaz.org

Weitere Schluesselworte fuer Thunderbird Anhang-Erinnerung unter Linux

Posted on 23. Februar 2012 Comments

Wenn man bei Thunderbird in einer neuen E-Mail z.B. das Schlüsselwort Anhang erwähnt, es aber keinen Anhang gibt bekommt man beim Abschicken eine Warnung, ob man nicht vergessen hat die Dateien anzufügen. Neulich habe ich eine formelle E-Mail geschrieben, in der ich schrieb „anbei finden Sie Datei xyz“. Leider ist anbei keines dieser Schlüsselwörter und so habe ich leider den Anhang vergessen. Damit das nicht nochmal passiert habe ich aus dem Konfigurationseditor* mal die Schlüsselwörter rausgesucht. Der Key heisst mail.compose.attachment_reminder_keywords und die Wörter werden mit Kommata getrennt. Unter Windows findet sich das wohl bequemer unter Extras/Einstellungen/Allgemein/Schlüsselwörter, der Konfigurationseditor funktioniert natürlich trotzdem.

* das, was bei Firefox about:config ist findet man bei Thunderbird unter Bearbeiten(Linux) bzw. Extras(Windows)/Einstellungen/Erweitert/Allgemein/Konfiguration bearbeiten

MAC-Adresse per Skript aus ifconfig

Posted on 9. Februar 2012 Comments

Soweit ich weiß, gibt es unter Linux keinen Befehl oder eine Datei in der die MAC-Adresse steht, nur ifconfig. Für die weitere Verwendung ist das natürlich unpraktisch und so habe ich hier eben ein bisschen was mit grep und regular expressions zusammengeskriptet/kopiert:

#!/bin/bash
ifconfig |grep $1 | grep -m 1 -Eo '[[:alnum:]][[:alnum:]](:[[:alnum:]][[:alnum:]]){5}'

Das am besten unter der Datei grepMacAdr speichern, noch schnell mit

chhmod +x  grepMacAdr

ausführtbar machen, dann erfolgt der Aufruf mit

./grepMacAdr eth0

eth0 ist hier das Netzwerkgerät. Wenn das bekannt ist kann auch direkt im Skript $1(=erster Parameter) durch die entsprechende Bezeichnung geändert werden.

Zur Erklärung: ifconfig ruft den Befehl auf, der alle Netzwerkgeräte samt Konfiguration ausgibt, von denen schneidet das Tool grep nur den Abschnitt heraus, der das übergebene Netzwerkgerät behandelt(bzw. die erste Zeile, da steht die MAC-Adresse im allgemeinen) und davon wiederrum wird mit einer Regular Expression(-E) dann nach dem Muster XX:XX:XX:XX:XX gesucht. Falls, was mit dem ersten grep falsch gelaufen ist, wird nur das erste ausgeben(-m 1). Ausgegeben wird dabei nur der Teil, der das Muster einhält, nicht die ganze Zeile(-o)

Ihr findet das Skript auch als fertige Datei hier.

Mit acp_commander root Zugriff auf Buffalo TeraStation Pro

Posted on 9. Februar 2012 Comments

Bei der Arbeit haben wir eine TeraStation Pro II und eine TeraStation Live. Dort kommt man leider nur per Web-Interface drauf, wir brauchten aber root haben also hab ich mich mal umgeguckt. Man kann natürlich die Firmware flashen, aber es geht auch noch einfacher. Mit dem Tool acp_commander und ein paar Linux-Befehlen kann man sich ebenfalls root Zugriff verschaffen.

Bei der TeraStation Live klappte folgendes:

java -jar acp_commander -t IPADRESSE -o

Vorrausgesetzt ist natürlich eine funktioniernde Java Installation. Wenn das unter Windows geschieht, muss das bin-Verzechnis der Java Installation im PATH sein(war bei mir nicht standardmässig der Fall). Für IPADRESSE ist die IP-Adresse des Geräts einzusetzen(wird evtl. auf Display angezeigt).

Wenn man folgende Meldung bekommt, sollte man der TeraStation eine statische IP geben, dem PC ebenfalls und die dann einfach direkt verbinden, denn irgendwas ist in den Router/W-LAN Einstellungen nicht in Ordnung bzw. zu restriktiv:

A SocketTimeoutException usually indicates bad firewall settings.
Check especially for *UDP* port 22936 and make sure that the connection to your LS is working.
ERROR: Exception: SocketTimeoutException (Receive timed out) [ACP Send/Receive (Packet:8020 = ACP_Discover)]

Wenn alles geklappt hat, kann man sich mit root und keinem Passwort über telnet anmelden:

telnet -l root IPADRESSE

oder über putty(telnet auswählen, Standard ist natürlich SSH). Jetzt kann man SSH nach belieben in /etc/sshd_config konfigurieren und dann mit /etc/init.d/ssh restart neustarten.

Die andere Kiste war nicht ganz so einfach zu öffnen, hier braucht man ein paar Linux-Befehle:

Setzen eines neuen root Passworts:

java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "(echo ADMINPASS;echo ADMINPASS)|passwd"

Schaltet die Authentifizierung über PAM via SSH wieder an:

java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS  -c "sed -i 's/UsePAM yes/UsePAM no/g' /etc/sshd_config"

Einstellung in der /etc/sshd_config, dass sich auch root direkt anmelden kann und nicht über su ein User zum root wird(gibt es unter busybox wohl nicht):

java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config"

Zu guter Letzt: SSH Server neu starten

java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "/etc/init.d/sshd.sh restart"

Für ADMINPASS ist jeweils das Administratorpassowort einzusetzen und für IPADRESSE die IP-Adresse(s.o.). Auch hier muss der UDP Port frei sein, also am besten direkt über statische IPs mit nem Kabel von Computer zu TeraStation verbinden.

Man findet sonst auch noch interessante Informationen auf cpradio.org.

Credits to BigDiver und eine andere Quelle, die ich gerade nicht mehr wiederfinde.

dd Statusanzeige

Posted on 12. September 2011 Comments

dd ist das Kommandozeilen Kopiertool von *nix-Betriebssystemen. Im Gegensatz zu den meisten Programmen, hat es aber keine Statusanzeige oder gar einen Statusbalken um den Fortschritt anzuzeigen, so dass man kontrollieren kann, ob sich das Programm nicht vielleicht aufgehängt hat.

Mit diesem Trick kann man aus dd dennoch zu einer Ausgabe zwingen:

  1. dd Kopiervorgang starten, z.B.:
    $ dd if=/dev/sdb of=/dev/sdc
  2. Neue Konsole öffnen
  3. PID vom dd-Prozess herausfinden:
    $ ps -A |grep dd

    Die Ausgabe könnte z.B. so aussehen:

    $ 4905 pts/0   00:00:00 dd
  4. Statusreport-Signal an dd senden(PIDist die Nummer die Schritt 3. ergeben hat, z.B. 4095):
    $ kill -USR1 PID
  5. In der Konsole aus der ddgestartet wurde müsste jetzt eine Ausgabe kommen, z.B.
    75273+0 Datensätze ein
    75273+0 Datensätze aus
    38539264 Bytes (39 MB) kopiert, 27,4718 s, 1,4 MB/s

 

Ausserdem gibt es noch ein grafisches Tool für dd: air-imager

Credits to jma89 and h4shBrpwnz at linuxquestions.org

//update:
Das kleine Programm pipe viewer(pv) tuts auch und man bekommt sogar noch Datenrate und Fortschrittsbalken. Einfach installieren:

$ sudo apt-get install pv

Und dann über den geraden Strich über den eckigen Klammern an den dd Befehl hängen:

$ dd if=/mnt/sdx of=/mnt/sdy | pv

Credits to Peteris Krumin for finding this.

 

//update2:

Manchmal klappt das so nicht, z.B. beim Raspberry Pi (interne SD Karte auf USB Stick(/dev/sda) sichern). Dort muss man das folgendermaßen machen:

sudo dd if=/dev/mmcblk0 | pv | sudo dd of=/dev/sda

Thanks to from urfix.com

DynDNS auf OpenWrt mit updatedd

Posted on 24. Juli 2011 Comments

Nachdem ich mir irgendwie LuCI und Webif² zerschossen habe auf meinem WRT54GL und mein DynDNS nicht mehr funktionierte, musste ich das ja irgendwie über SSH wieder anstellen. Es hat mich einige Zeit gekostet das passende Programm zu finden. Auf einer Website fand ich den Hinweis, dass es sich hierbei um updatedd handelt, einfach mal eingetippt bekam ich die folgende Meldung:

root@router:/usr/bin# updatedd --help

Usage: updatedd [OPTION]... SERVICE -- ...

Please use `updatedd-wrapper' instead of updatedd.

Options:
-L        list installed plugins (services) and exit
-Y        use syslog
--help    print help and exit
--version    print version information and exit

Report bugs to <updatedd@philipp-benner.de>.

Mit updatedd -L bekommt man zu sehen, welcher Service installiert ist.

root@router:/usr/bin# updatedd -L

Services:
dyndns

Die Zugangsdaten für den DynDNS Account liegen in /etc/config/updatedd:

config 'updatedd'
	option 'service' 'dyndns'
	option 'username' 'alice'
	option 'password' 'secret'
	option 'host' 'bob.dyndns.org'
	option 'update' '1'

Denke mal der Aufbau ist selbsterklärend. Wenn man sich ein bisschen umguckt, findet man auch noch die Datei /etc/init.d/updatedd, die man, entgegen des Hinweises von updatedd, updatedd-wrapper zu benutzen, startet, den Service zu updaten:

root@router:/# /etc/init.d/updatedd start
Connecting to checkip.dyndns.org (1.2.3.4:80)
updatedd_ip_check    100% |*******************************|   104  --:--:-- ETA

bzw.

/etc/init.d/updatedd enable

für den Autostart.

Cronjobs von selbst wieder anstellen

Posted on 11. Mai 2011 Comments

Das Problem war ganz einfach, manuell dürfen einige wenige Berechtigte aus guten Gründen Cronjobs abstellen. Damit aber am nächsten Tag der Cronjob wieder läuft braucht man ein (nicht-abstellbaren) Cron Jobs, der alle anderen Cronjobs wieder anstellt. Glücklicherweise gibt es da die Schnittstelle Config::Crontab und so sind dies nur ein paar Zeilen(via CPAN bzw. man Config::Crontab):

#!/usr/bin/perl
use Config::Crontab;
my $ct = new Config::Crontab;
$ct->read; # alle crons auslesen a.k.a. crontab -l
$_->active(1) for $ct->select(-command_re => '/usr/local/bin/command'); # zeile vervielfachen fuer andere befehle
$ct->write; # alle crontabs schreiben, nicht vergessen!

Der gewünschte, nun wieder aktive Befehl ist /usr/local/bin/command.