Der Blog auf tn.genano.de

Der Blog rund um Linux Unix und vieles Andere

Durchsuche Beiträge, die von tw geschrieben wurden

Backup

Hin und wieder kann so ein Backup ja nichts schaden, genauso ist es auch bei Datenbanken. Hier kurz beschrieben wie man einen Dump einer Mysql macht. Diesen kann man natürlich nicht nur als Backup verwenden, sondern auch zum umziehen etc. Zu beachten ist das dies ein Stand ist, und das dumpen ggf. recht viel performance zieht.

mysqldump -A --add-drop-databases --add-drop-tables -u root -p > backup.sql

Dumped die Datenbank. Nach absetzen des Befehls wird man nach dem root-pw gefragt. Istman bei einem Hoster muss man ggf. anstatt des nutzers root einen bestimmten Benutzernamen verwenden.

Restore

Das restore ist auch recht simple, auch wieder nur eine Zeile:

mysql -u root -p < backup.sql 

Ich Arbeite recht viel mit der Kombination aus Tomcat und Apache. Dazu benötigt man das das modajp (Ich weiß man kanns auch mit mod proxy machen). Hier mal ein paar Infos die ich mit der Zeit gelernt hab.

Basiskonfiguration

Theoretisch funktioniert der Kram recht easy, und zwar indem man mod_proxy und mod_proxy_balancer einschaltet und folgendes in die httpd.conf einträgt:

ProxyRequests Off

Das verhindert erstmal, das wir offener Proxy spielen, ganz, ganz, ganz, ganz … wichtig. Und nun brauchen wir noch den AJP Connect:

ProxyPass / ajp://127.0.0.1:8009/

Und fertig sind wir, wir haben jetzt einen AJP Connector auf das Loopbackinterface und Port 8009 konfiguriert. Dazu muss natürlich, in der server.xml des Tomcats, folgendes eingetragen sein:

<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />

Genau, ein AJP Connector.

Also funktioniert das ganze jetzt schon mal. Meiner Erfahrung nach, läuft es aber so einfach, gerade in Hochlastzeiten nicht zufriedenstellend. Deswegen ….

A bisl Tuning

Wir haben eben den ajp connector im Apache gemacht, diesem kann man wenn man mag noch ein paar hilfreiche Optionen mit auf den Weg geben. Getestet mit ein paar Milliarden zugriffen bisher ist folgendes:

ProxyPass / ajp://127.0.0.1:8009/ smax=5 max=20 ttl=10 retry=0 disablereuse=On

Das macht meiner Erfahrung nach die ganze Nummer erheblich stabiler.

Den Connector des Tomcats kann man dazu natürlich auch noch ein bischen anpassen, siehe dazu die Optionen des HTTP Connectors.

Manchmal möchte man, speziell zu TÜV Terminen ;-), alles auf gut pimpen. Dazu gehört auch das man die “TRACE” Methode beim Apache abstellt. Das ganze ist wirklich mörder einfach:

TraceEnable off

in die httpd.conf geballert und gut ist.

Wie gewöhne ich dem Apache ab zuviel Informationen über sich Preis zu geben? Einfach

ServerTokens Prod

in die httpd.conf einfügen.

Wie sehe ich nun ob das was gebracht hat? Einfach ein fehlendes Dokument aufrufen. Wenn das sowas erscheint:

Not Found

The requested URL /dkwjhdwe was not found on this server.
Apache/2.2.2 (Fedora) Server at www.xxx.de Port 80

dann sieht man zuviel, nochmal checken bitte. Wenn das ganze allerdings so aussieht:

Error 404
tn.genano.de
Wed Jun 27 17:05:58 2007
Apache

Dann passt das.

Wie mache ich einen redirect in einem html file? Hier gibt es ein kurzes Code Snippet wie man das ganze in html macht. Als Beispiel habe ich hier den redirect genommen der euch von http://tn.genano.de/index.html auf http://tn.genano.de/wiki/ umleitet.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<meta http-equiv=refresh content="0; URL=http://tn.genano.de/wiki/">
</head>

