Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:mail_c6:web-cyradm [08.06.2012 12:22. ]
django [Verbindungstest]
centos:mail_c6:web-cyradm [20.04.2018 10:44. ] (aktuell)
Zeile 1: Zeile 1:
 +====== Administration des Cyrus IMAP-Servers (WEB-GUI) ======
 +{{:​centos:​mail_c6:​web-cyradm.png?​nolink&​375|Web-cyradm Logo}}
 +Alternativ zum Administration auf der Konsole mit Unterstützung von [[centos:​mail_c6:​cyradm|cyradm]] gibt es natürlich eine **WEB-GUI** auf die man bei Bedarf zurückgreifen kann. Mit diese möglichen Alternative zu **cyradm** möchten wir uns nun eingehender mit der Applikation [[http://​www.web-cyradm.org/​|Web-cyradm]] befassen.
 +
 +===== vorbereitende Installation ===== 
 +==== PHP-Paketabhängigkeiten ====
 +Für den Einsatz von **Web-cyradm** gilt es nun als erstes, die notwendigen PHP-Erweiterungen zu installieren:​
 +  * **php-mysql**
 +  * **php-pear**
 +  * **php-pear-db**
 +
 +Falls noch nicht bei der Installation unseres Web-Servers geschehen, installieren wir nun noch die oben genannten RPM-Pakete mit Hilfe von **yum**
 +   # yum install php-mysql php-pear php-pear-db -y
 +
 +==== Download ====
 +Von der [[http://​usr/​local/​src/​packages/​www.web-cyradm.org/​download.html|Projektseite]] laden wir uns die aktuelle Version [[http://​www.web-cyradm.org/​web-cyradm-svn-0.5.5.tar.gz|web-cyradm-svn-0.5.5.tar.gz]] herunter.
 +
 +Für den Download legen wir uns erst einmal unser bereits bekanntes Zielverzeichnis //​**/​usr/​local/​src/​packages**//​ an.
 +   # mkdir /​usr/​local/​src/​packages
 +
 +   # cd /​usr/​local/​src/​packages/​
 +
 +Anschließend holen wir uns das **tar.gz**-Archiv mit Hilfe von **wget** auf unseren Server. (<​del>​ # wget http://​www.web-cyradm.org/​web-cyradm-svn-0.5.5.tar.gz</​del>​
 +   # wget http://​repository.nausch.org/​public/​web-cyradm-svn-0.5.5.tar.gz
 +
 +==== Installation ====
 +Im nächsten Schritt machen wir uns nun an die Installation. ​
 +  - Als erstes entpacken wir das zuvor heruntergeladene Programmarchiv.<​code>​ # tar xvfz web-cyradm-svn-0.5.5.tar.gz</​code>​
 +  - Anschließend passen wir die User- und Gruppenberechtigungen an. <​code>​ # chown apache:​apache web-cyradm-svn-0.5.5 -R</​code>​
 +  - Abschließend verschieben wir noch das Archiv an Ort und Stelle, an dem es später unser Apache-Webserver abholen wird. <​code>​ # mv /​usr/​local/​src/​packages/​web-cyradm-svn-0.5.5 /​var/​www/​web-cyradm/</​code>​
 +
 +===== Konfiguration =====
 +==== Apache vHOST ====
 +Damit unser Apache-Webserver die Web-GUI auch anzeigen kann, erweitern wir nun unsere vHost-Konfiguration des Web-Servers. <​code>​ # vim /​etc/​httpd/​conf.d/​vhosts.conf</​code>​ <code apache>#
 +# webcyradm.nausch.org
 +#
 +<​VirtualHost *:80>
 +        ServerAdmin webmaster@nausch.org
 +        ServerName web-cyradm.nausch.org
 +        ServerAlias www.web-cyradm.nausch.org
 +        ServerPath /
 +        DocumentRoot "/​var/​www/​web-cyradm"​
 +        <​Directory "/​var/​www/​web-cyradm">​
 +                AllowOverride AuthConfig
 +                Order allow,deny
 +                Allow from all
 +        </​Directory>​
 +        DirectoryIndex index.php
 +        ErrorLog logs/​web-cyradm_error.log
 +        CustomLog logs/​web-cyradm_access.log combined
 +</​VirtualHost>​ </​code>​
 +==== PHP-Konfigurationsdatei ====
 +Die im Installationsarchiv mitgelieferte Musterkonfigurationsdatei kopieren wir einmal. ​
 +   # cp /​var/​www/​web-cyradm/​config/​conf.php.dist /​var/​www/​web-cyradm/​config/​conf.php -a
 +
 +Anschließend passen wir diese Konfigurationsdatei //​**/​var/​www/​web-cyradm/​config/​conf.php**//​ unserer Systemumgebung an.
 +   # vim /​var/​www/​web-cyradm/​config/​conf.php
 +<file php /​var/​www/​web-cyradm/​config/​conf.php>​ <?php
 +
 +########################################################################################​
 +#                                                                                       
 +#             This is web-cyradm Version 0.5.4 CVS                                      ​
 +#                                                                                       
 +#                                                                                       
 +#########################################################################################​
 +
 +// Set Default language
 +
 +# Django ​ : 2012-02-21
 +# default : $DEFAULTLANG = "​en_EN";​
 +$DEFAULTLANG = "​de_DE";​
 +
 +# The Cyrus login stuff
 +$CYRUS = array(
 +# Django ​ : 2012-02-21
 +# default : '​HOST' ​     => '​localhost',​
 +        '​HOST'​ => '​imap.dmz.nausch.org',​
 +        '​PORT' ​ => 143,
 +# Django ​ : 2012-02-21
 +# default : '​ADMIN'​ => '​cyrus',​
 +        '​ADMIN'​ => '​cyradm',​
 +# Django ​ : 2012-02-21
 +# default : '​PASS' ​ => '​secret'​
 +        '​PASS' ​ => '​Michi-is-a-Geek!'​
 +);
 +
 +/* DB_TYPE
 +
 + ​Possible Values are:
 + o mysql
 + o pgsql
 +
 + To operate a mailsystem with postgreSQL you will need a patch for
 + ​Postfix.
 + 
 + Other Databases need to be supported by PAM and postfix
 +*/
 +
 +$DB = array(
 +        '​TYPE' ​ => '​mysql',​
 +# Django ​ : 2012-02-21
 +# default : '​USER' ​ => '​mail',​
 +        '​USER' ​ => '​web-cyradministrator',​
 +# Django ​ : 2012-02-21
 +# default : '​PASS' ​ => '​secret',​
 +        '​PASS' ​ => '​Klausi-is-a-Geek!',​
 +# Django ​ : 2012-02.21
 +# default : '​PROTO'​ => '​unix', ​     // set to "​tcp"​ for TCP/IP
 +        '​PROTO'​ => '​tcp',​
 +# Django ​ : 2012-02-21
 +# default : '​HOST' ​ => '​localhost',​
 +        '​HOST' ​ => '​mysql.dmz.nausch.org',​
 +        '​NAME' ​ => '​mail'​
 +);
 +
 +$DB['​DSN'​] = sprintf('​%s://​%s:​%s@%s+%s/​%s', ​    ​$DB['​TYPE'​],​ $DB['​USER'​],​
 +                                                $DB['​PASS'​],​ $DB['​PROTO'​],​
 +                                                $DB['​HOST'​],​ $DB['​NAME'​]);​
 +
 +# Where should web-cyradm write its log to?
 +$LOG_DIR = "/​var/​log/​web-cyradm/";​
 +
 +/* Log level
 +Possible values are (from quiet to verbose):
 + ​ERR ​   - only internal errors
 + ​WARN ​  - failed login, security violation
 + ​INFO ​  - all login and logout
 + ​DEBUG ​ - all possible information
 +*/
 +$LOG_LEVEL = "​INFO";​
 +
 +# The default timeout in seconds for a session, after that you have to login again
 +$SESS_TIMEOUT = 1000;
 +
 +# The default quota sets the default quota for new accounts
 +$DEFAULT_QUOTA = 20000;
 +
 +# The default domain quota sets the quota for new domains
 +# 0 = No quota
 +$DEFAULT_DOMAIN_QUOTA = 0;
 +
 +# On what quota level mark accounts on accounts list (in %)
 +$QUOTA_WARN_LEVEL = 90;
 +
 +# Defines if passwords are encrypted or not.
 +# Valid Values:
 +#  - plain 0 No encription is used
 +#  - crypt 1 (shadow compatible encription)
 +#  - mysql 2 (MySQL PASSWORD function)
 +#  - md5 3 (MD5 digest)
 +$CRYPT = "​crypt";​
 +
 +# web-cyradm is compatible with cyrus-imapd-2.0.16 (and earlier?)
 +# however, if you are using 2.1.x and wish to use email addresses ​
 +# with .'s in them such as '​john.doe@mydomain.com'​ you can set this
 +# option DOMAIN_AS_PREFIX to '​1'​. ​ NOTE: you also have to add this
 +# line to your imapd.conf file:
 +#### imapd.conf: ####
 +# unixhierarchysep:​ yes
 +
 +####
 +# Django : 2012-02-21 ​
 +# default : $DOMAIN_AS_PREFIX = 0;
 +$DOMAIN_AS_PREFIX = 1;
 +
 +# EXPERIMENTAL
 +# If you are using cyrus imap 2.2.x and wish to use usernames like
 +# email addresses you can set option DOMAIN_AS_PREFIX to '​1'​ and
 +# FQUN to '​1'​. NOTE: you also have to add this lines to your
 +# imapd.conf file:
 +#### imapd.conf: ####
 +# unixhierarchysep:​ yes
 +# virtdomains:​ yes
 +####
 +$FQUN = 0;
 +
 +# At the moment, web-cyradm supports two methods of password change:
 +# - through sql
 +# - poppassd
 +# sql is the default
 +$PASSWORD_CHANGE_METHOD = "​sql"; ​
 +
 +# Turn up error reporting level. This overrides settings in your php.ini
 +#
 +# E_ALL             - All errors and warnings
 +# E_ERROR ​          - fatal run-time errors
 +# E_WARNING ​        - run-time warnings (non-fatal errors)
 +# E_PARSE ​          - compile-time parse errors
 +# E_NOTICE ​         - run-time notices (these are warnings which often result
 +#                     from a bug in your code, but it's possible that it was
 +#                     ​intentional (e.g., using an uninitialized variable and
 +#                     ​relying on the fact it's automatically initialized to an
 +#                     empty string)
 +# E_CORE_ERROR ​     - fatal errors that occur during PHP's initial startup
 +# E_CORE_WARNING ​   - warnings (non-fatal errors) that occur during PHP's
 +#                     ​initial startup
 +# E_COMPILE_ERROR ​  - fatal compile-time errors
 +# E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
 +# E_USER_ERROR ​     - user-generated error message
 +# E_USER_WARNING ​   - user-generated warning message
 +# E_USER_NOTICE ​    - user-generated notice message
 +
 +error_reporting(E_ERROR);​
 +
 +$VERSION="​0.5.5-Beta1";​
 +
 +# Define reserved Emailadresses (Separated by comma):
 +$RESERVED="​postmaster,​root";​
 +
 +$TEMPLATE[0]="​default";​
 +$TEMPLATE[1]="​green";​
 +</​file> ​
 +Zum Schluß passen wir dann noch aus Sicherheitsgründen die Dateiberechtigung unserer Konfigurationsdatei an. 
 +   # chmod 640 /​var/​www/​web-cyradm/​config/​conf.php
 +==== Logverzeichnis und -datei anlegen ====
 +Wie in der mitgelieferten Konfigurationsdokumentation //​**/​var/​www/​web-cyradm/​doc/​html/​web-cyradm-config.html**//​ vermerkt legen wir nun noch das nötige Logverzeichnis und die Log-datei initial an.
 +   # mkdir /​var/​log/​web-cyradm
 +
 +   # touch /​var/​log/​web-cyradm/​web-cyradm-login.log
 +
 +   # chown apache:​apache /​var/​log/​web-cyradm/​web-cyradm-login.log
 +
 +===== Datenbankanbindung =====
 +Bei der zuvor durchgeführten Konfiguration der PHP-Anwendung hatten wir bereits Daten für unsere Datenbankanbindung definiert und eingegeben. Nun gilt es im nächsten Schritt den User wie auch die Datenbanken anzulegen, was uns auch dank der mitgelieferten Scripte im Verzeichnis //​**/​var/​www/​web-cyradm/​scripts/​**//​ recht leicht fallen sollte. ​
 +==== Definition Datenbankuser ====
 +Zum Anlegen unseres Datenbankusers bearbeiten wir nun die mitgelieferte Musterdatei. ​
 +   # vim /​var/​www/​web-cyradm/​scripts/​insertuser_mysql.sql
 +
 +<file sql /​var/​www/​web-cyradm/​scripts/​insertuser_mysql.sql>​use mysql;
 +INSERT INTO user (Host, User, Password, Select_priv,​ Insert_priv,​ Update_priv,​ Delete_priv,​ Create_priv,​ Drop_priv, Reload_priv,​ Shutdown_priv,​ Process_priv,​ File_priv, Grant_priv, References_priv,​ Index_priv, Alter_priv) VALUES ('​vml000090.dmz.nausch.org',​ '​web-cyradmin',​ PASSWORD('​Klausi-is-a-Geek!'​),​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N'​);​
 +
 +INSERT INTO user (Host, User, Password, Select_priv,​ Insert_priv,​ Update_priv,​ Delete_priv,​ Create_priv,​ Drop_priv, Reload_priv,​ Shutdown_priv,​ Process_priv,​ File_priv, Grant_priv, References_priv,​ Index_priv, Alter_priv) VALUES ('​10.0.0.90',​ '​web-cyradministrator',​ PASSWORD('​Klausi-is-a-Geek!'​),​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N',​ '​N'​);​
 +
 +INSERT INTO db (Host, Db, User, Select_priv,​ Insert_priv,​ Update_priv,​ Delete_priv,​ Create_priv,​ Drop_priv, Grant_priv, References_priv,​ Index_priv, Alter_priv) VALUES ('​vml000090.dmz.nausch.org',​ '​mail',​ '​web-cyradministrator',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ 'Y ');
 +
 +INSERT INTO db (Host, Db, User, Select_priv,​ Insert_priv,​ Update_priv,​ Delete_priv,​ Create_priv,​ Drop_priv, Grant_priv, References_priv,​ Index_priv, Alter_priv) VALUES ('​10.0.0.90',​ '​mail',​ '​web-cyradministrator',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ '​Y',​ 'Y ');
 +
 +flush privileges;
 +
 +create database mail;
 +</​file>​
 +
 +Anschließend passen wir noch die Dateiberechtigungen dieser Konfigurationsdatei an. 
 +   # chmod 600 /​var/​www/​web-cyradm/​scripts/​insertuser_mysql.sql
 +
 +Zum Importieren der Daten aus der vorgenannten Konfigurationsdatei in unseren mySQL-Server nutzen wir nachfolgenden Aufruf.
 +   # /​usr/​bin/​mysql -h mysql.dmz.nausch.org -u root -p < /​var/​www/​web-cyradm/​scripts/​insertuser_mysql.sql
 +
 +==== Definition Datenbanktabellen ====
 +Auch zum Anlegen der Datenbanktabellen greifen wir auf die "​Dienste"​ der mitgelieferten Musterdatei zurück. ​
 +   # vim /​var/​www/​web-cyradm/​scripts/​create_mysql.sql
 +
 +<file sql /​var/​www/​web-cyradm/​scripts/​create_mysql.sql>#​ version 2.2.6
 +# http://​phpwizard.net/​phpMyAdmin/​
 +# http://​www.phpmyadmin.net/​ (download page)
 +#
 +# Host: localhost
 +# Generation Time: Nov 04, 2002 at 01:44 AM
 +# Server version: 3.23.52
 +# PHP Version: 4.2.3
 +# Database : `mail`
 +# --------------------------------------------------------
 +
 +# Django : 2012-02-21
 +use mail;
 +
 +#
 +# Table structure for table `accountuser`
 +#
 +
 +CREATE TABLE accountuser (
 +  username varchar(255) binary NOT NULL default '',​
 +  password varchar(50) binary NOT NULL default '',​
 +  prefix varchar(50) NOT NULL default '',​
 +  domain_name varchar(255) NOT NULL default '',​
 +  imap int(10) NOT NULL default '​1',​
 +  pop int(10) NOT NULL default '​1',​
 +  sieve int(10) NOT NULL default '​1',​
 +  smtpauth int(10) NOT NULL default '​1',​
 +  UNIQUE KEY username (username)
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `adminuser`
 +#
 +
 +CREATE TABLE adminuser (
 +  username varchar(50) binary NOT NULL default '',​
 +  password varchar(50) binary NOT NULL default '',​
 +  type int(11) NOT NULL default '​0',​
 +  SID varchar(255) NOT NULL default '',​
 +  home varchar(255) NOT NULL default '',​
 +  PRIMARY KEY  (username)
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `settings`
 +#
 +
 +CREATE TABLE settings (
 +  `username` varchar(50) binary NOT NULL default '',​
 +  `style` varchar(50) NOT NULL default '​default',​
 +  `maxdisplay` int(4) NOT NULL default '​15',​
 +  `warnlevel` int(3) NOT NULL default '​90',​
 +  PRIMARY KEY  (username)
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `alias`
 +#
 +
 +CREATE TABLE alias (
 +  alias varchar(255) NOT NULL default '',​
 +  dest longtext,
 +  username varchar(50) NOT NULL default '',​
 +  status int(11) NOT NULL default '​1',​
 +  PRIMARY KEY  (alias)
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `domain`
 +#
 +
 +CREATE TABLE domain (
 +  domain_name varchar(255) NOT NULL default '',​
 +  prefix varchar(50) NOT NULL default '',​
 +  maxaccounts int(11) NOT NULL default '​20',​
 +  quota int(10) NOT NULL default '​20000',​
 +  domainquota int(10) NOT NULL default '​0',​
 +  transport varchar(255) NOT NULL default '​cyrus',​
 +  freenames enum('​YES','​NO'​) NOT NULL default '​NO',​
 +  freeaddress enum('​YES','​NO'​) NOT NULL default '​NO',​
 +  folders varchar(255) NOT NULL default '',​
 +  PRIMARY KEY  (domain_name),​
 +  UNIQUE KEY prefix (prefix)
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `domainadmin`
 +#
 +
 +CREATE TABLE domainadmin (
 +  domain_name varchar(255) NOT NULL default '',​
 +  adminuser varchar(255) NOT NULL default ''​
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `search`
 +#
 +
 +CREATE TABLE search (
 +  search_id varchar(255) NOT NULL default '',​
 +  search_sql text NOT NULL,
 +  perpage int(11) NOT NULL default '​0',​
 +  timestamp timestamp(14) NOT NULL,
 +  PRIMARY KEY  (search_id),​
 +  KEY search_id (search_id)
 +) TYPE=MyISAM;​
 +# --------------------------------------------------------
 +
 +#
 +# Table structure for table `virtual`
 +#
 +
 +CREATE TABLE virtual (
 +  alias varchar(255) NOT NULL default '',​
 +  dest longtext,
 +  username varchar(50) NOT NULL default '',​
 +  status int(11) NOT NULL default '​1',​
 +  KEY alias (alias)
 +) TYPE=MyISAM;​
 +
 +CREATE TABLE log (
 +  id int(11) NOT NULL auto_increment,​
 +  msg text NOT NULL,
 +  user varchar(255) NOT NULL default '',​
 +  host varchar(255) NOT NULL default '',​
 +  time datetime NOT NULL default '​2000-00-00 00:​00:​00',​
 +  pid varchar(255) NOT NULL default '',​
 +  PRIMARY KEY  (id)
 +) TYPE=MyISAM;​
 +
 +# Django ​ : 2012-02-21
 +# default : INSERT INTO adminuser (username, password) VALUES ('​admin',​ ENCRYPT('​test'​));​
 +INSERT INTO adminuser (username, password) VALUES ('​admin',​ ENCRYPT('​mein_supergeheimes_Admin-Passwort'​));​
 +INSERT INTO domainadmin (domain_name,​adminuser) VALUES ('​*','​admin'​);​
 +# Django ​ : 2012-02-21
 +# default : INSERT INTO accountuser (username, password) VALUES ('​cyrus',​ ENCRYPT('​secret'​));​
 +INSERT INTO accountuser (username, password) VALUES ('​cyrus',​ ENCRYPT('​account-user-passwort'​));​
 +INSERT INTO `settings` ( `username` , `style` , `maxdisplay` , `warnlevel` ) VALUES ( '​admin',​ '​default',​ '​15',​ '​90'​);​
 +
 +ALTER TABLE `log` ADD INDEX `idx_log_user` ( `user` ); 
 +</​file>​
 +
 +Auch hier legen wir die nötigen Datenbanktabellen und Nutzer aus der Konfigurationsdatei in unserem Datenbankserver mit Hilfe des folgenden Befehlsaufrufes an. 
 +   # /​usr/​bin/​mysql -h mysql.dmz.nausch.org -u web-cyradministrator -p < /​var/​www/​web-cyradm/​scripts/​create_mysql.sql
 +===== Verbindungstest =====
 +Nun können wir eine erste Verbindung zu unserem Administrations-vHost unseres Webservers aufbauen.
 +   $ firefox web-cyradm.nausch.org ​
 +
 +{{ :​centos:​mail_c6:​web-cyradm_2.png?​nolink&​600 |Photo: Bildschirmhardcopy von web-cyradm}}
 +
 +===== Fazit =====
 +Dank nachfolgender Konfigurationsoptionen in der ** /​etc/​imapd.conf ** können wir eigentlich auf eine zusätzliche GUI verzichten. ​
 +<code bash># Ein Wert größer als Null setzt einen Quo in kByte. Ein Wert der nicht 0 ist, 
 +# erlaubt dem Benutzer das anlegen seiner eigenen INBOX
 +autocreatequota:​ 2048000
 +
 +# Sobald 90% der Quota erreicht ist, gibt der Server Warnmeldungen aus
 +quotawarn: 90
 +
 +# Postfach wird angelegt, wenn per lmtpd eine Nachricht angeliefert wird,
 +# für die noch kein Inbox besteht
 +createonpost:​ no
 +
 +# Loggt sich ein User neu an, oder es wird eine Nachricht per lmtpd 
 +# angeliefert,​ für das noch kein Account besteht, so wird dieser automatisch ​
 +# mit den definierten Ordnern angelegt
 +###​autocreateinboxfolders:​ inbox|achive
 +autocreateinboxfolders:​ Archives | Drafts | Sent | Trash
 +
 +# Loggt sich ein User neu an, oder es wird eine Nachricht per lmtpd 
 +# angeliefert,​ für das noch kein Account besteht, so werden automatisch ​
 +# folgende Ordner abboniert
 +autosubscribeinboxfolders:​ Archives | Drafts | Sent | Trash
 +</​code>​
 +Haben wir einen neuen Nutzer in unserem zentralen LDAP-Verzeichnis angelegt und der Nutzer meldet sich das erste mal am IMAP-Server an, wird automatisch sein Nutzerkonto angelegt, die Quota vergeben, sowie die Defaut-Ordner angelegt und abboniert.
 +====== Links ======
 +  * **[[centos:​mail_c6:​start|Zurück zum Kapitel >>​Mailserverinstallation unter CentOS 6<<​]]**
 +  * **[[wiki:​start|Zurück zu >>​Projekte und Themenkapitel<<​]]**
 +  * **[[http://​dokuwiki.nausch.org/​doku.php/​|Zurück zur Startseite]]**
 +
  
  • centos/mail_c6/web-cyradm.txt
  • Zuletzt geändert: 20.04.2018 10:44.
  • (Externe Bearbeitung)