Benutzer-Werkzeuge

Webseiten-Werkzeuge


web_config

Webzugang über lighttpd

Es existieren drei eigenständige webbasierende Zugriffe:

  • das DokuWiki als Informationsquelle
  • die Java basierte Terminalemulation (Port 3278)
  • ein shellinabox Server, für die Abbildung eines Linux-Terminals im Webbrowser (Port 4200)

Die lighttpd Konfiguration stellt Proxys für die beiden exotischen Ports her, damit diese nahtlos beim Surfen eingebunden sind. Außerdem wird aller eingehender http Datenverkehr auf https umgeleitet, um verschlüsselte Verbindungen zu erzwingen. Die ist vor allem notwendig, um die Konsolenzugänge zu sichern.

shellinabox

Der gemeinsame Zugriff auf die DOS- und SVS-Hauptkonsole erfolgt über die Web-Emulation von Linux Terminals. Diese werden automatisch eingeloggt mit dem Benutzer doscon. Nach dem Login wird automatisch der Befehl dos5 con bzw dos5 svs abgesetzt, womit die entsprechenden Konsolen angezeigt werden. Die seltsame Zeichenkette 0172312 steht nur dafür im Text, dass der richtige Proxy im lighttpd aktiviert wird. SSL wird in der shellinabox Konfiguration ausgeschaltet und von außen durch lighttpd realisiert.

/etc/default/shellinabox
SHELLINABOX_DAEMON_START=1
SHELLINABOX_PORT=4200
SHELLINABOX_ARGS="--no-beep -s /0172312/login:LOGIN -s /0172312/con:doscon:hercules:/home/doscon:/usr/local/bin/dos5\ con -s /0172312/svs:doscon:hercules:/home/doscon:/usr/local/bin/dos5\ svs --disable-ssl --localhost-only"

Für den Zugriff auf die shellinabox Terminals ist eine Anmeldung erforderlich. Die dafür benutzten Benutzernamen werden mit einem cronjob aus den DokuWiki Benutzernamen abgeleitet.

Aktualisierung users.htpasswd
*/10 * * * * cat /var/www/wiki/conf/users.auth.php|grep -v \#|cut -d":" -f1,2>/var/www/wiki/conf/users.htpasswd
Konfiguration des lighttpd
lighttpd.conf
server.modules = (
	"mod_auth",
	"mod_fastcgi",
	"mod_access",
	"mod_alias",
	"mod_compress",
 	"mod_redirect",
        "mod_rewrite",
)
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",
                                   "bin-path" => "/usr/bin/php5-cgi"
                                 )
                               )
                            )
server.document-root        = "/var/www"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80
 
$HTTP["host"] =~ "(draht-zieher.ddns.net)" {
    server.document-root = "/var/www"
 
    $HTTP["url"] =~ "^/0172312(.*)$" {
        proxy.server  = ("" => (
            ("host" => "127.0.0.1", "port" => 4200)
        ))
    }
 
    $HTTP["url"] =~ "^/javaterm" {
        proxy.debug = 1
	proxy.server  = ("" => (
            ("host" => "127.0.0.1", "port" => 3278, "url" => "")
        ))
    }
}
 
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/var/www/wiki/conf/users.htpasswd"
auth.require = ( "/0172312" =>
 (
 "method"  => "basic",
 "realm"   => "Konsolenzugang",
 "require" => "valid-user"
 )
)
$HTTP["scheme"] == "http" {
    # capture vhost name with regex conditiona -> %0 in redirect pattern
    # must be the most inner block to the redirect rule
    $HTTP["host"] =~ ".*" {
        url.redirect = ( ".*" => "https://%0$0" )
    }
}
 
$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/lighttpd/ssl/draht-zieher.ddns.net.pem"
  ssl.ca-file = "/etc/lighttpd/ssl/ca-root.pem"
  server.name = "draht-zieher.ddns.net"
  server.document-root = "/var/www"
  server.errorlog = "/var/log/lighttpd/serror.log"
  accesslog.filename = "/var/log/lighttpd/saccess.log"
}
 
index-file.names            = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny             = ( "~", ".inc" )
url.rewrite-once = ( "^/wiki/(conf|bin|inc)/+.*" => "/nonexistentfolder" )
 
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
 
compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" )
 
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

DokuWiki speichert einen Cookie mit DW+md5(/wiki/), wenn die Anmeldung erfolgreich war. Allerdings stimmt da was an dem Hash nicht, solange man securecookie in den erweiterten Einstellungen nicht ausschaltet.
Anschliessend kann man dann auf den mit DW$(echo -n /wiki/|md5sum) erzeugten Cookienamen prüfen.
Die Funktion gestaltet sich in Lighttpd etwa so:

$HTTP["cookie"] !~ "foo=bar" {
    url.rewrite-once = (
        "^/foo" => "/bar.php" 
    )
}

Allerdings weiss ich jetzt nicht, was in dem Cookie billigerweise drinstehen sollte. Jetzt ist es Mitternacht =)
Details finden sich hier und hier

web_config.txt · Zuletzt geändert: 2016/10/21 00:24 von roman