Installation on "Debian Sarge"
2006-11-14
Haefelfinger
Philipp
philipp.haefelfinger@syscp.org
Brand
Ron
ron.brand@syscp.org
Aders
Florian
florian.aders@syscp.org
2005
2006
SysCP
This work is licensed under the Creative Commons
Attribution-Noncommercial-Share Alike 2.0 Germany License. To view a
copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/de/
or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San
Francisco, California, 94105, USA.
1
2005-07-17
First rewrite completed
1.1
2005-07-18
Translation completed / Completed Part of Postfix-MySQL
connection
1.2
2005-09-22
Added 2 basic php-packages to the packagelist
1.3
2006-09-13
Converted the HowTo into LaTeX
1.4
2006-09-20
Rearrangement for the use with SysCP 1.2.14
1.5
2006-11-10
Converted into DocBook
1.6
2006-11-14
Added hint about ini_restore, inserted the cronscript and
added licensing-information
The first words
Welcome
Welcome to the installation - process for the SysCP
server-management-tool. You have chosen a powerful tool with a very
small need of resources. Just execute the commands we show you in this
HowTo and you should be happy. If problems occur, ask in our
IRC channel or visit our
forum. Do yourself a favour
and use the powerful search function before asking any question. The
results you get might be more efficient than a single question about a
particular problem.
Naming conventions
In this HowTo, we used the following basic naming
conventions:
Commands executed as root:
syscp ~ #
/execute/this/command
Commands executed as a specific user:
vmail@syscp $
/execute/this/command/as/user/vmail
Output of various programs:
I am the echo of a normal command, executed in a
shell
Content of a file:# The following sets the variable PATH to a useless value
PATH=/dev/nullFilenames:
/etc/apache/httpd.conf
Variable names: $iamavariable
Requirements
User requirements
It is essentially to be familiar with your Linux-Environment. You
might encounter situations, where you definitely need a shell. If you
wish to install your server according to this HowTo it is advisable to
consult and understand the basics of networking, DNS and - of course -
Linux itself. You don't need to know every detail of your mail system
already, this will be discussed here in this HowTo. Should you, however,
have no experience at all how to operate a server which is connected to
the Internet, we strongly recommend the usage of a test-environment. A
wrongly configured server is a target for all kind of attack and
misuse.
This HowTo requires also basic-knowledge about the MySQL database
server. Installation and configuration will not be discussed here. Last
but not least you need to know basics about your apache webserver,
without this basic knowledge you wont be able to configure your
SysCP setup, and the software might not function
properly. Every admin should be aware what kind of software is running
on his/her system. Please keep in mind one basic thing:
The best admintool can never replace a good
administrator
Server requirements
To perform a successful installation of SysCP
it is assumed to have a minimal Debian Sarge up and running. A
discussion about how to install Linux itself will not take place here.
Certainly there are enough good HowTos available elsewhere and are
misplaced here. In addition a MySQL database is needed too. Likewise
there are good HowTos for helping you to install MySQL.
Installing softwarepackages
Editing sources.list
In Debian Sarge the following softwarepackages will be needed. To
make sure that all dependencies will be resolved, you must edit the file
/etc/apt/sources.list. The following line needs to
be inserted in
/etc/apt/sources.list:deb http://debian.syscp.de/ sarge/It
should look like this afterwards (you can find this in our F.A.Q.
as well). Of course you can edit it to fit your needs.deb ftp://ftp.debian.de/debian sarge main
deb-src ftp://ftp.debian.de/debian sarge main
deb ftp://ftp.debian.de/debian-non-US sarge/non-US main
deb-src ftp://ftp.debian.de/debian-non-US sarge/non-US main
deb http://security.debian.org/ sarge/updates main
deb-src http://security.debian.org/ sarge/updates main
deb http://debian.syscp.de/ sarge/Once this line was added
run the command
syscp ~ # apt-get
update
to make sure that the internal database of the debian package
maintainer is up to date with the latest package information.
Please note: Debian will resolve all dependencies automatically!
This is helpful, you do not need to install every single package
manually. Now you are almost ready to start installation. We should
check next if exim4 is installed which we need to
remove, since SysCP depends on
postfix (Note: most installations of Sarge include
the exim4 by default). If exim4 is
installed on your system please run the code
syscp ~ # apt-get remove --purge
exim4-base
which will remove the exim4 mail-system completely from your
server. Finally you are ready to run the command
syscp ~ # apt-get install
syscp
Most package dependencies might be cleared after that. Special
packages for special tasks must be installed manually e.g.
courier-imap-ssl.
List of Packages
Mail transfer agent (MTA)
postfix
postfix-mysql
postfix-tls (for crypted
SMTP-Auth)
Database
mysql-client
mysql-server
mysql-common
POP3 / IMAP
courier-authdaemon
courier-authmysql
courier-maildrop
courier-pop (non-crypted POP3 access)
courier-pop-ssl (SSL-secured POP3 access)
courier-imap (non-crypted IMAP access)
courier-imap-ssl (SSL-secured IMAP access)
courier-ssl
SMTP Auth
libsasl2 (the Cyrus SASL library)
libsasl2-modules
libsasl2-modules-sql
Mailscanner
spamassassin
clamav
clamav-daemon
Webserver (Apache 1.3)
apache
apache-common
apache-utils
libapache-mod-php4
libapache-mod-ssl
php4
php4-mysql
php4-common
php4-cli
DNS-Server
bind9
bind9-host
FTP-Server
proftpd
proftpd-mysql
SysCP
syscp
Additional packages
openssl (SSL-library)
unzip (Pack program)
unarj (Pack program)
phpmyadmin (Webadmin for
MySQL)
dpkg-dev (for compiling
Maildrop)
Configuration
Most configuration files of the services might be already existing
and don't have to be created. They might have been created during the
install process of the service, and will be good enough for a default
setup.
WARNING: Do NOT use any
Microsoft-Windows editor for editing configuration files, they might
become corrupt due to wrong line-breaks. If working with windows, use an
editor that can save files in Unix/Linux format.
Before we start the configuration-process let's have a thought of
how we organize our data. Mostly important is the directory where you
store data of your customers. SysCP suggests
/var/kunden (english/international users might want
to use /var/customers). After all its up to you how
you name this directory, but it's important that you know that now since
the whole configuration and file-structure will be based on this.
IMPORTANT: The configuration-files
shown here are not complete. Most settings you learn here were done by the
author in addition to those settings which will be generated by
SysCP. You can find a complete list of all
configuration files on the page "Configuration" in the
SysCP - administration panel. These files can be used
as a template, keep in mind that you have to adjust them according to your
own needs. It will be much easier for you, to follow the templates
suggested in this HowTo.
Prepare your Server for SysCP
Apache
In order to be able to configure SysCP we
need the apache-webserver up and running. A default setup is
recommended. For further help refer to the apache documentation or the
apache2.conf itself, where all sections have
detailed comments. The following adjustments - if not performed
already - should be observed.
Open the file /etc/apache/httpd.conf in
your favourite editor (vim,
nano, mc, etc.) and set the
following values:[...]
Listen <your-ip>
[...]
BindAddress <your-ip> or 0.0.0.0
[...]
ServerAdmin <your email-address>
[...]
ServerName <your servername> (e.g.: root-server-142-175.your-provider.tld)
[...]
# Uncomment the following values
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phpsServerName
should always be the official name given by your provider. This will
ensure that all the domains you might want to host can be managed with
one tool: SysCP. Save the file and leave your editor.
Please note: Due to some
security-issues inside PHP, a customer can disable
open_basedir and / or
safe_mode, if it's disabled in your
php.ini. The function used for this is called
ini_restore. To prevent these attacks, you can
disable this function in your
php.ini:disable_functions = ini_restoreNow
you can restart the Apache-Server
syscp ~ # /etc/init.d/apache
restart
Further it will be possible to have initial setup with SysCP by
using the IP-address / provider name of the server.
We type the following URL in the browser
http://<YOUR-IP>/syscp. This URL results
from the pre-installation of SysCP in the
directory /var/www/syscp, since Apache points to
/var/www by default.
The first message will guide you through a link directly to the
install-dialog and hopefully you will get the message in your browser:
"You have to configure SysCP first!" Click on
"configure". Here you go: you will be prompted to
the installscreen of SysCP.
The SysCP-installer
As you will notice, the screen is already filled with
some default values. It is recommended to leave most default values.
Eventually you have to adjust the "Servername" according to your
FQDN.
Make your personal entries in the password fields and click
"next". Note: in case the entries are
missing/incorrect you will get a red "reminder". If all went fine you
will get the message shown below from the installer and you are ready
for the first login.
Successful installation of the panel
Hint: All following configuration-files can be
generated by SysCP and shown on the
webfrontend. Click "Configuration" in the main-menu
and choose from "Debian Sarge" the daemon you wish to configure. You
will realize, with a few exceptions all files in this HowTo are
identical.
Serversettings of SysCP
First duty after login are the "Settings", it
will make it a bit easier to create and edit the configuration files.
SysCP uses this settings to create the
templates of the configfiles. The following entries are quite
important, errors will lead into malfunction.
Web- and Logdirectories
Here you have 2 of these important settings: the top of the
path, in which the homepage of each users will reside, and the
directory of the logfiles. In the logdirectory all logfiles
generated by apache will be stored. For each website there is at
least one webXY-access.log and one webXY-error.log where
informations and errors are recorded.
Mailsystem UID / GID
Be sure to fill in this two fields correctly. These IDs inform
you which system account the mails will belong to after delivering.
Normally this will be the user vmail. Should this user already exist
on your system, the userid (UID) and groupid (GID) needs to be
adjusted in order to match the correct user, otherwise you can
freely use 2000.
Maildirectory
Here the directory for mail-deliverance will be set. Please
note that this directory must be owned by the user vmail and the
group vmail. The user vmail appears with the same UID and GID like
the above mentioned informations about mailuser.
Sender
Honestly, the sender-variable is not that important.
Nevertheless it should be checked and changed according to your
needs. It won't look quite professional if a welcome-mail from
SysCP carries an address like
info@example.org. Although
SysCP will suggest a name, most users might
use their special address.
The daemons
Now we will enter the most important section of your SysCP
installation. We will configure the daemons which do all the
hosting-work.
Apache
To guarantee a smooth operation of all websites and domains,
apache needs to be instructed precisely. This is realized through the
file /etc/apache/vhosts.conf. Apache also must
include this file in its configuration file
/etc/apache/httpd.conf. Open the file
/etc/apache/httpd.conf with your editor
(vim, nano,
mc, etc.) and at the very end - if not yet existing
- type in the following:Include /etc/apache/vhosts.confSave
and exit the editor. Of course this newly included file must exist. We
will use the command touch.
syscp ~ # touch
/etc/apache/vhosts.conf
The file vhosts.conf is automatically
maintained by SysCP whenever domains and other
apache relevant informations are added/changed. You might ask why
there is no editing of the line with NameVirtualHost.
SysCP will maintain this entry too in the
vhosts.conf. Next, create directories of the
customers. You can use the following commands:
syscp ~ # mkdir -p
/var/kunden/webs/
syscp ~ # mkdir -p
/var/kunden/logs/
It is time now to restart apache:
syscp ~ # /etc/init.d/apache
restart
Eventually there is a warning that an IP has no virtual host.
This message will disappear after the creation of the first
domain.
Bind9
We will now configure the nameserver, so that it will create
entries of the domains automatically. The steps are like this:
Open the file /etc/bind/named.conf in your
editor and add the line following line at the end:include "/etc/bind/syscp_bind.conf";To
avoid errors we have to create this file, otherwise bind would not
start:
syscp ~ # touch
/etc/bind/syscp_bind.conf
The standard-zonefile for all SysCP
domains must be created, perform the command:
syscp ~ # touch
/etc/bind/default.zone
Thereafter open the file
/etc/bind/default.zone with your editor. Add this
content:$TTL 1W
@ IN SOA ns root (
2004060501 ; serial
8H ; refresh
2H ; retry
1W ; expiry
11h) ; minimum
IN NS ns
IN NS nsX.provider.com.
IN NS nsY.provider.com.
IN MX 10 mail
IN A <your-ip>
IN MX 10 mail
* IN A <your-ip>
IN MX 10 mail
ns IN A <your-ip>
mail IN A <your-ip>
IN MX 10 mailPlease replace <YOUR-IP>
with the IP-address of your server. The entries for the secondary
nameserver must be inserted, too. In the above example they are marked
as ns[X|Y].provider.com.
Attention: The dot "." on the
end of these lines is mandatory. Otherwise this entry will be treated
as a subdomain. The dot marks the URL as completed.
Above inserted secondary DNS-server need the privileges for
transferring the zones onto their own host. To enable this, we must
insert the option allow-transfer in the following
file. All IP-addresses of the servers are stored there.
/etc/bind/named.conf.options or
/etc/bind/named.conf section
options:[...]
allow-transfer {
12.34.56.78;
12.34.57.89;
};
[...]To complete the nameserver setup we will restart bind
with this command:
syscp ~ # /etc/init.d/bind9
restart
The nameserver is now configured and ready to use. The further
settings will be done by the SysCP
cronjob.
ProFTPd
Default Configuration
Edit the file /etc/proftpd/proftpd.conf
according to the sample on the SysCP
webfrontend and make it identical. In the following listing are a
few personal options, added to the SysCP
template by the author.
/etc/proftpd/proftpd.conf[...]
<Global>
# chroot all users
DefaultRoot ~
# Reject rootlogin (just for security)
RootLogin off
# No need to require valid shell, because user is virtual
RequireValidShell off
</Global>
<IfModule mod_delay.c>
DelayEngine off
</IfModule>
[...]To ensure that ProFTPd is working with the
MySQL-database, please verify that "LoadModule
mod_sql_postgres.c" is commented out
("#LoadModule mod_sql_postgres.c") in the file
/etc/proftpd/modules.conf. Otherwise ProFTPd
will refuse logins.
Restart your ProFTP-Server as follows:
syscp ~ # /etc/init.d/proftpd
restart
The configuration of your FTP-Server is finished. From now on
ProFTPD will verify the logins with the MySQL-database.
TLS / SSL Operation (optional)
To enable TLS-Mode on your FTP-Server two things need to be
done. First you need a certificate, which is needed to establish a
crypted connection. It can be created easily using this
command:
syscp ~ # openssl req -new -x509
-days 365 -nodes -out /etc/ssl/certs/proftpd.cert.pem -keyout
/etc/ssl/certs/proftpd.key.pem
For more Information regarding SSL and TLS please visit:
http://www.chimera.ch/download.php?view.4.
After creating the certificate we must adjust the configuration of
ProFTPd.
/etc/proftpd/proftpd.conf# Uncomment this if you would use TLS module:
TLSEngine on
TLSLog /var/log/ftp_tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem
TLSVerifyClient off
# Uncomment the following line to force tls-login
#TLSRequired onMeanwhile it should be
understandable for you, to restart a service after changing its
configuration to let the changes become effective. Lets do this now,
you will be able to establish a FTP-connection via TLS:
syscp ~ # /etc/init.d/proftpd
restart
SysCP cronjob
It is not very wise to create a cronjob to manipulate services
which are not configured yet. Therefore we waited until this point, to
ensure a stable configuration before the cronjob will start its
powerful duty. We will now hand over the configuration stored in the
database to each service. Like mentioned earlier, the cronjob of
SysCP is a key-feature, it will take care of
the involved configuration files. On the SysCP
Main page choose Configuration -> Debian Sarge -> Crond
(cronscript).
Create the here mentioned file
/etc/php/syscpcron/php.ini and copy the shown
content in the newly created file (note: the file needs to have an
empty line at the very end).#
# Set PATH, otherwise restart-scripts won't find start-stop-daemon
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#
# Regular cron jobs for the syscp package
#
*/5 * * * * root /usr/bin/php -q -C /etc/php/syscpcron /var/www/syscp/scripts/cron_tasks.php
0 0 * * * root /usr/bin/php -q -C /etc/php/syscpcron /var/www/syscp/scripts/cron_traffic.php
10 0 * * * root /usr/bin/php -q -C /etc/php/syscpcron /var/www/syscp/scripts/cron_traffic_report.php
Repeat this step for /etc/cron.d/syscp.
The usual restart will restart the cron-daemon and update the
configuration.
syscp ~ # /etc/init.d/cron
restart
Again: congratulations! The first huge part of your
SysCP configuration is complete. Take a break
for the second part to perform.
Mailsystem
Postfix
First let us perform some commands in a shell to create a base
for postfix and SASL. If not yet existing create the following
directories:
syscp ~ # mkdir -p
/etc/postfix/sasl
syscp ~ # mkdir -p
/var/spool/postfix/etc/pam.d
syscp ~ # mkdir -p
/var/spool/postfix/var/run/mysqld
Attention: Make sure that
there is NO whitespace at the end of the configuration files.
Otherwise it will be added to the path or the value of the setting
and you get disastrous results. The same warning applies, when it
comes to edit these files using file editors on Windows Systems
(e.g. notepad.exe). This editors related to the DOS-world write
<CR><LF> instead of <LF> on each end of a line,
which is sometimes (and this is the bad news) unable to understand
by a Unix-related System like Linux. The configuration files of
postfix are one of those where you strictly need a Unix-conform
editor editing them. To let postfix gain access to the MySQL
database and its content we need the following
configuration-files:
/etc/postfix/main.cf
/etc/postfix/mysql-virtual_alias_maps.cf
/etc/postfix/mysql-virtual_mailbox_domains.cf
/etc/postfix/mysql-virtual_mailbox_maps.cf
Authors Note: the two files below will not be
created by the official SysCP installation.
However, the author likes to suggest to make usage of these files,
since they are present in the database and won't harm anything.
Therefore the postfix-configuration discussed here is slightly
different from the one SysCP uses. Should you
prefer the original SysCP version, go ahead!
Just skip these 2 files, but in this case keep in mind to set
virtual_uid_maps and
virtual_gid_maps in main.cf
on static.
/etc/postfix/mysql-virtual_uid_maps.cfuser = syscp
password = MYSQL_PASSWORD
dbname = syscp
table = mail_users
select_field = uid
where_field = email
hosts = 127.0.0.1/etc/postfix/mysql-virtual_gid_maps.cfuser = syscp
password = MYSQL_PASSWORD
dbname = syscp
table = mail_users
select_field = gid
where_field = email
hosts = 127.0.0.1Let us now configure
main.cf. You will notice the difference to the
original SysCP version. Remark: You should
avoid to set $myhostname and
$mydomain to the IP of the server or a domain
maintained by SysCP. You might experience
difficulties upon mail delivery. It is a good idea to use the name
of the server given from the provider (e.g.
srv-lnx-XY.provider.tld) Whenever
available use that name.
/etc/postfix/main.cf# daemon configuration
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
[...]
# Virtual Mailbox settings
virtual_mailbox_base = /var/kunden/mail/
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf
virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uid_maps.cf
#virtual_uid_maps = static:2000
virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gid_maps.cf
#virtual_gid_maps = static:2000
# use this for virtual delivery / for usage without Maildrop
virtual_transport = virtual
#use this for maildrop-delivery / for usage with Maildrop
#virtual_transport = maildrop
[...]
# TLS Mode for SMTP-service
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls = yes
smtpd_tls_key_file = /path/to/smtpd.pem
smtpd_tls_cert_file = /path/to/smtpd.pem
smtpd_tls_CAFile = /path/to/smtpd.pem
smtpd_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_unknown_client, reject_non_fqdn_hostname
Creating the very important user vmail
Since we do not have system users but virtual users (stored in
the database), the mail system needs a systempartner to "talk to".
The mail system needs a system account under which the system itself
can be executed. Here we go:
syscp ~ # groupadd -g 2000
vmail
syscp ~ # useradd -u 2000 -g vmail
vmail
syscp ~ # mkdir -p
/var/kunden/mail/
syscp ~ # chown -R vmail:vmail
/var/kunden/mail/
Note: The system user
vmail will have it's home directory set to the
SysCP mail directory. Following the standard
installation we have this directory:
/var/kunden/mail.
SASL
SASL is easy to handle. It is used by postfix as an interface
to MySQL by the time SMPT-Auth is needed. There is just one
configuration file to create:
/etc/postfix/sasl/smtpd.confpwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: localhost
sql_user: syscp
sql_passwd: MYSQL_PASSWORD
sql_database: syscp
sql_select: select password from mail_users where email='%u@%r'
Courier POP / IMAP
Again, ATTENTION to avoid whitespaces at the end of the file.
Also courier is extremely sensitive for this kind of type errors.
Below you find the configfiles for courier-pop and
courier-imap.
/etc/courier/authdaemonrc[...]
authmodulelist="authmysql"
[...]Courier daemons need to be instructed to have permission
to start.
/etc/courier/imapd[...]
##NAME: IMAPDSTART:0
#
# IMAPDSTART is not used directly. Rather, this is a convenient flag to
# be read by your system startup script in /etc/rc.d, like this:
#
# . ${sysconfdir}/imapd
#
# case x$IMAPDSTART in
# x[yY]*)
# /usr/lib/courier/imapd.rc start
# ;;
# esac
#
# The default setting is going to be NO, so you'll have to manually flip
# it to yes.
IMAPDSTART=YES/etc/courier/pop3d[...]
##NAME: POP3DSTART:0
#
# POP3DSTART is not referenced anywhere in the standard Courier programs
# or scripts. Rather, this is a convenient flag to be read by your system
# startup script in /etc/rc.d, like this:
#
# . /etc/courier/pop3d
# case x$POP3DSTART in
# x[yY]*)
# /usr/lib/courier/pop3d.rc start
# ;;
# esac
#
# The default setting is going to be NO, until Courier is shipped by default
# with enough platforms so that people get annoyed with having to flip it to
# YES every time.
POP3DSTART=YES/etc/courier/authmysqlrc
(Configfiles -> Debian Sarge -> Courier) is used by the
authdaemon to get access to the MySQL database.
Are no errors present, you have your mail system and the
complete SysCP installation ready to
use.
The last words
Personal Remarks
Finally! SysCP is installed and fully
functional. At this point I wish you much fun with your server and
SysCP. The huge amount of feedback that I
received was quite unexpected. To be honest, it is exactly that point
that made me going, especially critical comments. It also proved the
wide usage of this document. No doubt that I am still encouraged to
extend, maintain and improve this HowTo. I would like to thank the whole
SysCP-community for suggestions, bugfixes and
requests. Most suggestions were added to this document.
Credits
This HowTo was originally written by Philipp Haefelfinger.
His "Thanks a lot" goes to some persons:
Ron Brand for joining many times into discussions, and the
English translation of this HowTo.
Martin Burchert for countless assistance on many
topics.
This HowTo was rearranged and compiled in September /
November 2006 by Florian Aders and Ron Brand.
Disclaimer
This HowTo was written to the best of my knowledge. Although it
will be maintained carefully, the author cannot guarantee a 100% error
free work. Use it at your own risc. The author can not be held
responsible for damage on hard/software due to the usage of this
document. Feel free to distribute this HowTo as long as the Credits and
Disclaimer will remain untouched.