• 11Nov

    Eigentlich nicht kompliziert, wenn man weiß, wie es geht 🙂 Also hier als kurzes Kochrezept für Ubuntu:

    1. Erstmal die unbeschränkten Java Cryptography Extension Policy Files herunterladen.
    2. jce_policy.zip nach /usr/lib/jvm/java-6-sun/jre/lib/security entpacken, vorhandene Files ersetzen. Das muss auch nach jedem JRE-Update erneut gemacht werden!
    3. Neuen Keystore mit einem privaten Schlüssel erzeugen, Keystore-Passwort merken:
      keytool -genkey -alias tomcat -keysize 2048 -keyalg RSA \
              -keystore /usr/share/tomcat6/.keystore

      Wichtig: Der Alias muss „tomcat“ lauten, damit Tomcat das Zertifkat auch findet! Und: Bei der ersten Frage nach Vor- und Nachnamen muss der Servername in der Form www.example.com eingetragen werden!

    4. Certificate Signing Request (CSR) erzeugen:
      keytool -certreq -alias tomcat -file tomcat.csr -keyalg RSA \
              -keystore /usr/share/tomcat6/.keystore
    5. CSR-Datei bei der CA des Vertrauens einreichen, Zertifikat in Form einer CRT-Datei zurückerhalten. Ich nehme eigentlich immer www.rapidssl.com – zum Glück merkt man noch nicht, dass sie von Symantec aufgekauft wurden 😉
    6. Zertifikat importieren:
      keytool -import -alias tomcat -file tomcat.crt -trustcacerts \
              -keystore /usr/share/tomcat6/.keystore
    7. Überprüfen, ob alles richtig drin ist:
      keytool -list -v \
              -keystore /usr/share/tomcat6/.keystore
    8. In der Tomcat-Konfiguration den Eintrag für den SSL-Connector aktivieren und das gewählte Keystore-Passwort als weiteres Attribut einfügen:
      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       clientAuth="false" sslProtocol="TLS" keystorePass="mypassword" />

    Nachtrag: Ein automatischer Redirect von HTTP zu HTTPS funktioniert mit Bordmitteln, jedoch etwas anders als vielleicht erwartet:

    • In die web.xml muss ein Eintrag innerhalb von <web-app> eingefügt werden, z.B. nach der Sektion <servlet-mapping>:
      <security-constraint>
          <web-resource-collection>
              <web-resource-name>Entire Application</web-resource-name>
              <url-pattern>/*</url-pattern>
          </web-resource-collection>
          <user-data-constraint>
              <transport-guarantee>CONFIDENTIAL</transport-guarantee>
          </user-data-constraint>
      </security-constraint> 
      
    • Der Redirect wird dann an den Port gemacht, der in der server.xml im HTTP-Connector als „redirectPort“ angegeben ist. Steht dort „8443“, wird der Browser an „http://www.example.com:8443“ weitergeleitet, was natürlich unschön aussieht. Hier hilft eine Firwall-Regel auf dem Server, die 443 an 8443 weiterleitet. Dann muss natürlich der Wert in der server.xml auch auf 443 geändert werden.
    iwev4EKB

    Permalink

    Tags: , , , , ,

  • 12Mai

    Es gibt hunderte Kurzanleitungen zu diesem Thema – ich nutze immer http://www.redips.net/mysql/add-new-slave/ 🙂

    Permalink

    Tags: ,

  • 11Okt

    Es gibt schon HOWTOs wie Sand am Meer zu diesem Thema. Damit ich nicht immer wieder suchen muss, schreibe hier nochmal alles in Kurzform auf 🙂

    Sinn und Zweck der Aktion ist es, mit einem Samba-Server einer Windows-Domain beizutreten. Die Benutzer können dann ohne erneute Anmeldung für sie freigegebene Verzeichnisse nutzen und sich auch per SSH anmelden.

    Umgebung: Ubuntu Hardy und eine Windows Server 2003-Domain namens „NAME.LOCAL“ mit einem Domain Controller „server.name.local“ an der Adresse 192.168.0.1.

    1. Benötigte Pakete
      • samba
      • winbind
      • krb5-user
      • libpam-krb5
      • krb5-config
      • libkadm55
    2. Wichtige Einstellungen der /etc/samba/smb.conf
      workgroup = NAME
      realm = NAME.LOCAL
      wins server = 192.168.0.1
      password server = 192.168.0.1
      client use spnego = yes
      client ntlmv2 auth = yes
      security = ADS
      encrypt passwords = true
      idmap backend = rid:NAME.LOCAL=70000-1000000
      idmap uid = 70000-1000000
      idmap gid = 70000-1000000
      template shell = /bin/bash
      template homedir = /home/%D/%U
      winbind use default domain = yes
      winbind enum groups = yes
      winbind enum users = yes
    3. Eine Beispiel-Freigabe mit Berechtigung für eine Windows-Gruppe
      [webroot]
      comment = Verzeichnis des Webservers
      path = /var/www
      browseable = yes
      read only = no
      create mask = 0664
      directory mask = 0775
      valid users = @NAME\Webentwickler
    4. /etc/nsswitch.conf
      passwd:   compat winbind
      group:    compat winbind
    5. /etc/pam.d/common-password
      password   requisite  pam_unix.so nullok obscure md5
      password   optional   pam_smbpass.so nullok use_authtok
                            use_first_pass missingok
    6. /etc/pam.d/common-account
      account sufficient      pam_winbind.so
      account required        pam_unix.so
    7. /etc/pam.d/common-session
      session required pam_unix.so
      session required pam_mkhomedir.so umask=0022 skel=/etc/skel
      session optional pam_foreground.so
    8. /etc/pam.d/common-auth
      auth required   pam_group.so use_first_pass
      auth sufficient pam_winbind.so
      auth sufficient pam_unix.so nullok_secure use_first_pass
      auth required   pam_deny.so
    9. /etc/pam.d/sudo
      #%PAM-1.0
      auth sufficient pam_winbind.so
      auth sufficient pam_unix.so use_first_pass
      auth required   pam_deny.so
      @include common-account
    10. /etc/krb5.conf
      [libdefaults]
        default_realm = NAME.LOCAL
        NAME.LOCAL = {
          kdc = server.name.local
          admin_server = server.name.local
        }
      
      [domain_realm]
        .name.local = NAME.LOCAL

    Ob die Kerberos-Verbindung zum Windows-Server klappt, kann dann mit dem Kommando „kinit Administrator@NAME.LOCAL“ und einem nachfolgenden „klist“ überprüft werden.

    Nach dem Neustart der Samba- und Winbind-Dienste muss der Server dann noch in die Domain eingefügt werden. Das geht über das Kommando „net rpc join -S server -U Administrator“. Ob die Windows-Benutzerdatenbank richtig angezapft wird, lässt sich mit „wbinfo -u“ und „wbinfo -g“ überprüfen.

    Nachtrag:

    • Das Dateisystem, das die Freigaben beinhaltet, muss mit acl- und user_xattr-Unterstützung eingebunden sein, damit NT-Dateiberechtigungen auch richtig abgebildet werden können. Also in der /etc/fstab „defaults,acl,user_xattr“ in die vor-vorletzte Spalte
    • Eine Freigabendefinition sieht mit ACL-Unterstützung so aus, ob das optimal ist muss sich noch zeigen:
      [share]
      path = /srv/share
      browseable = yes
      read only = no
      valid users = @NAME\domänen-benutzer
      admin users = @NAME\domänen-admins
      nt acl support = yes
      acl group control = yes
      inherit permissions = yes
      map acl inherit = yes

    Permalink

    Tags: , , , ,

  • 07Apr

    ispCP: Verwaltungsoberfläche für virtuelles Hosting mit aktiver Community
    RoundCube: sehr schicker Webmailer

    Problemstellung: Ein Mailuser soll sein Passwort im Webmail ändern können.

    Schwierigkeiten:

    • Es gibt noch kein richtiges Plugin-System für RoundCube, da es noch lange nicht so etabliert wie z.B. SquirrelMail ist
    • ispCP hat seit dem RC7 symmetrisch verschlüsselte Passwörter in der Datenbank gespeichert
    • Als IMAP/POP3-Daemon kommt Courier zum Einsatz, der die Passwörter aber nicht aus der Datenbank holt, sondern für den der ispCP-Daemon eine Datei exportiert. Diese Datei muss also bei einer Passwortänderung ebenfalls aktualisiert werden

    Es gibt zwei Lösungsansätze, die ich erfolgreich kombinieren konnte:

    • Ein Patch für RoundCube zum Ändern von MySQL-basierten Passwörtern. Er bildet das Grundgerüst und musste nur geringfügig um die ispCP-Spezialitäten erweitert werden.
    • Eine Anleitung, um eine etwas simplere Passwortänderungsmethode in RoundCube einzubauen. Mir gefällt aber der Lösungsansatz mit der neuen Registerkarte, wie im obigen Patch gemacht, deutlich besser.

    Der Trick besteht lediglich darin, die passenden Dateien aus dem ispCP include-Verzeichnis zu importieren, um die Funktionen encrypt_db_password() (Verschlüsselt ein Passwort mit dem für die Installation gültigen Key) und send_request() (benachrichtigt den ispCP-Daemon, damit er die Datei für Courier aktualisiert) ausführen zu können.

    Der interessierte Leser kann alles in dem kompletten Patch nachlesen.

    Permalink

    Tags: , ,

  • 11Nov

    Natürlich nicht im direkten Sinne. Aber sie schicken immer mehr ältere Server in den verfrühten Ruhestand und helfen so beim Stromsparen. So geschehen am letzten Wochenende mit einem Webserver, der in immer kürzeren Abständen ausfiel. Dank fernschaltbarer Steckdose (mehr dazu demnächst) konnte er kurzfristig wieder zum Leben erweckt werden, aber als ich bei einem Ausfall gerade in der Nähe war und dann doch mal hingefahren bin, habe ich einen Blick ins Gehäuse geworfen. Es grüßten mich die üblichen Elkos mit „Hut hoch“…

    Defekte Elkos

    Defekte Elkos

    Zeitlich war das ganze etwas unpassend, aber was soll man machen. Eine gute Chance, die alte Mühle (Celeron 2,4 GHz, 512 MB RAM, aber immerhin 80er-Platten in HotSwap-Rahmen an einem 3ware PATA) zu virtualisieren. Der benachbarte XEN-Host hat noch genügend Luft 🙂

    Die Hoffnung, dass das Board das Kopieren der Daten übers Netzwerk noch durchhält, hat sich natürlich schnell zerschlagen. Also schnell die Platten in eine andere Maschine mit diesen Rahmen gesteckt (die leider somit zum Opfer wurde, sorry nochmal!) und wieder von CD gebootet. Folgendes Kommando hat dann gute Dienste geleistet:

    tar cf - . | ssh xenhost "(cd /mnt/temp && tar xvf - )"

    Natürlich war damit noch nicht alles getan. Als Linux kommt hier Ubuntu 8.04 Server zum Einsatz, es fehlte noch der passende XEN-Kernel. Beim Installieren (über einen anderen Server, schließlich lief dieser ja noch nicht!) wurde ich schon stutzig, als die Version 2.6.24-16-xen angezeigt wurde. Das wird doch nicht etwa immernoch…? DOCH! Noch immer gibt es keine Version des XEN-enabled Kernels in 8.04, die nicht mit dem Netzwerk-Bug daherkommt! Schlafen die eigentlich alle?

    Nur gut, dass ich diese Sache aus den Anfängen von 8.04 schon kannte. Schnell wieder den japanischen Patch gerausgesucht -> funktioniert. Danke!

    Permalink

    Tags: , , , ,

  • 01Nov

    Anforderung: Eine XEN-VM, die bisher als SSH-Login-Server benutzt wird, soll auch ein PPTP-VPN bereitstellen. Natürlich mit MPPE-128-Verschlüsselung, wozu will man auch sonst ein VPN haben.

    Idee: pptpd installieren, Konfiguration, Port 1723 und Protokoll GRE weiterleiten, fertig.

    Tja, denkste. Gentoo hat als modernsten Kernel mit XEN-Unterstützung die 2.6.18-xen-r12 im Angebot. Und was fehlt dort? Das Modul ppp_mppe bzw. die config-Option CONFIG_PPP_MPPE!

    Nächste Idee: ppp hat ein USE-Flag namens mppe_mppc, vielleicht bringt das ja etwas. Ein paar Kompilate später ist auch dieser Weg zu Ende. Das ist wohl ein alter Patch, der rein gar nichts bringt.

    Und nun? Vielleicht einen aktuellen Stanndardkernel von Gentoo nehmen und hoffen, dass er als XEN-DomU läuft? Pustekuchen, keine XEN-Unterstützung weit und breit. Immerhin hätte es hier ppp_mppe gegeben!

    Letztendlich habe ich einen Kernel aus Ubuntu 8.04 genommen (2.6.24-19-xen) und nutze diesen nun zum Booten der Gentoo-VM. Das funktionierte aber auch erst, nachdem in /sbin/rc ein paar Zeilen auskommentiert waren, die /proc und /sys einbinden wollen. Das erledigt nämlich der Ubuntu-Kernel schon vorher, also kam es zum Abbruch. Den Tipp habe ich hier gefunden.

    Fazit: Läuft, ist aber nicht schön. Aber es muss ja auch nicht immer alles schön sein. Man denke da nur an das unschöne 0:3 des großen beim kleinen HSV, das zeitgleich stattfand…

    Permalink

    Tags: , , , ,