Montag, 14. März 2016

Intrexx und TinyMCE: HTML einfügen

Einfügen von HTML-Code in ein TinyMCE-Textfeld unter Intrexx

Problem:

In ein Intrexx-Textfeld soll via JavaScript HTML-Code eingefügt werden (konkret der Link auf einen anderen Artikel).

Lösung:

tinyMCE.activeEditor.execCommand('mceInsertRawHTML',false,htmlText);
So weit, so einfach.

Problem 2:

Nun filtert TinyMCE leider den HTML-Code. So wird z.B. aus:
<a id="ID_B9XXXX" class="Link_Standard" onclick="tuWas!" href="#">Hinweise für Benutzer</a>
ein schlichtes:
<a id="ID_B9XXXX" href="#">Hinweise für Benutzer</a>
 Damit funktioniert der Link nicht mehr!

Eine vorläufige Lösung ist folgende Zeile, die die Filterung aufhebt:
tinymce.activeEditor.schema.addValidElements("a[onclick|id|class|href]");
Das funktioniert.
Wenn man allerdings das Textfeld beim nächsten Mal bearbeitet, wird beim Aufruf der HTML-Code des bestehenden Links wieder entfernt!

Lösung 2:

Man erstellt die Datei:
internal/system/vm/custom/custom_TinyMCE.vm
mit dem Inhalt:
extended_valid_elements : "+a[id|class|onclick|href]"
Anschließend setzt man in den Expert-Attributen der jeweiligen Textfelder das neue Attribut:
tiny-userconfiguration: internal/system/vm/custom/custom_TinyMCE.vm
Anschließend sollte der HTML-Code unangetastet bleiben.

Labels: ,

Mittwoch, 6. Mai 2015

Multi-Domain-Zertifikate (SAN) erstellen

Problem:

Auf einem Server (Apache) liegen mehrere Domains, die von Tomcat ausgeliefert werden. Die Verschlüsselung kann nicht mit einem normalen Zertifikat für jeweils eine Domain durch Tomcat erfolgen, weil dieser keine unterschiedlichen Zertifikate verwalten kann. Und Apache weiß überhaupt nichts von den unterschiedlichen Domains, die Trennung erfolgt bei mir erst eine Ebene weiter unten, beim Tomcat.
Man benötigt also ein SAN (Subject Alternative Name)-Zertifikat, das mehrere Domainnamen in einem Zertifikat unterbringt. Dieses kann dann dem Apache übergeben werden, dem dann egal sein kann, welche Domain gerade aufgerufen wurde, er hat immer das richtige Zertifikat parat.
Kostenlose SAN-Zertifikate habe ich leider keine gefunden, aber es gibt recht günstige Anbieter auf dem Markt. Bei meinem Versuch, dort ein Zertifikat zu beantragen und auf dem Server korrekt zum Laufen zu bringen, ergaben sich einige Stolperstellen, deshalb hier die Beschreibung des Lösungswegs.

Lösung:

Zertifikatsantrag erstellen

Bevor man bei einem Anbieter ein Zertifikat kaufen kann, muss man auf dem eigenen Server erst einen passenden Antrag zusammenstellen. Dabei erstellt man das Schlüsselpaar (öffentlicher und privater Schlüssel) sowie eine Antragsdatei, die einige Angaben über den eigenen Server enthält. Wie man diese Dateien erstellt, dafür gibt es im Netz viele Anleitungen. Allerdings unterscheidet sich das Erstellen von SAN-Zertifikatsanträgen an ein paar entscheidenden Stellen vom üblichen Vorgehen, schließlich braucht man nicht nur einen, sondern noch eine oder mehrere weitere (Alternative Name...) Domainadressen.
Zunächst erstellt man ein Schlüsselpaar (privat und öffentlich) mit dem Befehl
openssl genrsa -out example.com.key 2048 
wobei der Dateiname example.com beliebig ist.
Aus diesem Schlüssel (dem öffentlichen Teil natürlich, der private wird nicht "aus der Hand" gegeben!) kann man jetzt einen Zertifikatsantrag erstellen. Allerdings muss man dazu zunächst die Konfiguration des betreffenden Programms anpassen. Hierzu erstellt man ein File csr.conf mit folgendem Inhalt:
prompt = yes
distinguished_name = req_distinguished_name
req_extensions = req_ext

