Archive for the ‘Webhosting’ Category

lenny und suphp

Friday, September 25th, 2009

Nachdem ich heute ne Weile darueber gegruebelt habe, wie ich unter Debian Lenny und suphp sowohl meine vhosts unter /var/www zum laufen bekomme, als auch das phpmyadmin, welches apt nach /usr/share installiert wurde zum laufen zu bekommen kam ich auf folgende Konfigurationsanpassung.
Diese ist noetig, da suPHP aus Sicherheitsgruenden die Ausfuehrung von php Dateien die z.B. root gehoeren und/oder ausserhalb /var/www liegen, Verweigert.

Debian bereitet die /etc/apache2/mods-available/suphp.conf schon richtig vor, im Verzeichniss /usr/share ist suphp also abgeschaltet. Nun hilft es leider nicht, einfach mod_php hinzu zuladen.
Vorher muss man die config des su_php leicht umschreiben nach folgendem Muster:

in der Datei /etc/suphp/suphp.conf die Zeile:

application/x-httpd-php=php:/usr/bin/php-cgi

in:

application/x-httpd-suphp=php:/usr/bin/php-cgi

aendern. Also ein “su” in den apptype hinzufuegen.
Ebenso in der Datei /etc/apache2/mods-available/suphp.conf:

AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
suPHP_AddHandler application/x-httpd-php

in:

AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml
suPHP_AddHandler application/x-httpd-suphp

aendern. Hier also 2 Zeilen zu aendern.

Nun kommen sich die beiden php Arten nicht mehr in die Quere und man kann mit a2enmod php5 modphp wieder zuschalten, sofern man dies noch nicht getan hat.

Mit dieser Aenderung sollte jedes Zentral per apt installiertes script funktionieren, solange nicht vergessen wird, fuer den vhost oder alias die suphp engine abzuschalten, solange es sich nicht in /usr/share befindet.
Warum Debian dies nicht gleich so macht, ist mir allerdings ein Raetsel.

Uebrigens: ich hatte waehrend meiner Tests nen wunderbaren Bug im Firefox gefunden. Bot dieser einmal bei einem alias wie /phpmyadmin/ die index.php zum download an, weil noch kein handler installiert war, cached diese diese Information. Man kann am Server nun konfigurieren was man will…

viva las vegas!

Monday, February 2nd, 2009

Es ist mal wieder soweit, der Parallels Summit steht mal wieder an und ich kam Gestern in Vegas an:

Bin noch voellig verdattert, in einer Stadt mitten in der Wueste zu sein und vor lauter Neonlicht keinen einzigen Stern am Himmel sehen zu koennen. Trotz tiefster Nacht :( Dafuer hat mich die liegende Mondsichel fasziniert.
Hier drin werd ich dann die naechsten Tage vor mich hin lungern:

Nu fahr ich mal noch Downtown und dann geht das Eroeffnungs-Socializing auch schon los.

pixie dust

Saturday, January 17th, 2009

Schoen, dass Murphy doch so zuverlaessig ist.
Die Tage spielte ich ein wenig mit PXE Boot rum. Ich dachte mir, so ein notboot linux kann nicht schaden, zudem ich zunehmend Rechner ohne CDROM bekomme…

Doku findet sich wie Sand am Meer. Zum testen entschied ich mich der Einfachheit halber fuer dnsmasq und einen TFTP Server fuer OSX. Ersteres sollte mein Fallstrick werden.
Die dnsmasq.conf benoetigt nur ein paar Zeilen:

dhcp-range=192.168.42.200,192.168.42.220,12h
dhcp-host=XX:XX:XX:XX:XX:XX,eeebox,192.168.42.219,infinite
dhcp-option=3,192.168.42.1

Hier fehlt eigentlich nur noch die boot-file anweisung fuers PXE. In einer Doku stand folgendes Beispiel:

dhcp-boot=/pxelinux.0,pos,192.168.1.11

Beim Bootversuch warf meine eee Box allerdings folgenden fehler:

PXE-T02 access violation
PXE-E3c tftp error access violation.

Es brachte mich zur Weisglut, denn die Fehlermeldung ist total Missfuehrend. Ich suchte am TFTPServer und fand nichts, wenn ich tftpget verwendete, bekam ich das bootfile. Nach vielen Versuchen und Vergleichen mit anderen Anleitungen fiel mir dann der / vor dem filename auf…
Eine fuer meine beduerfnisse richtige Version waere dann:

dhcp-boot=pxelinux.0,hermes,192.168.42.42

Nun klappts auch mit dem PXE-Boot via dnsmasq. Weiterfuehrende Doku:

Syslinux (fuers pxelinux.0)
Erklaerung der PXE config files und Demos
GRML ueber PXE booten ohne NFS (sehr elegant, wie ich finde)
Die Debian PXE Doku (und hier ist sogar der Eintrag fuers dnsmasq richtig ;) )

