Send a link

WWW-Server

__Beim Webserver gibt es sehr viel Optimierungspotential.
Wir werden hier erst mal apache mit einer übersichtlichen und einfach zu erweiternden Konfiguration erstellen und danach suExec mit FastCGI einsetzten um die Sicherheit auch bei mehreren Benutzern auf dem System (sog. "ISP Hosting Setup") zu gewährleisten.
Damit dann die User ihre Daten auch hochladen können, wird ein FTP-Server (proftpd) installiert.

Danach werden wir noch einen mySQL-Datenbankserver erstellen.__

apache Webserver


Zuerst werden mal die notwendigen Komponenten installiert:
yum install ImageMagick suexec sendmail unzip sendmail mailx httpd mod_fcgid php php-cli php-common php-devel php-gd php-imap php-mbstring php-mcrypt php-mysql php-pdo php-pear
chkconfig httpd on
chkconfig sendmail on


Damit müssten wir alles haben um auch komplexere Applikationen wie typo3 oder gallery2 laufen zu lassen.

Die Problematik mit mod_php

Bei den meisten apache Webservern läuft PHP als Modul: mod_php. Dies ist sehr einfach einzubinden, allerdings auch sehr suboptimal. Denn dann werden sämtliche PHP Scripte mit dem Benutzernamen und Gruppe des Webservers ausgeführt (z.B. apache). Dies bedingt, dass "apache" auf alle Web-Verzeichnisse zumindest lese, bei manchen sogar Schreibberechtigung erfordert. -So kann also jeder Benutzer auf dem Server sämtliche Inhalte der anderen Benutzer lesen und viele sogar beschreiben!

Workarounds gibts bei php mit dem sog. "save_mode", was aber nur eine halbe Lösung ist.

Lässt man hingegen PHP als (fast-)CGI laufen, so werden alle PHP-Skripte mit dem tatsächlichen Web-Benutzer ausgeführt. Dabei gehts es sogar soweit, dass jeder Benutzer ein eigenes PHP und sogar eine eigene php.ini haben könnte.

Deshalb installierten wir oben apache mit der CGI-Variante und suEXEC, anstatt "mod_php".

Konfiguration


Als erstes müssen wir nun sicherstellen, dass die Datei: /etc/httpd/conf.d/php.conf entweder leer ist, oder nicht existiert. Ist die Datei da, einfach alles darin löschen und abspeichern.
Alternativ lässt sich das auch mit diesem Kommando machen:
test -f /etc/httpd/conf.d/php.conf && echo "# This module is disabled">/etc/httpd/conf.d/php.conf


Wo das php binary nun liegt finden wir heraus mit:
whereis php-cgi

Bei Debian und CentOS ist dies normalerweise: /usr/bin/php-cgi.
Nun müssen wir testen ob es sich auch um die fcgi-Version handelt:
/usr/bin/php-cgi -v

Hier müsste so was wie hier ausgegeben werden (siehe das "fcgi" in den Klammern):
PHP 5.2.10 (cgi-fcgi) (built: Nov 13 2009 11:39:02)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies


Schließen
note Hinweis
Wir könnten nun grundsätzlich php auch selbst kompilieren und dies verwenden. Dabei müsste man einfach darauf achten, dass php mit der fcgi-option kompiliert wird.
Der Nachteil wäre aber dann, dass wir php nicht mehr automatisch mit dem Paketmanager upgraden könnten.


Nun noch überprüfen, ob FCGID aktiviert ist, dazu müsste im file: /etc/httpd/conf.d/fcgid.conf oder in der httpd.conf so etwas stehen:
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule !mod_fastcgi.c>
    AddHandler fcgid-script fcg fcgi fpl
    AddHandler fcgid-script .php
</IfModule>
SocketPath run/mod_fcgid
SharememPath run/mod_fcgid/fcgid_shm



Anlegen der Benutzer und Gruppen