[req_distinguished_name]
commonName = Common Name
commonName_default = www.adresse1.de
countryName = Country Name
countryName_default = DE
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State
stateOrProvinceName_default = BW
localityName = City
localityName_default = Reutlingen
organizationName = Organization
organizationName_default = Meine Organisation
organizationalUnitName = Unit
organizationalUnitName_default = Meine Einrichtung

[req_ext]
subjectAltName = @alt_names


[alt_names]
DNS.1 = www.adresse2.de
DNS.2 = www.adresse3.de

Bei meinem Zertifikateanbieter mussten die Angaben zur Organisation usw. im Zertifikatsantrag stehen, blieben die Felder leer, konnte man den Antrag nicht abschließen, die Felder aber auch nicht nachträglich ausfüllen.
Jetzt kann man das Zertifikat erstellen mit dem Befehl:
openssl req -new -key example.com.key -config csr.conf -out example.com.csr
openssl fragt in der Folge ein paar weitere Parameter ab, bis schließlich das csr-File erstellt ist.
Jetzt kann man mit der csr-Datei den das Zertifikat beim Anbieter beantragen. Am Ende des Prozesses sollte man eine crt-Datei (oder pem-Datei) erhalten (oder nur den Inhalt, den man in eine neue Datei hineinkopiert).

SSL auf dem Server einrichten und aktivieren

Jetzt muss man die Dateien an den richtigen Ort verschieben. Bei Linux mit Apache sind das folgende Pfade:
Die crt/pem-Datei nach /etc/ssl/certs/
Die key-Datei nach /etc/ssl/private/

Jetzt muss man nur noch dem Apache beibringen, zukünftig mit SSL zu verschlüsseln. Dazu sind folgende Änderungen/Ergänzungen in /etc/apache2/sites-available/000-default.conf notwendig:
Sofern alle Anfragen, auch an http.//... auf https://... umgeleitet werden sollen, kommen in den Abschnitt <VirtualHost *:80> folgende Zeilen hinein:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
In den Abschnitt <VirtualHost *:443> (wenn nicht vorhanden, dann von oben kopieren und abändern, DocumentRoot sollte vorhanden sein) kommen folgende Zeilen:
SSLEngine On
SSLCertificateFile /etc/ssl/certs/example.com.pem
SSLCertificateKeyFile /etc/ssl/private/example.com.key
Bei meinem Zertifikatsanbieter war noch ein ChainFile notwendig, weil kein Root-Zertifikat des Anbieters in Firefox & Co installiert war. Sofern notwendig, wird dies mit der Zeile
SSLCertificateChainFile /etc/ssl/certs/XYZChain.pem
eingebunden. (Vorher muss das File natürlich vom Anbieter heruntergeladen und hierher kopiert werden...)
Jetzt kann man noch seine SSL-Konfiguration anpassen, indem man unsichere Protokolle ausschließt, hier nutzt man am besten den Mozilla-SSL-Configuration-Generator und fügt dann die Zeilen
SSLProtocol ...
SSLCipherSuite ...
SSLHonorCipherOrder on 
ein.
Nach einem Apache reload sollte jetzt die SSL-Verschlüsselung der beantragten URLs funktionieren, zu überprüfen mit http://sslzilla.de/zertifikatstest.php.




Labels: , , , ,

Mittwoch, 28. Januar 2015

https-Webserver unter Ubuntu 14.04 mit VirtualHosts

Problem:

Wie stellt man für einzelne VirtualHosts (in meinem Fall: Eine Moodle-Installation) die SSL-Verschlüsselung ein, ohne dass andere VirtualHosts unter der gleichen IP (in meinem Fall: Eine Joomla-Installation) betroffen sind?

Vorgehen:

  • Wie bei heise-online hervorragend beschrieben ein SSL-Zertifikat erstellen (kostenlos, recht einfach und problemlos bei StartSSL). Der Dateiname kann dabei die URL sein, muss aber nicht. Die 3 Dateien (Zertifikat, Schlüssel und Intermediate-Zertifikat)
  • Das SSL-Modul von Apache laden und die Konfiguration neu einlesen