updates in der nacht…

Sunday, November 9th, 2008

sind selten gut bedacht…

So traf es mich diese Nacht. Eigentlich wollte ich nur schnell 3 Maschinen mit Virtuozzo updates versehen, denn alleine das rebooten der Maschinen ist schon Horror – mit einer guten Stunde muss man schon rechnen. Doch dann kam alles ganz anders, nach dem reboot sah ich nur ein

Container 1 started: : Container 1 start failed [FAILED]

und das ganze nochmal fuer alle anderen VPSe.
Nach Versuchen, die VPS von Hand zu starten, erntete ich das:

Running vzquota on failed for Container 1 [3]

Also quota von Hand ausfuehren. “vzctl –verbose start 1″ gibt einem hier die entsprechende commandline. Und sieh an, quota meckert ueber ein “busy filesystem” – nur kann das nicht sein, denn ich habe ja gerade frisch gebootet. ->

vzquota : (error) Quota on syscall for id 1: Device or resource busy

Auch ein strace half nicht wirklich weiter.
Minuten des Horrors spaeter kam mir dann die Erleuchtung. Koennte es ein Problem mit den libraries sein? glibc moeglicherweise?
Ein “yum update” brachte mein CentOS wieder auf ne aktuellere glib welches das Problem mit den quotas dann behob. Tolle show, so etwas will man in der Nacht. Programmierer, lasst euch bessere Fehlermeldungen einfallen, bzw besseres errorhandling!!

2terabyte grenzen und spass mit selbigen

Tuesday, December 4th, 2007

Heutzutage denkt man ja, es gaebe keine erreichbaren Grenzen mehr in Sachen Filesystem u.ae. Tja, ich wurde die Tage wieder auf den Boden der Tatsachen zurueckgeholt. Es fing damit an, dass unsere neuen Server endlich kamen. Aus 6 500Gb Platten sollte ein Array gebaut werden. Soweit, so gut. Beim einrichten fragte mich der Raidcontroller hin und wieder nach 2TB Support aber ich ging beim ersten Versuch doch recht schmerzlos ran und machte ein 2.5TB grosses Raid5.
Die CentOS4.5 Installation lief ohne groessere Probleme durch, nachdem ich das Konzept mit den Driverdisks (im grub mit “linux text dd” booten) verstanden habe und einfach das dd.iso von einem USB Stick laden konnte. Auch partitionieren klappte bestens mit dem Diskwizard. Doch dann kam der erste Bootvorgang. Schwarzes Bild, blinkender Cursor. Thats it.
Nach rumfragen und surfen stellte ich dann fest, dass Grub noch keine 2TB grossen Platten(!), also nicht Partionen, unterstuetzt.
Ok, also zweiter Versuch. Ich legte diesmal 2 RaidVolumes an. eine 50Gb fuers System und den Rest, also 2450Gb fuer Virtuzzo. Auch diesmal klappte die Installation erstmal bestens, der Diskwizard liess mich die Partitionen einrichten und formatieren. Auch das booten klappte jetzt.
Doch dann eine Meldung, dass System /vz, die grosse Partition bzw auf der fuers System zweiten Platte waer kaputt. Ich habe das mal uebergangen und /vz aus der fstab genommen, damit ich endlich mal sehen kann, ob der Rechner sauber laeuft.
Spaeter hab ich dann einfach /vz neu formatiert und mit Speedtests angefangen. Hier war ich doch ueberrascht, was moderne Rechner so hinbekommen. Was mit allerdings nicht direkt auffiel war, dass /vz nur 250Gb gross war… Und hier fing der Spass an. Nach etwas Recherche war schnell klar: Linux Kernel ab 2.6 haben die 2Tb begrenzung nicht. Dafuer aber viele der alten Tools drumrum, wie z.B. Grub oder fdisk. Zu allem ueberfluss koennen die derzeitigen Bootloader nur von einem “msdos disk label” booten. Dieses kann aber auch nur max. 2Tb grosse Platten. Schoene Scheisse.
Doch es gibt natuerlich eine Loesung.
Zunaechst muss man sich von fdisk verabschieden, da dieser nur msdos disk labels bzw partition tables kann.
Parted ist hier gefragt. Doch eine Warnung beim rumexperimentieren: Parted schreibt direkt auf Platte, also nicht erst nach dem bei fdisk bekanntem “w”!!
Der obige Schritt 2 RaidVolumes anzulegen war schonmal notwendig, da wie schon bemerkt, Grub nur von msdos labels booten kann, nicht von GPT (GUID Partition Table, nutzt z.b. auch Apple bei IntelMacs)
Also muessen wir nun die zweite RaidVolume zu GPT umbauen, bei mir ist das /dev/sdb. Unmounten nicht vergessen!