Ich hatte letztens das Problem, das ich die Software meiner Kamera (EOS 400D) auf meinem MacBook installieren wollte. Leider musst ich feststellen, das man diese Software bei Canon nicht direkt runterladen kann, sondern nur ein Update. Dies ließ sich augenscheinlich leider nicht installieren, da die Basissoftware fehlte. Nach ein bischen googeln und Basteln habe ich folgenden Weg für mich entdeckt die Software zu installieren:

  • Saugt euch das Updatepaket von der Canonseite
  • Mounted das dmg (doppelklickt) und zieht das UpdateInstaller Paket auf den Desktop
  • Öffnet ein Terminal und wechselt nach ~/Desktop/UpdateInstaller.app/Contents/Resources/
  • Macht ein less update.plist und sucht nach <key>Signature</key> und schaut euch in diesem Tag die <string> Werte an. Hier steht z.B.: CEUX oder CEU2
  • Wenn Ihr das gefunden habt, nehmt eine eine App die Ihr sonst nicht brauch, oder installiert euch einfach schnell irgendeine die Ihr danach Kicken könnt. Ich hab mir für den Zweck ein Spiel namens Bullfrog gekrallt, aber ich denke es geht jede Applikation.
  • Wechselt nach /Applications/Bullfrog.all/Contents (wobei Bullfrog.app durch die App eurer Wahl ersetzt werden sollte) und Editiert die Datei Info.plist.
  • Such nun nach <key>CFBundleSignature</key> und tragt den Wert aus der update.plist darunter im <string> tag ein. Z.B.: <string>CEUX</string>.
  • Speichert die Datei und startet UpdateInstaller. Und siehe da, schon geht das alles brav. Wenn in dem Updater mehrere Komponenten enthalten sind, könnt Ihr diese nach einander Installieren indem Ihr die Signatures austtauscht.

PHP Info

1 Kommentar

Oft gebraucht und gerne vergessen. Wenn man ein php info braucht, einfach folgendes machen:

<?php
phpinfo();
?>

Privaten Schlüssel generieren:

Zuerst brauchen wir einen privaten Schlüssel, den generieren wir mit openssl:

openssl genrsa -des3 -out server.key 1024

Hier steht die 1024 für die stärke (Bitanzahl) des Schlüssels, je größer der Wert, desto sicherer. Allerdings auf je größer der Wert, desto mehr rechenaufwand ist nötig. Gute werte sind zwischen 1024 und 4096 bit.

Wir erhalten folgende Ausgabe:

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
……………………………………………………++++++
…….++++++
e is 65537 (0×10001)
Enter pass phrase for server.key:
Verifying – Enter pass phrase for server.key:

Die Passphrase die Ihr hier eingebt müsst Ihr euch merken, da wir diese benötigen um die Passphrase hinterher zu entfernen und das Zertifikat zu erstellen. Wollt Ihr das Zertifikat nicht für einen Webserver verwenden oder Ihr habt wirklich starke Sicherheitsansprüche, kann es sinnvoll sein, das Passwort zu belassen. Ihr müsst die Passphrase dann allerdings bei jedem Start des Apaches eingeben.

CSR (Certificate Signing Request) generieren

Jetzt müssen wir den CSR generieren. Auch hier benötigen wir wieder openssl.

openssl req -new -key server.key -out server.csr

Wenn wir den Befehl abgesetzt haben erhalten wir folgende Ausgabe:

Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:DE
State or Province Name (full name) [Berkshire]:Bavaria
Locality Name (eg, city) [Newbury]:Nuernberg
Organization Name (eg, company) [My Company Ltd]:Meine Firma
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server’s hostname) []:tn.genano.de
Email Address []:nicht.an.schreiben@genano.de

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Hier tragen wir die Daten ein und kommen schon zum nächsten Schritt, dem entfernen der Passphrase.

Passphrase vom Schlüssel entfernen

Um nicht jedes mal ein Passwort eingeben zu müssen wenn wir den Apache starten, entfernen wir die Passphrase vom Schlüssel. Ich möchte allerdings darauf hinweisen, das dieses Vorgehen, sicherheitstechnisch nicht korrekt ist! Aber für die meisten Zwecke ausreicht.

cp server.key server.key.org

Wir kopieren als erstes mal den Schlüssel und anschließend entfernen wir die Passphrase

openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key

Dieses eine mal müssen wir das PW noch eingeben, dann aber haben wir mit dem server.key einen passwortloen Schlüssel für unseren Webserver. Jetzt brauchen wir nur noch das Zertifikat.

Zertifikat erstellen

Um ein Zertifikat mit einer Gültigkeit von 365 Tagen zu erstellen machen wir jetzt folgendes:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Wir erhalten folgende Ausgabe:

Signature ok
subject=/C=DE/ST=Bavaria/L=Nuernberg/O=Meine Firma/OU=IT/CN=tn.genano.de/emailAddress=nicht.an.schreiben@genano.de
Getting Private key

Und tada nun haben wir alles zusammen was wir brauchen.

Im Apache

Jetzt müssen wir den Kram noch in den Apachen eintragen, hier ein mini Beispiel:

Listen 443