sudo a2enmod ssl
sudo service apache2 force-reload 
  •  Wenn nicht schon vorhanden, neue VirtualHosts anlegen:
    • Die Datei /etc/apache2/sites-available/000-default.conf zweimal kopieren nach /etc/apache2/sites-available/www.domain1.de.conf und ...../www.domain2.de.conf
    • (Mindestens) folgende Angaben eintragen (in meinem Fall ist Domain1 die moodle-Installation und Domain2 die joomla-Installation)
    • Achtung: [ und ] bitte durch < und > ersetzen! Lässt sich im blöden Blogger-Editor nicht richtig formatieren!!!
[VirtualHost *:80´]
ServerName www.servername1.de
DocumentRoot /var/www/moodle/
[Directory /var/www/moodle]
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
[/Directory]
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
[/VirtualHost]

[VirtualHost *:443]
ServerName www.servername1.de
DocumentRoot /var/www/moodle/
[Directory /var/www/moodle]
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
[/Directory]
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/moodle.crt
SSLCertificateKeyFile /etc/ssl/private/moodle.key
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
[/VirtualHost]
    • Das Entsprechende auch mit der zweiten Seite machen, allerdings nur mit dem ersten VirtualHost auf Port 80, wenn die zweite Seite nicht auch verschlüsselt werden soll.
    • Die neuen Seiten in Apache aktivieren:
sudo a2ensite www.domain1.de.conf
sudo a2ensite www.domain2.de.conf
sudo service apache2 force-reload 
  • Ab sofort sollte sich die Webseite auch über https://www.domain1.de aufrufen lassen. Will man das zum Standardverhalten machen (Weiterleitung von http auf https), findet sich hier eine ausreichende Anleitung dafür.
  • Anmerkung für Moodle: In Moodle kann man einstellen (Webseiten-Administration-http-Sicherheit), ob man SSL nur für den Login verwenden will oder für die gesamte Seite, wobei dann der Moodle-eigene Cache nicht funktioniert. Die Performance-Auswirkungen habe ich noch nicht getestet.

Labels: , , , , ,

Freitag, 21. Februar 2014

Farbige Plakate in Schwarz-Weiß umwandeln mit Gimp

Problem:

Im Unterricht wurden farbige Plakate beschriftet, abfotografiert und sollen nun auf ein Arbeitsblatt für die Schüler ausgedruckt werden.
Der farbige Hintergrund ist hierbei unerwünscht, da er ja selten etwas zum Inhalt des Plakats beiträgt.

Vorgehen:

Mit der Open Source-Bildbearbeitungssoftware Gimp (Ver. 2.8) bedarf es dazu nur zwei Schritte:

1. Entsättigen

Unter Farben --> Entsättigen... einen der drei Punkte (zumeist passend: Helligkeit) auswählen.

2. Schwellwert festlegen.

Unter Farben --> Schwellwert zunächst die Automatik auswählen und ggf. mit dem schwarzen und weißen Pfeil nachregeln.

Labels: ,

Freitag, 27. September 2013

F10 in Konsole an Midnight-Commander

Problem

In Ubuntu 12.04 (Unity-Desktop) besteht das Problem, dass die Taste F10 im Terminal nicht den darin gestarteten Midnight Commander (mc) beendet, sondern ein anderes Fenster öffnet. Auf die Dauer ist das etwas lästig.

Lösung

  1. Das Verzeichnis \~\.config\gtk-3.0 erstellen
  2. In diesem Verzeichnis folgende Datei anlegen: gtk.css
  3. Diese Datei muss folgenden Inhalt haben:
@binding-set NoKeyboardNavigation {
     unbind "<shift>F10"
}
* {
     gtk-key-bindings: NoKeyboardNavigation
}
Nach dem Schließen aller geöffneten Terminals sollte die Lösung funktionieren.

Labels:

Samstag, 10. August 2013

Joomla-Frontend-Anmeldung nicht möglich

Problem

"Es gibt keinen Zugriff auf die privaten Seiten."

Nach einem zunächst erfolgreichen Joomla-Update (2.5) konnten sich die User der Gruppe "registered" nicht mehr am Frontend anmelden, es kam bei der Anmeldung obige Meldung. Als Superuser war eine Anmeldung möglich. Im Backend war für die User und die Usergruppe noch alles korrekt eingetragen (also v.a. unter Konfiguration - Berechtigungen - Registered - Seitenanmeldung auf "erlaubt").