Mit
parted /dev/sdb print
bekommen wir raus, wie es um die disk geometry bestellt ist:

Disk geometry for /dev/sdb: 0.000-2336501.250 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 239348.502 primary ext3 boot
Information: Don't forget to update /etc/fstab, if necessary.

Wie hier zu sehen, Disk label type ist noch msdos. Wir merken uns aber schonmal start und endgroesse der “Platte”.
Nun muessen wir (Achtung, Datenverlust ab hier) mit

parted /dev/sdb mklabel gpt

den label type umstellen und mit

parted /dev/sdb mkpart primary 0 2336501

die Partition wieder anlegen. Die Start und Endwerte uebernehmen wir aus der parted /dev/sdb print Ausgabe. Mit selbigem Befehl kann man auch ueberpruefen, ob alles korrekt gelaufen ist. Ab hier kann man wieder wie gewoehnlich ein filesystem anlegen, in meinem Fall mit mkfs.ext3 -m0 /dev/sdb1 -L/vz

Das -m0 verhindert die gewoehnliche 5% root Reservierung, die hier Platzverschwendung waere. Mit -L schreibe ich ein filesystemlabel mit, welches die z.B. CentOS fstab so moechte. Noch eine Warnung: aeltere fdisks luegen auch jetzte noch mit der disk geometry, neuere verweisen sinnvollerweise direkt auf parted. Also auf keinen Fall mehr benutzen.

Viel Spass mit dem >2TB Volume ;)

plesk 8.2.1 auf nem frischen debian

Thursday, November 1st, 2007

Man sollte ja meinen, Serververaltungstools wie Plesk lassen sich am besten auf nem ganz frischen Linux installieren… Das dachte ich bis eben auch. Leider sieht SW-Soft das ganze wohl etwas anders.
Normalerweise ist die Installation auch auf einem Debian System denkbar einfach, Autoinstaller starten, aus ueber 40 Modulen das auswaehlen, was man auch moechte und Plesk haengt sich mit ins Debian APT. Dadurch ists moeglich z.B. eigene Pakete wie ein spezieller Spamassassin oder eine eigene Version von Qmail. Nicht schoen fuer Hardcode Admins, aber es funktioniert in der Regel und es gibt Updates.
Los geht es also, ist ja nicht das erste mal. Bestimmt die Haelfte der verfuegbaren Module werden abgewaehlt und munter auf weiter gedrueckt. Doch was muss ich erleben? Direkt im naechsten Schritt bailt der Installer mit einer (apt) Fehlermeldung:

Exchanging information with licensing server.
Checking whether the package dependencies are resolved.
E: Broken packages
ERROR: Unable to install packages because of package dependency problems.
Not all packages were installed.
Please, contact product technical support.

Dieses Phaenomen hab ich nun auf 2 grundverschiedenen Debian Etch Installationen. Einmal nahezu leer und einmal schon mit nen paar Paketen installiert.
Ein Blick in die /tmp/autoinstaller3.log zeigt die komplette APT Fehlermeldung. Beim zweiten Server liegt es lediglich am fehlenden bind9 Paket.
apt-get install bind9” _vor_ der Plesk Installation behebt also dieses Problem. Kann der Autoinstaller das nicht selbst??

