Author: sledge0303
Installiert wird:
Lighttpd 1.4.18 mit chrooted Webroot
Beispiel einer Passwortabfrage für ein Verzeichnis
Erstellung eines Adminbereichs mit SSL
PHP5+ PHP5-MySQL
Perl
Hinweis: aus gegebenen Anlass möchte ich darauf hinweisen, es muss bei der momentanen Konstellation in diesem Howto nur der Domainname angepasst werden.
Ich habe mir schon was dabei gedacht, wenn das SSL Zertifikat außerhalb und das Passwortverzeichniss innerhalb des Chroot Verzeichnisses installiert wird.
Stand: 31.10.2007 13:00 Uhr
Den User für das Lighty chroot erstellen:
adduser --home /var/lighttpd --shell /bin/false --no-create-home --system --group lighty
Abhängigkeiten:
apt-get install zlib1g libmysqlclient15-dev libpcre3-dev zlib1g-dev libbz2-dev \ libssl-dev debhelper libgtkhtml2-0 libgtkhtml2-dev gcc g++ flex libcurl3-dev libxpm-dev apache2-utils \ openssl ssl-cert php5-cgi php5-common php5-mysql psmisc openssl ssl-cert
SSL Zerfitikat erstellen:
mkdir -p /etc/lighttpd/ssl openssl req -new -nodes -x509 -keyout /etc/lighttpd/ssl/lighttpd.pem -out /etc/lighttpd/ssl/lighttpd.pem -days 365 chown lighty:lighty /etc/lighttpd/ssl/lighttpd.pem chmod 600 /etc/lighttpd/ssl/lighttpd.pem
Die Prozedur mit der Erstellung verläuft so:
Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:$deinbundesland Locality Name (eg, city) []:$deinestadt Organization Name (eg, company) [Internet Widgits Pty Ltd]:$deinebezeichnung(firma etc) Organizational Unit Name (eg, section) []:$gruppenname Common Name (eg, YOUR name) []:mail.meinedomain.tld Email Address []:$mailadmin@mainedomain.tld
Sourcen des Lighty beziehen:
cd /usr/src/ wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz wget http://download.nixhelp.de/sonstiges/lighttpd-1.4.7.tar.gz
Dateien entpacken und zum kompilieren vorbereiten
tar zxf lighttpd-1.4.18.tar.gz tar zxf lighttpd-1.4.7.tar.gz cp -R lighttpd-1.4.7/debian lighttpd-1.4.18/ cd lighttpd-1.4.18/
Danach erstellst du diese lighttpd.conf
cat > /usr/src/lighttpd-1.4.18/debian/lighttpd.conf << "EOF" server.username = "lighty" server.groupname = "lighty" server.document-root = "/var/www/domain/htdocs/" server.chroot = "/var/lighttpd" server.pid-file = "/var/run/lighttpd.pid" server.errorlog = "/var/log/lighttpd/error.log" accesslog.filename = "/var/log/lighttpd/access.log" server.stat-cache-engine = "simple" server.event-handler = "linux-sysepoll" server.name = "www.meinedomain.de" server.max-fds = 2048 server.follow-symlink = "enable" server.dir-listing = "disable" server.max-keep-alive-idle = 10 compress.cache-dir = "/tmp/" compress.filetype = ("text/plain", "text/html") server.modules = ( "mod_access", "mod_status", "mod_cgi", "mod_alias", "mod_auth", "mod_evasive", "mod_fastcgi", "mod_compress", "mod_accesslog" ) server.indexfiles = ( "index.xhtml", "index.html", "index.htm", "index.php", ) mimetype.assign = ( ".pdf" => "application/pdf", ".sig" => "application/pgp-signature", ".spl" => "application/futuresplash", ".class" => "application/octet-stream", ".ps" => "application/postscript", ".torrent" => "application/x-bittorrent", ".dvi" => "application/x-dvi", ".pac" => "application/x-ns-proxy-autoconfig", ".swf" => "application/x-shockwave-flash", ".tgz" => "application/x-tgz", ".mp3" => "audio/mpeg", ".m3u" => "audio/x-mpegurl", ".wma" => "audio/x-ms-wma", ".wax" => "audio/x-ms-wax", ".ogg" => "application/ogg", ".wav" => "audio/x-wav", ".xbm" => "image/x-xbitmap", ".xpm" => "image/x-xpixmap", ".xwd" => "image/x-xwindowdump", ".asc" => "text/plain", ".c" => "text/plain", ".h" => "text/plain", ".cc" => "text/plain", ".cpp" => "text/plain", ".hh" => "text/plain", ".hpp" => "text/plain", ".conf" => "text/plain", ".log" => "text/plain", ".text" => "text/plain", ".txt" => "text/plain", ".diff" => "text/plain", ".patch" => "text/plain", ".ebuild" => "text/plain", ".eclass" => "text/plain", ".rtf" => "application/rtf", ".bmp" => "image/bmp", ".tif" => "image/tiff", ".tiff" => "image/tiff", ".ico" => "image/x-icon", ".mpeg" => "video/mpeg", ".mpg" => "video/mpeg", ".mov" => "video/quicktime", ".qt" => "video/quicktime", ".avi" => "video/x-msvideo", ".asf" => "video/x-ms-asf", ".asx" => "video/x-ms-asf", ".wmv" => "video/x-ms-wmv", ".tbz" => "application/x-bzip-compressed-tar", ".tar.bz2" => "application/x-bzip-compressed-tar", ".tar.gz" => "application/x-tgz", ".bz2" => "application/x-bzip", ".gz" => "application/x-gzip", ".tar" => "application/x-tar", ".zip" => "application/zip", ".jpeg" => "image/jpeg", ".jpg" => "image/jpeg", ".png" => "image/png", ".gif" => "image/gif", ".xhtml" => "text/html", ".html" => "text/html", ".htm" => "text/html", ".dtd" => "text/xml", ".xml" => "text/xml", ".css" => "text/css", ".js" => "text/javascript", ".deb" => "application/x-deb", ".php" => "application/x-httpd-php", "" => "text/plain", ) static-file.exclude-extensions = ( ".pl", ".cgi", ".fcgi", ".php", ) url.access-deny = ( "~", ".ini", ".inc", ".cfg", ".tpl", ".bak", ".dist", ".orig", ".htaccess", ".htpasswd", ".example", ".sample", ".lang", ) cgi.assign = ( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" ) fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/bin/php5-cgi" ) ) ) auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/etc/lighttpd/password/download.pwd" auth.require = ("/download/" => ( "method" => "basic", "realm" => "admin", "require" => "valid-user" )) $SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/etc/lighttpd/ssl/lighttpd.pem" $HTTP["host"] == "admin.meinedomain.de:443" { server.document-root = "/var/www/admin/htdocs/" accesslog.filename = "/var/log/lighttpd/admin.log" status.status-url = "/server-status" status.config-url = "/server-config" auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/etc/lighttpd/password/admin.pwd" auth.require = ("/" => ( "method" => "basic", "realm" => "admin", "require" => "valid-user" )) } } EOF
Anpassung der debian/changelog:
nano debian/changelog lighttpd (1.4.18) unstable; urgency=low * updated to 1.4.18 -- Dein Name <deine@mail.tld> Wed, 30 Oct 2007 12:48:00 +0200
Anpassung debian/dirs:
cat > /usr/src/lighttpd-1.4.18/debian/dirs << "EOF" usr/bin usr/sbin var/lighttpd/var/www/domain/htdocs var/lighttpd/var/www/domain/htdocs/download var/lighttpd/var/www/admin/htdocs var/lighttpd/dev var/lighttpd/tmp var/lighttpd/usr/share var/lighttpd/etc/lighttpd/password var/lighttpd/var/tmp var/lighttpd/usr/bin var/lighttpd/var/log/lighttpd var/lighttpd/usr/lib/php5/20060613+lfs EOF
Wir können nun das Paket bauen und installieren!!!
dpkg-buildpackage cd .. dpkg -i $DEBDATEI
!!!Der Lighty wird jetzt mit Fehlermeldungen den Start abbrechen. Das ist nicht weiter schlimm, die Ursachen werden nach und nach abgearbeitet!!!
Adminpasswort erstellen:
htpasswd -cmd /var/lighttpd/etc/lighttpd/password/download.pwd $downloaduser htpasswd -cmd /var/lighttpd/etc/lighttpd/password/admin.pwd $adminuser
Wer weitere User hinzufügen möchte, muss das 'c' weglassen, also 'htpasswd -md …'
Chroot aus dem Docroot isolieren
mknod /var/lighttpd/dev/null c 1 3 mknod /var/lighttpd/dev/zero c 1 3 chmod 666 /var/lighttpd/dev/null chmod 666 /var/lighttpd/dev/zero chmod -R 1777 /var/lighttpd/tmp chmod -R 1777 /var/lighttpd/var/tmp grep lighty /etc/passwd > /var/lighttpd/etc/passwd grep lighty /etc/group > /var/lighttpd/etc/group cp /etc/hosts /var/lighttpd/etc/ cp /etc/nsswitch.conf /var/lighttpd/etc/ cp /etc/resolv.conf /var/lighttpd/etc/ cp /etc/services /var/lighttpd/etc/ cp /etc/localtime /var/lighttpd/etc/ chown lighty:lighty /var/lighttpd/var/www chown lighty:lighty /var/lighttpd/var/log/lighttpd
Wir kopieren die notwendigen Dateien in das chroot:
ldd /usr/bin/php5* | awk '{if ($3 ~ /^[^ (]/) print $3}' | cpio -pdvuL /var/lighttpd ldd /usr/bin/perl | awk '{if ($3 ~ /^[^ (]/) print $3}' | cpio -pdvuL /var/lighttpd cp /usr/bin/php5-cgi /var/lighttpd/usr/bin/ cp /usr/bin/php-cgi /var/lighttpd/usr/bin/ cp /usr/bin/perl /var/lighttpd/usr/bin/ cp -ar /usr/share/perl /var/lighttpd/usr/share/ cp -ar /usr/lib/perl/ /var/lighttpd/usr/lib/ cd /var/lighttpd/etc/ cp -ar /etc/php5 . cp /usr/lib/php5/20060613+lfs/pdo_mysql.so /var/lighttpd/usr/lib/php5/20060613+lfs/ cp /usr/lib/php5/20060613+lfs/pdo.so /var/lighttpd/usr/lib/php5/20060613+lfs/ cp /usr/lib/php5/20060613+lfs/mysql.so /var/lighttpd/usr/lib/php5/20060613+lfs/ cp /usr/lib/php5/20060613+lfs/mysqli.so /var/lighttpd/usr/lib/php5/20060613+lfs/ cp /lib/ld-linux.so.2 /var/lighttpd/lib/ cp /lib/libpthread.so.0 /var/lighttpd/lib/ cp /lib/tls/libpthread.so.0 /var/lighttpd/lib/tls/ cp /usr/lib/libmysqlclient.so.15 /var/lighttpd/usr/lib/ cp /lib/libncurses.so.5 /var/lighttpd/lib/
Dateiberechtigung für lighttpd.conf setzen
chmod 600 /etc/lighttpd/lighttpd.conf
Lighty neu starten… diesmal fürfte es zu keiner Fehlermeldung kommen
/etc/init.d/lighttpd restart
Wir testen die Funktionalität von PHP5 + mysql sowie Perl. Bei Perl sei aber gewarnt, es sind keine Module enthalten die für deine Projekte ggf. benötigt werden. Sollte es an dem sein, müssen diese händisch in das chroot kopiert werden!
cat > /var/lighttpd/var/www/domain/htdocs/test.php << "EOF" <?php phpinfo() ?> EOF cat > /var/lighttpd/var/www/domain/htdocs/test.pl << "EOF" #!/usr/bin/perl print "hello world!\n" EOF chmod 755 /var/lighttpd/var/www/domain/htdocs/test.pl
Beide Skripte dürften ausgeführt werden. Bei der Ausführung des Perl Skripts muss 'hello world' erscheinen.
Wenn du das PHP Testfile aufrufst, musst du in der phpinfo die Zeile suchen wo das Docroot beschrieben wird. Die Ausgabe muss dem des internen chroots entsprechen, also:
/var/www/domain/htdocs
Steht davor noch /var/lighttpd/ hast du kein funktionierendes Chroot und musst nochmal alle Schritte durchgehen, insbesonders den Teil wo die nodes erstellt werden.
Möchtest du weitere PHP Funktionen implementieren, musst du die entsprechenden Libs in das chroot kopieren, also so vorgehen wie in diesem Howto beschrieben. Wenn eine LIB fehlt, wird sich meistens der Lighty diesbezüglich zu Wort melden und dir einen Teil der Arbeit abnehmen… aber auch nicht immer!
Zurück zum Index