Lösung:

  1. In die Datenbankverwaltung (phpmyadmin oder die Verwaltungsoberfläche des Hosters) gehen und dort die Tabelle jom_assets suchen
  2. Nach der Spalte parent_id sortieren
  3. Hier wird es wahrscheinlich mehrere Einträge mit parent_id=0 geben. Es darf aber nur der Eintrag root mit dieser parent_id existieren! Ändern Sie (nach einem Datenbank-Backup natürlich...!) alle übrigen Einträge (bis auf root) der parent_id=0 in 1 ab.
  4. Der Login am Frontend sollte für alle User wieder möglich sein.

Labels:

Mittwoch, 13. Februar 2013

putty und Tunnel unter 64bit-Windows

Problem

Ich wollte unter Windows 8 (64 bit) einen putty-Tunnel aufbauen, um mit einem Java-basierten Programm (Intrexx-Portalmanager) auf eine Server-Applikation auf meinem Ubuntu-Server zuzugreifen. Unsere Firewall blockt die meisten Ports, sodass nur der putty-Tunnel in Frage kommt.
Putty hat erfolgreich eine Verbindung aufgebaut, nur das Programm zickte rum, brachte immer wieder Java-Fehlermeldungen. Da die putty-Einstellungen unter einem 32bit-Windows 7 problemlos funktionierten, musste das Problem an anderer Stelle liegen.

Lösung

Erfolg brachte der Download einer auf 64bit compilierten puty-Version (z.B. hier). Offenbar beißt sich das 64bit-JRE mit dem original 32bit-putty.

Labels: , ,

Sonntag, 25. November 2012

In VirtualBox Guest-Programm vom Host aus starten

Aufgabe

Ähnlich wie im alten WinXP-Mode von Windows 7 soll unter Windows 8 ein nur mit WinXP-kompatibles Programm (z.B. Acrobat 7.0) gestartet werden. Hierbei hilft VirtualBox.  
Allerdings soll nicht erst VirtualBox, dann die virtuelle Maschine und schließlich Acrobat gestartet werden, um am Ende wieder alles zu schließen, sondern all das soll eine Batch-Datei auf dem Desktop oder im Startmenü erledigen. Ein Klick auf die Datei und etwas warten, und schon startet das alte Acrobat, fast so, als wäre es ein Win8-Programm.

Voraussetzungen

  1. WinXP und Acrobat in VirtualBox installieren.
  2. Im Gastsystem (Name z.B. WinXP virtuell) einen User samt Passwort (nötig!) anlegen.
  3. Pfad zum Programm im Gastsystem merken.
  4. Gastsystem in den Seamless-Modus (Strg-L) versetzen.
  5. Gastsystem beenden, dabei Zustand des Gastsystems speichern!

Batch-Datei erstellen

Im Hostsystem (z.B. Win8) eine bat-Datei erstellen mit folgendem Inhalt:
"C:\Program Files\Oracle\VirtualBox\VBoxManage" -q startvm "WinXP virtuell"
"C:\Program Files\Oracle\VirtualBox\VBoxManage" guestcontrol "WinXP virtuell" execute --image "C:\Programme\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe" --username user1 --password abc123 --wait-exit --wait-stdout
"C:\Program Files\Oracle\VirtualBox\VBoxManage" controlvm "WinXP virtuell" savestate
Erklärung:
  • Starten der virtuellen Maschine WinXP virtuell ohne Logo (-q).
  • Starten von Acrobat im Kontext des WinXP-Benutzers user1 mit dem Passwort abc123, VBoxManage wartet, bis Acrobat wieder geschlossen wird (--wait-stdout).
  • Schließen des Gastsystems, der Zustand wird wieder gespeichert.

Labels: , , ,

Dienstag, 28. August 2012

Großes Profil in OpenOffice 3.4