Wie dem auch sei, der zweite Server weigert sich immernoch. Das Log sagt was seltsames:

The following packages have unmet dependencies:
psa: Depends: psa-php4-configurator (>= 1.3.0) but it is not going to be installed or
psa-php5-configurator (>= 1.3.0) but it is not going to be installed
psa-updates: Depends: psa-php4-configurator (>= 1.3.0) but it is not going to be installed or
psa-php5-configurator (>= 1.3.0) but it is not going to be installed

Das heisst also, Plesk Pakete koennen selbst keine Abhaengigkeiten loesen? Tolle Show. Also weiter im Text, ich habe PHP5 auf dem Rechner. Will heissen, ich versuche rauszufinden, welche dependencies das “psa-php5-configurator” Paket hat. Garnicht so einfach, das gibt es naemlich nicht!
“psa-php4-configurator” hingegen will ein paar PHP4 Pakete. Nach einem “apt-get install php4-common php4-domxml php4-gd php4-mysql php4-imap php4-cli php4-curl libapache2-mod-php4” kann der Autoinstaller “psa-php4-configurator” auch installieren.
Die Installation laeuft nun also durch.

Schoen, dass ich nun PHP4 Leichen im System habe fuer ein Pleskmodul, welches vermutlich nichtmal mehr gebraucht wird.
Grosse bitte an SW-Soft: Wenn ihr meine Supportanfrage schon ignoriert, und ich bin nicht der Einzige, dann raeumt wenigstens fuer 8.2.2 die .debs auf… Danke.

UPDATE:
mit folgendem Eintrag in der /etc/apt/sources.list kann man den psa-php5-configurator nachinstalliern:
deb http://autoinstall.plesk.com/debian/PSA8 etch all
dann ein:
apt-get update && apt-get install psa-php5-configurator

erfolg der nacht

Friday, August 31st, 2007

Gibt es eigentlich eine Steigerung des SuperGAUs? Folgende Situation:
Ich fange um 2 Uhr Nachts an eine Virtual Machine wieder vom Backup einzuspielen. Da unser RZ uns mit GBitlinks innerhalb unserer Server etwas an der kurzen Leine haelt, dauert alleine das Rueckspielen der tars auf die Zielmaschine etwas laenger, da Host und Backupmaschinen getrennte Kisten sind. Das Datenaufkommen besprach ich hier ja schonmal.
Murphy sei dank, geht der erste Versuch natuerlich schief. Aber gegen 5 faengt die Zielmaschine endlich an, die (incrementellen) tars auszupacken. Schoen.
Gegen 9 stelle ich mit Freuden fest, dass das restore gerade beim dritten inc. tar angelangt ist. Jetzt kommt der Hammer.
In Ungedanken markiere ich einen Pfad im Putty des Backupservers und druecke “Apfel C” – Ups denk ich, Putty hat ja ne eigene Clipboard Geschichte. Doch halt, warum zur Hoelle sehe ich wieder meinen prompt?

Es kommt mir siedent heiss…. Der neue Windows Terminal Server Client fuern Mac “uebersetzt” Apfel C fuer die Gewohnheitstiere zu CTRL C……… 8 Stunden Arbeit fuer die Katz und die Kunden springen im Dreieck. Heissa, letzte Nacht hatte ich 2h Schlaf. Diese Nacht garkeinen. Prima Tag ;)

Achja: Danke Microsoft!

debian und uw-imapd

Thursday, May 31st, 2007

Ich bin ja ein verfechter von SSL Diensten. Leider kann man nicht immer NUR SSL Anbieten. Gerade wenn gewoehnliche Kunden betroffen sind. In meinem heutigen Fall ging es um den UW-IMAPD der netterweise von Debian mitgeliefert wird. Schaltet man nach der Installation per inetd “imap2″ an (was eh schon ein schlechter Witz ist, gemeint ist hiermiet imap4 v2…), kann man sich nicht anmelden.
im auth.log erscheint folgendes:

May 31 13:33:45 server imapd[xxxx]: Login disabled user=xxxxx auth=xxxx host=xxxxx [x.x.x.x.x]