<VirtualHost *:443>
DocumentRoot “/var/www/html/”
ServerName tn.genano.de
ServerAdmin webmaster@genano.de
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/ServerCerts/server.crt
SSLCertificateKeyFile /etc/ssl/ServerCerts/server.key
<Files ~ “\.(cgi|shtml|phtml|php3?)$”>
SSLOptions +StdEnvVars
</Files>
<Directory “/srv/www/cgi-bin”>
SSLOptions +StdEnvVars
</Directory>
<Directory “/var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SetEnvIf User-Agent “.*MSIE.*” \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /var/log/httpd/ssl_request_log   ssl_combined
</VirtualHost>

Mein kleines root script

Dieses Script nutze ich als fauler Mensch um root auf einem anderen Rechner zu werden.

#!/bin/sh

#FG=white
#BG=black
XTS=/usr/X11R6/bin/xtermset
MYNAME=$(basename $0)

TARGET=$1
test -z $TARGET && TARGET=localhost
test -x $XTS && $XTS -n "$MYNAME auf $TARGET" -T "$MYNAME auf $TARGET"
ssh -A -X -l $MYNAME $TARGET
test -x $XTS && $XTS -n "$USER auf $HOSTNAME" -T "$USER auf $HOSTNAME"

Dazu benötigt man xtermset. Dieses gibt es bei SuSE als mit dabei, bei anderen Distributionen muss man es ggf. selbst bauen. Bei meinem Fedora musst ich ;-)

Ein kleiner CGI Passwortgenerator

Benötigt das PWGEN Paket deiner Distribution.

Ein kleiner CGI Passwortgenerator mit der Bash: (ACHTUNG! UNSICHER! NIEMALS SO AUF EINEM ÖFFENTLICHEN WEBSERVER BETREIBEN! Wer es doch mach, viel Glück :-D)

#!/bin/bash -x
echo Content-Type: text/html
echo ""
 
if [ -z $QUERY_STRING ]
then
/bin/cat << EOM1
<HTML>
<HEAD><TITLE>Kleiner Passwort Generator</TITLE>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
<FORM action="http://mein-webserver.de/cgi-bin/pwgen.cgi" method="get">
<P> L&auml;nge des Passworts (3-99):  <INPUT name="len" type="text" size="2" max
length="2"> </P>
<FORM>
<form action="http://mein-webserver.de/cgi-bin/pwgen.cgi" method="get">
  <p>Mit oder ohne Sonderzeichen: <p>
    <input type="radio" name="secure" value="1"> ohne Sonderzeichen und alles kl
ein <br>
    <input type="radio" name="secure" value="2" checked> ohne Sonderzeichen groß
 und klein und Zahlen <br>
    <input type="radio" name="secure" value="3"> mit Sonderzeichen <br>
    <input type="radio" name="secure" value="4"> mit Sonderzeichen groß und klei
n <br>
    <input type="radio" name="secure" value="5"> mit Sonderzeichen groß und klei
n und Zahlen <br>
  </p>
        <input type="submit" value=" Absenden ">
        <input type="reset" value=" Abbrechen">
</form>
</BODY>
</HTML>
EOM1

echo "Und hier wie gewohnt:"
echo "<pre>"
pwgen -c -n -C
echo "</pre>"
 
else
 
/bin/cat << EOM2
  <HTML>
  <HEAD><TITLE>Kleiner Passwort Generator</TITLE>
  </HEAD>
  <BODY bgcolor="#ffffff" text="#000000">
EOM2

 
len=`echo $QUERY_STRING | awk -F"=" '{print $2}' | awk -F"&" '{print $1}'`
sonder=`echo $QUERY_STRING | awk -F"=" '{print $3}'`
if [ $len -gt 99 ]
then echo "Arrrgggll"
exit 1
fi
if [ $len -lt 3 ]
then echo "<img src=http://mein-webserver.de/dump.jpg alt=\"You are dumped\">"
exit 1
fi
 
case $sonder in
        1)
                echo "Das Passwort: <br>"
                echo "<pre>"
                pwgen -C $len
                echo "</pre>"
        ;;
        2)      
                echo "Das Passwort: <br>"
                echo "<pre>"
                pwgen  -c -n -C $len
                echo "</pre>"
        ;;
        3)      
                echo "Das Passwort: <br>"
                echo "<pre>"
                pwgen  -y -C $len
                echo "</pre>"
        ;;
        4)
                echo "Das Passwort: <br>"
                echo "<pre>"
                pwgen -c -y -C $len
                echo "</pre>"
        ;;
        5)
                echo "Das Passwort: <br>"
                echo "<pre>"
                pwgen -c -n -y -C $len
                echo "</pre>"
        ;;
        *)
                echo "<img src=http://mein-webserver.de/dump.jpg alt=\"You are dumped\">
"

        ;;
esac
/bin/cat << EOM3
  </BODY>
  </HTML>
EOM3

fi

Switch to our mobile site