Eigentlich schade, bisher waren die Auslagerungen von OpenOffice ins Benutzerprofil des Anwenders (unter Win7: ~\Appdata\Roaming\OpenOffice.Org, unter WinXP ~\Anwendungsdaten\OpenOffice.Org) recht gering, bei einem frisch installierten Oo zwischen 1-2 MB. Bei AOo 3.4.1 ist dieses Unterverzeichnis plötzlich bei meinem lang genutzten Profil 160 MB groß, bei einem neu angelegten Profil immernoch über 80MB. Für roaming Profiles im Netzwerk eher unpraktisch, ich bin da bemüht, die Userprofile möglichst klein zu halten, damit nicht so viele Daten beim Anmelden übers Netz müssen. Außerdem müsste ich dann die Quota der User hochsetzen…

Auch bei LibreOffice 3.6 ist das Profil 8MB groß, aber das ist immerhin um Faktor 10 kleiner als bei OpenOffice…

 

So nebenbei: Komisch, warum bei allen Versuchen der “Platz auf dem Datenträger” laut Windows im LibreOffice-Profil jeweils bei 20MB lag, woher jeweils diese große Differenz kommt, kann ich mir nicht ganz erklären…

Labels: , , , ,

Freitag, 20. Juli 2012

Ubuntu 12.04 per crontab mit Meldung herunterfahren

Problem

Ubuntu per Crontab herunterzufahren ist ja kein Problem, etwas schwieriger wird es, wenn man Warnungen auf dem Desktop des angemeldeten Users haben möchte.

Vorarbeiten

Unter 
/etc/xdg/autostart
die Datei
 postlogin-xhost-root.desktop
anlegen. Diese Datei wird bei jedem Login ausgeführt. Folgenden Inhalt einfügen:
#!/usr/bin/env 
xdg-open 
[Desktop Entry] 
Encoding=UTF-8 
Name=Postlogin-xhost-root 
Comment=Zugriffsrecht für root auf Display 
Exec=/usr/bin/xhost +local:root 
Terminal=false 
Type=Application 
OnlyShowIn=GNOME;XFCE;KDE;Unity; 
NoDisplay=true
Jetzt darf der User root auf das Display des Users zugreifen.
Nun die Datei
/etc/crontab
bearbeiten und folgende Zeile ganz unten einfügen:
00 18    * * *   root   env DISPLAY=:0 /usr/bin/herunterfahren
Damit wird das weiter unten beschriebene Skript um 18:00 Uhr ausgeführt. Die Datei
/usr/bin/herunterfahren
anlegen und sie ausführbar machen:
 sudo chmod +x herunterfahren
Es gibt nun 2 Wege, Weg A blendet für 6 Sekunden (Timeout entgegen der man-Pages leider nicht einstellbar) Warnmeldungen ein, Weg B lässt dem User die Möglichkeit, das Herunterfahren abzubrechen.

Weg A:

  In die Datei /usr/bin/herunterfahren folgendes einfügen:

#!/bin/bash
notify-send -u critical -i /usr/share/icons/Humanity/status/48/dialog-warning.svg "ACHTUNG!" "Der Rechner schaltet sich in 2 min aus! Speichern Sie Ihre Daten jetzt!" &
sleep 60
notify-send -u critical -i /usr/share/icons/Humanity/status/48/dialog-warning.svg "ACHTUNG!" "Der Rechner schaltet sich in 1 min aus! Speichern Sie Ihre Daten jetzt!" &
sleep 60
notify-send -u critical -i /usr/share/icons/Humanity/status/48/dialog-warning.svg "ACHTUNG!" "Der Rechner schaltet sich JETZT aus!" &
sleep 15
shutdown -h now
exit 0

 Weg B:

In die Datei /usr/bin/herunterfahren folgendes einfügen:
#!/bin/bash
USERCOUNT=$(who | wc -l) 

if [ $USERCOUNT = "0" ]; then 
shutdown -h now; else
zenity --question --timeout=30 --text="Der Rechner wird in 30 Sekunden abgeschaltet. Ist das OK?" --title="PC-Abschaltung"; STATUS=$?
if [ $STATUS = "1" ]; then
echo "";
else
zenity --info --timeout=120 --text "Der Rechner wird in 2 Minuten oder mit einem Klick auf OK heruntergefahren. Bitte speichern Sie JETZT Ihre Arbeit!"; shutdown -h now 

fi
fi

Quellen (überarbeitet und Fehler behoben!):

Labels: ,