Ein telnet auf port 143 verraet folgendes (Raus kommt man hier uebrigens mit “q logout”):

* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS STARTTLS LOGINDISABLED] server IMAP4rev1 2003.339 at Thu, 31 May 2007 13:41:14 +0200 (CEST)

Ohne SSL also kein login. Ok, warum fragen wir uns? Ganz klar! weil eine Datei “/etc/c-client.cf” fehlt mir folgendem Inhalt:

I accept the risk
set disable-plaintext nil

Kein Scheiss, das muss wirklich da rein. Dann klappts auch mit unverschluesseltem plaintext login am Imapd.
Telnet auf 143 sollte nun folgendes sagen:
* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS STARTTLS AUTH=LOGIN] server IMAP4rev1 2003.339 at Thu, 31 May 2007 13:42:51 +0200 (CEST)

Wie kommt man da drauf? Minutenlanges googlen… Selbst in /usr/share/doc/uw-imapd/README.Debian steht nichts diesbezgl.

laufzeit von perl scripten begrenzen

Tuesday, May 29th, 2007

Wie im vorherigen Post schon erwaehnt nehmen die “gehackten” Webspaces langsam ueberhand. Das groesste Problem hier ist, dass es wenig Loesungen gibt, Perlscipte in ihrer Laufzeit zu begrenzen. Was PHP schon ewig macht, ist sucgi immernoch Fremd.
Traumhaft waere es natuerlich, wenn alle Kunden immer schoen sichere CMS und/oder Forenscripte nehmen und auch immer artig updaten wuerden… A man can dream….

Dem ist leider nicht so, also setze ich da mal ausserhalb vom Apachen an. Wie waere es, einfach per cron alle x Minuten durch die Prozessliste zu gehen und zu schauen ob ein userscript laenger als x minuten laeuft? Nichts einfacheres als das. Soviel zur Theorie. Nach so einigem gecode kam ich dann zu diesem ersten script:


#!/bin/bash
# script zum ueberwachen von zu lange laufenden scripten
# killt alle scipte (ausser whitelist) nach $maxruntime minuten
#
hostname=$(hostname)
maxruntime=1
minuserid=10000
if [ "$1" != "" ] ; then debug=1 ; fi

for i in $(find /proc -maxdepth 1 -uid +$minuserid -type d -cmin +$maxruntime)
do
cmdline=$(cat $i/cmdline)
proftptest=$(fgrep proftpd $i/cmdline)
if [ "$proftptest" = "" ] ; then
uid=$(stat -c%U $i)
if [ "$debug" = "1" ] ; then
echo $cmdline von user $uid laeuft laenger als $maxruntime minute"(n)"
else
echo | mutt root -s "$cmdline von user $uid laeuft auf $h
ostname laenger als $maxruntime minute(n)"
fi
else
if [ "$debug" = "1" ] ; then
echo $proftptest laeuft
fi
fi
done

Klar, im ersten Versuch killt es noch nichts, sondern mailt erstmal die Verstoesse. Nach den ersten paar Minuten im cron fiel mir allerdings auf, dass viele Kunden cgi upload scripte haben und dergleichen. Hier muss ich also die “whitelist” noch ein wenig aufbohren, nach einem proftpd alleine zu checken reicht wohl nicht ;)
Das endgueltige script werde ich wohl im Downloadbereich posten.

spass als supporter nr.2

Tuesday, May 29th, 2007

In letzter Zeit haeufen sich bei uns die gehackten Webspaces. Jeden Tag “erwische” ich so 2-3 von ihnen.
Wenn man diese Kunden dann drauf hinweisst, dass Ihr Webspace nicht mehr das macht, was er soll, kommt es mitunter zu lustigen Antworten. Besonders, wenn man Sie zum wiederholten mal drauf hinweist. Diese gefiel mir heute am besten:

nein… das kann nicht sein… wir haben jetzt alle Passwörter Geändert… haben uns mit unserer Sicherheits-Abteilung Einen 2.ten Cleanen FTP-Upload PC gerichtet… um solche Dinge nicht nochmal zu erleben. Bitte schauen Sie sich das an.!!!

schoene “Sicherheits-Abteilung” ;)