Nun werden wir für jeden Benutzer einen Account ohne shell Zugriff, sowie die gemeinsame Benutzergruppe "users" anlegen.
Es ist hier übersichtlich wenn man pro domain einen Benutzer macht; ausser man hat Benutzer mit mehreren Domains. Wir legen hier einen Benutzer pro Domain an:
groupadd users
useradd testdomain.tld -g users


So erhält jeder Benutzer einen system account in der Form: "domain.tld" und ist in der Standardgruppe: "users".

Der apache selbst hat den gleichnamigen Benutzernamen und ist in der Gruppe: apache (bei debian systemen: www-data)

Verzeichnisstruktur

Die Domain Verzeichnisse sind nach domain-tld/subdomain gegliedert, d.h. der Virtualhost: subdomain.domain.tld hätte den document root: /home/web/domain.tld/subdomain/public_html

Eine Skelettstruktur sieht dann entsprechend so aus:
/home/web/domain.tld/
`-- www
    |-- log
    |   |-- access_log
    |   |-- combined.log
    |   `-- error_log
    `-- public_html
        |-- index.html


Wir haben hier also alle Homepages im Verzeichnis /home/web/ und jede Domain hat ein Verzeichnis "domain.tld", so wie die Unterverzeichnisse: "log" und "public_html". - Im Verzeichnis "log" werden die Logfiles pro (sub-)Domain gespeichert und in "public_html" die öffentlichen Seiten.

Berechtigungen

Die Berechtigungen werden dann wie folgt gesetzt:
drwx--x--x   root root           /home/web/
dr-xr-s---   domain.tld apache   /home/web/domain.tld/
drwxr-s---   domain.tld apache   /home/web/domain.tld/www/
dr-xrws---   domain.tld apache   /home/web/domain.tld/www/log/
drwxr-s---   domain.tld apache   /home/web/domain.tld/www/public_html/
-rw-r-----   domain.tld apache   /home/web/domain.tld/www/public_html/index.php


Dies müsste sicher stellen, dass der User wirklich nur in "seinem" home-Verzeichnis lesen kann; des weiteren darf er auch dort z.B. sein log-Verzeichnis nicht löschen, da dies vom apache verwaltet wird.
Weiter darf der apache user Verzeichnisse innerhalb von /home/web/ lesen (execute), sich diese aber nicht auflisten lassen (read).


Anpassen des Filesystems

suEXEC bedingt standardmässig, dass der PHP-Starter unter /var/www liegt; um dies zu ändern müsste man suEXEC selbst/neu kompilieren, deshalb lassen wir es so.
Hinweis: Es geht dabei nur um das script, dass PHP-CGI startet; wo die Webseiten liegen ist egal!

Nun legen wir das fcgi-verzeichnis an:
mkdir /var/www/fcgi


Die Idee ist, dass hier für jeden web-user ein eigens Verzeichnis erstellt wird und ein startscript darin, dass "sein" php-cgi startet wenn die Webseite dieses Benutzers aufgerufen wird. Es ist dabei wichtig, dass jeder Benutzer ein Verzeichnis hat, auch wenn darin normalerweise nur ein script liegt - Ansonsten verweigert suEXEC aus Sicherheitsgründen den Dienst. Das Verzeichnis muss den Benutzer- und Gruppennamen des Webbenutzer haben.

Nun machen wir das mal für unsere testdomain:
mkdir /var/www/fcgi/testdomain.tld


Darin erstellen wir das Starterscript:
/var/www/fcgi/testdomain.tld/php-fcgi.sh
#!/bin/sh
WEBROOT="/home/web/testdomain.tld"
BASEDIR="/tmp:$WEBROOT"
PHPRC=/etc/php.ini
export PHPRC

exec /usr/bin/php-cgi -d open_basedir=${BASEDIR}


und machen es ausführbar und setzen Benutzer/Rechte:
chmod 755 /var/www/fcgi/testdomain.tld/php-fcgi.sh
chown -vR testdomain.tld:users /var/www/fcgi/testdomain.tld


Dieses Script ist ein sog. "Wrapper" und wird nun jeweils gestartet wenn die Webseite des Benutzers zum ersten mal aufgerufen wird.

In diesem Script könnte man nun eine ganze Umgebung konfigurieren: Individuelles php binary, eigene php.ini, Optionen voraussetzen, Umgebungsvariablen definieren., usw.
Wir beschränken uns hier aber auf das Standard php/php.ini und konfigurieren nur das open_basedir für den Benutzer.

Nun braucht der Benutzer aber noch ein Webverzeichnis; diese legen wir unter /home/web an:
mkdir /home/web
mkdir -pv /home/web/testdomain.tld/www/{log,public_html}
chown -vR testdomain.tld:apache /home/web/testdomain.tld/
chmod -v 2550 /home/web/testdomain.tld
chmod -v 2750 /home/web/testdomain.tld/www
chmod -v 2570 /home/web/testdomain.tld/www/log
chmod -v 2750 /home/web/testdomain.tld/www/public_html


Zu beachten ist hier, dass die Webverzeichnisse dem Domain-Benutzer und der Apache-Gruppe (apache) gehören. apache bekommt aber nur lese und ausführ-rechte. Dies ist nötig, weil sonst der apache ja selbst nicht mehr auf die Seiten zugreifen könnte. Ein Auslesen fremder Daten per PHP wird so aber unmöglich, da PHP mit der Gruppe: "users" ausgeführt wird.

Mit dem SGID-Bit (die "2" beim chmod) stellen wir sicher, dass neu angelegte Dateien nicht die Gruppe des Benutzers (users), sondern die des Verzeichnisses (apache) bekommen.

Des weiteren sollten wir noch sicherstellen, dass vom Benutzer angelgte Dateien/Verzeichnisse auch die entsprechenden Berechtigungen erhalten, die machen wir mit "umask":
echo "umask 027" >> /home/web/testdomain.tld/.bashrc

und dann am besten auch im skel-Verzecihnis; so wird das beim anlegen neuer Benutzer automatisch gesetzt:
echo "umask 027" >> /etc/skel/.bashrc



Apache Konfigurieren

Nun erstellen wir eine saubere apache config und für jede Datei eine Virtualhosts Datei. (Kommentare wurden hier der besseren Unübersichtlichkeit halber bewusst weggelassen)

Bestehende Dateien werden hier überschrieben und überflüssige gelöscht. Zum Schluss sollte das Verzeichnis /etc/httpd etwa so aussehen:
drwxr-xr-x  6 root root 1.0K Feb 23 00:31 .
drwxr-xr-x 66 root root 5.0K Mar  7 19:41 ..
drwxr-xr-x  2 root root 1.0K Feb 26 16:10 conf
drwxr-xr-x  2 root root 1.0K Mar  7 22:45 conf.d
lrwxrwxrwx  1 root root   19 Feb 22 05:09 logs -> ../../var/log/httpd
lrwxrwxrwx  1 root root   29 Feb 22 05:09 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx  1 root root   13 Feb 22 05:09 run -> ../../var/run
drwxr-xr-x  2 root root 1.0K Apr 15  2008 ssl
drwxr-xr-x  2 root root 1.0K Mar  3 02:23 vhosts.d


Nun gehts an die Dateien:

/etc/httpd/conf/httpd.conf:
Diese Datei kann man gröstenteils beim Standard belassen; lediglich zu unterst muss noch die Zeile:
Include vhosts.d/*
eingefügt werden:
echo "Include vhosts.d/*" >> /etc/httpd/conf/httpd.conf



/etc/httpd/conf.d/vhosts.conf:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
DocumentRoot /home/web/www
</VirtualHost>
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key
DocumentRoot /home/web/www
</VirtualHost>
<Directory />
  Order Deny,Allow
  Deny from all
  Options None
  AllowOverride None
</Directory>
<Directory "/home/web">
  AllowOverride All
  Options +SymLinksIfOwnerMatch +Includes
  Order Allow,Deny
  Allow from all
</Directory>




Nun noch für jede Domain ein Virtualhostsfile (jeder Host erhällt auch ein SSL-Virtualhost; damit kann man alle Webseiten auch per SSL abrufen); 0.0.0.0 ist wiederum mit der IP des Servers zu ersetzen:
/etc/httpd/vhosts.d/testdomain.tld
################################################################################
# Virtualhosts File for Domain testdomain.tld
################################################################################

<VirtualHost *:80>
<Directory /home/web/www.testdomain.tld/>
  AllowOverride All
  Options +SymLinksIfOwnerMatch +Includes +ExecCGI
  AddHandler fcgid-script .php
  FCGIWrapper /var/www/fcgi/testdomain.tld/php5-fcgi.sh .php
</Directory>
ServerName testdomain.tld
ServerAlias www.testdomain.tld
DocumentRoot /home/web/www.testdomain.tld/public_html
CustomLog /home/web/www.testdomain.tld/log/combined.log combined
CustomLog /home/web/www.testdomain.tld/log/access_log common
ErrorLog /home/web/www.testdomain.tld/log/error_log
SuexecUserGroup testdomain.tld users
</VirtualHost>

<VirtualHost *:443>
<Directory /home/web/www.testdomain.tld/>
  AllowOverride All
  Options +SymLinksIfOwnerMatch +Includes +ExecCGI
  AddHandler fcgid-script .php
  FCGIWrapper /var/www/fcgi/testdomain.tld/php5-fcgi.sh .php
</Directory>
ServerName testdomain.tld
ServerAlias www.testdomain.tld
DocumentRoot /home/web/www.testdomain.tld/public_html
CustomLog /home/web/www.testdomain.tld/log/combined.log combined
CustomLog /home/web/www.testdomain.tld/log/access_log common
ErrorLog /home/web/www.testdomain.tld/log/error_log
SuexecUserGroup testdomain.tld users
SSLEngine On
SSLCertificateFile /etc/httpd/ssl/webmail.crt
SSLCertificateKeyFile /etc/httpd/ssl/webmail.key
CustomLog /tmp/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>


SSL-Konfiguration

Nun muss nur noch ein SSL-Zertifikat erstellt werden:
(ANMERKUNG: Bei der "passphrase"-Abfrage einfach ENTER drücken)
mkdir /etc/httpd/ssl
ssh-keygen -t rsa -f /etc/httpd/ssl/apache.key
openssl req $@ -new -x509 -days 365 -nodes -out /etc/httpd/ssl/apache.crt -keyout /etc/httpd/ssl/apache.key




Domain / Benutzer hinzufügen

Um nun eine neue Domain, bzw. Benutzer hinzuzufügen muss man folgendes tun:
  • Benutzer erstellen:
adduser domain.tld -g users

  • Verzeichnis und Starterscript erstellen:
mkdir /var/www/fcgi/domain.tld
vi /var/www/fcgi/domain.tld/php-fcgi.sh
chown -vR domain.tld:users /var/www/fcgi/domain.tld
chmod 755 /var/www/domain.tld/php-fcgi.sh

  • Webverzeichnis erstellen:
mkdir -p /home/web/domain.tld/www/{log,public_html}
chown -vR domain.tld:apache /home/web/domain.tld/
chmod -v 2550 /home/web/domain.tld
chmod -v 2750 /home/web/domain.tld/www
chmod -v 2570 /home/web/domain.tld/www/log
chmod -v 2750 /home/web/domain.tld/www/public_html

  • Virtualhost-file erstellen:
vi /etc/httpd/vhosts.d/domain.tld

  • Apache Neu starten:
/etc/init.d/httpd restart



Fehlersuche

Internals Server Error

Wahrscheinlich stimmen die Rechte des Wrappers oder des Verzeichnisses in dem der Wrapper liegt nicht. Prüfen Sie die suEXEC Logdatei (/var/log/httpd/suexec.log) sowie die Apache Error Logdatei (/var/log/httpd/error.log).


Nun installieren wir den Datenbankserver

yum install mysql mysqld
chkconfig mysqld on


Die default Werte von /etc/my.cnf sind hier schon passend.
Möchte man UTF8 verwenden muss man evtl. unter dem Punkt client noch folgendes anfügen:
default-character-set  = utf8

und unter: mysqld
init-connect="SET NAMES utf8"



FTP-Server

Als letztes installieren wir den FTP-Server:

yum install ftp proftpd
chkconfig proftpd on


Nun noch in: /etc/proftpd.conf für jede Homepage ein Verzeichnis: /home/web/domain.tld erstellen:
<Directory /home/ftp/upload>
</Directory>


Und dein Webserver läuft!


Erweiterungen

Quota

Ob Quota auf filesystem-ebene heute noch Sinn macht, muss jeder für sich entscheiden. In der Regel wird man das Quota ohnehin zusätzlich noch in den Software-Komponenten (ftp-server, mailserver, usw.) konfigurieren.

So installieren wir das File System Quota:

Installieren:
yum install quota


Initialisieren:

Zuerst muss man bei jeder Partition, für die man quota Einsetzen will in der /etc/fstab bei den Options: "usrquota,grpquota" angefügt werden, z.B.:
defaults,usrquota,grpquota


Danach die Partition remounten, z.B.:
mount -o remount /home


Nun Initialisert man noch das Quota-File:
quotacheck -cug /home
quotacheck -avug


Setzen kann man das Quota dann mit:
edquota username


Verwaltung / Administration

Neue Domain erstellen automatisiert

Da es nun ziemlich mühsam wäre bei jeder neuen Domain diese kompletten obigen Schritte durch zu gehen, bietet es sich an ein entsprechend Script zu erstellen, dass dies automatisiert; dieses kann entweder unter /root/bin oder etwa /usr/local/bin liegen.

Dazu können wir gleich das Verzeichnis: /etc/skel/ benutzen; denn sobald ein neuer user im System angelegt wird, wird der Inhalt dieses Verzeichnisses automatisch ins User Verzeichnis kopiert.

Zuerst legt man also die benötigte Verzeichnisstruktur für einen "WebUser" in diesem Verzeichnis an:
mkdir -pv /etc/skell/www/{log,private,public_html}
touch /etc/skell/.bash_history /etc/skell/.viminfo


Zu beachten ist hier, dass auch die Dateien angelegt werden müssen, die normalerweise beim ersten login automatisch erzeugt würde (z.B. .bash_history), da der WebUser auf der ersten ebene seines HOME-Verzeichnisses keine Schreibberechtigung haben wird.

Weiter werden nun jeweils "template-files" angelegt um einen VirtualHost zu erzeugen, eine Datenbank aufzusetzen und natürlich der php-fcgi wrapper:
/etc/skel/vhost.template
################################################################################
# Virtualhosts File for Domain domain.tld
################################################################################


#========================== PROD domain =======================================
<VirtualHost *:80>
  ServerName domain.tld
  ServerAlias www.domain.tld
  DocumentRoot /home/web/domain.tld/www/public_html
  CustomLog /home/web/domain.tld/www/log/combined.log combined
  CustomLog /home/web/domain.tld/www/log/access_log common
  ErrorLog /home/web/domain.tld/www/log/error_log
  SuexecUserGroup domain.tld users

  <Directory /home/web/domain.tld/www/>
    AllowOverride All
    Options +SymLinksIfOwnerMatch +Includes +ExecCGI
    AddHandler fcgid-script .php
    FCGIWrapper /var/www/fcgi/domain.tld/php5-fcgi.sh .php
  </Directory>
</VirtualHost>


#========================== SSL ===============================================
#<VirtualHost *:443>
#  ServerName domain.tld
#  ServerAlias www.domain.tld
#  DocumentRoot /home/web/domain.tld/www/public_html
#  CustomLog /home/web/domain.tld/www/log/combined.log combined
#  CustomLog /home/web/domain.tld/www/log/access_log common
#  ErrorLog /home/web/domain.tld/www/log/error_log
#  SuexecUserGroup domain.tld users
#
#  <Directory /home/web/domain.tld/www/>
#    AllowOverride All
#    Options +SymLinksIfOwnerMatch +Includes +ExecCGI
#    AddHandler fcgid-script .php
#    FCGIWrapper /var/www/fcgi/domain.tld/php5-fcgi.sh .php
#  </Directory>
#</VirtualHost>


/etc/skel/db.sql.template
CREATE DATABASE domain_tld;
GRANT ALL PRIVILEGES ON `domain_tld`.* TO 'domain.tld'@'%' IDENTIFIED BY 'setpass';
FLUSH PRIVILEGES;


/etc/skel/php5-fcgi.sh.template
#!/bin/sh
PHPRC=/home/web/conf.generic/
export PHPRC
exec /var/www/fcgi/php5-fcgi


Nun können wir das domainadd/domaindel Script erstellen; die vorhin erzeugten template files werden von diesem script dann entsprechend weiter verarbeitet:

domainadd
#!/bin/sh
################################################################################
# domainadd / domaindel
# CREATED BY: Steven Varco
#
# Adds or deletes a domain.
# The directory structure of  the domain can be configured in /etc/skel
# For the creation of virtualhosts and DB you can create the follwing templates
# in /etc/skel:
#   - vhost.template
#   - db.sql.template
#   - php5-fcgi.sh.template
#   - www/public_html/index.html
# in these files the string "domain.tld" (or "domain_tld" for DB Names) will be
# replaced with the actual domain.
# In the DB template, the string "setpass" will be replaced with a random generated
# password.
#
# HISTORY:
#==============================================================================
# 29.11.2011    Steven Varco    - Created Script
################################################################################



#========================== Configuration =====================================
DOMAIN=$1
DOMAINBASEDIR="/home/web"
DOMAINDIR="$DOMAINBASEDIR/$DOMAIN"

PATH_VHOSTS=/etc/httpd/vhosts.d
PATH_FCGI=/var/www/fcgi
GROUPID=100
WEBGROUP="apache"
USERGROUP="users"
PASSWORD=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
#VERB="-v"


#========================== Creation ==========================================
if [ -z "$DOMAIN" ]; then
  echo "usage: domainadd <domain.tld>"
  exit 1
fi

if [ "$DOMAIN" != "" ]
  then
  if [ ! -d $DOMAINDIR  ]
  then
    echo "creating domain: $DOMAIN in: $DOMAINDIR"

    # User creation and permissions
    useradd -b $DOMAINBASEDIR -m $DOMAIN -g $GROUPID
    # If /etc/skel is not configured properly, create needed directories
    mkdir -p $VERB $DOMAINDIR/www/{log,private,public_html}
    chown -R $VERB $DOMAIN:$WEBGROUP $DOMAINDIR
    chmod $VERB 2550 $DOMAINDIR
    chmod $VERB 2570 $DOMAINDIR/*/log |grep changed
    find $DOMAINDIR/*/{private,public_html}/ -type d |xargs chmod $VERB 2750 |grep changed
    find $DOMAINDIR/*/{private,public_html}/ -type f |xargs chmod $VERB 640 |grep changed
    if [ -f "$DOMAINDIR/www/public_html/index.html" ]; then
      perl -p -i -e "~s|domain\.tld|$DOMAIN|" $DOMAINDIR/www/public_html/index.html
    fi

    # FCGI stuff
    mkdir $VERB $PATH_FCGI/$DOMAIN
    chown $VERB $DOMAIN:$USERGROUP $PATH_FCGI/$DOMAIN/
    if [ -f "$DOMAINDIR/php5-fcgi.sh.template" ]; then
      mv $VERB $DOMAINDIR/php5-fcgi.sh.template $PATH_FCGI/$DOMAIN/php5-fcgi.sh
      chown $VERB $DOMAIN:$USERGROUP $PATH_FCGI/$DOMAIN/php5-fcgi.sh
    fi

    # VirtualHost creation
    if [ -f "$DOMAINDIR/vhost.template" ]; then
      perl -p -i -e "~s|domain.tld|$DOMAIN|" $DOMAINDIR/vhost.template
      mv $VERB $DOMAINDIR/vhost.template $PATH_VHOSTS/020-$DOMAIN
      chown $VERB root:root $PATH_VHOSTS/020-$DOMAIN
    fi

    # DB creation
    if [ -f "$DOMAINDIR/db.sql.template" ]; then
      DBNAME=${DOMAIN//./_}
      perl -p -i -e "~s|domain\.tld|$DOMAIN|" $DOMAINDIR/db.sql.template
      perl -p -i -e "~s|domain_tld|$DBNAME|" $DOMAINDIR/db.sql.template
      perl -p -i -e "~s|setpass|$PASSWORD|" $DOMAINDIR/db.sql.template
    fi

    # Activating
    if [ -f "$PATH_VHOSTS/020-$DOMAIN" ]; then
      #/etc/init.d/httpd configtest && /etc/init.d/httpd reload
      echo "to activate changes, execute: /etc/init.d/httpd configtest && /etc/init.d/httpd reload"
    fi

    if [ -f "$DOMAINDIR/db.sql.template" ]; then
      echo "To create a corresponding DB, execute: mysql -uroot -p < /home/web/$DOMAIN/db.sql.template && rm -v /home/web/$DOMAIN/db.sql.template"
    fi
  else
    echo "Domain already exists!"
    exit 1
  fi
else
  echo "No domain given!"
  exit 1
fi


domaindel
#!/bin/sh
DOMAIN=$1
DOMAINBASEDIR="/home/web"
DOMAINDIR="$DOMAINBASEDIR/$DOMAIN"

GROUPID=100
WEBGROUP="apache"
USERGROUP="users"
PASSWORD=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)
#VERB="-v"

if [ -z "$DOMAIN" ]; then
  echo "usage: domainadd <domain.tld>"
  exit 1
fi

if [ "$DOMAIN" != "" ]
  then
  if [ -d $DOMAINDIR  ]
  then
    rm -f $VERB /etc/httpd/vhosts.d/020-$DOMAIN
    userdel -r $VERB $DOMAIN
    rm -rf $VERB /var/www/fcgi/$DOMAIN

    echo "to activate changes, execute: /etc/init.d/httpd configtest && /etc/init.d/httpd reload"
    echo "NOTE: Any user databases and the corresponding DB user have to be removed manually!"
  else
    echo "Domain does not exist!"
    exit 1
  fi
else
  echo "No domain given!"
  exit 1
fi


Nun lässt sich mittels:
domainadd <domain.tld>
eine neue Domain erstellen.


Link Beschreibung
Apache2.2 + PHP5 + FastCGI + suEXEC auf Debian Etch Tutorial (external link) Sehr gute Info-Seite übe das Einrichten von php mit suEXEC und fastCGI.
Apache2 mit PHP5 als suExec/ Fcgid Variante  (external link) Das Hetzner wiki erklärt hier sehr gut die suExec / FCGID-Variante.
How To Set Up Apache2 With mod_fcgid And PHP5 On CentOS 5.2 (external link) Hier noch ein FCGID-Guide für CentOS
Implementing Disk Quotas (external link) Der RHEL/Centos Guide um quotas zu implementieren


Neuen Kommentar posten

Anti-Bot Prüf-Code: Zufälliges Bild
Neuen Kommentar posten
Schließen
note Hinweis
Your comment will have to be approved by the moderator before it is displayed.