Roundcube telepítése (Jessie)

Innen: AdminWiki

Ebben a leírásban a Roundcube webmail kliens alkalmazás 1.x verzióját telepítjük házirend szerint konfigurált Debian Jessie LAMP (Apache 2.4.x, wsm2 2.6+, MySQL 5.5.x, PHP 5.6.x) webkiszolgálóra.

Jelen leírásban elsősorban nem önálló webszolgáltatásként, hanem az ownCloud fájlszinkronizáló és felhőszolgáltatás beépülő moduljaként, illetve VExim alapú levelező kiszolgáló webmail klienseként szeretnénk használni a Roundcube-ot.

Házirend

Elméleti szakasz, nyugodtan átléphető, amennyiben csak telepítési checklistként használjuk ezt a leírást.

A Roundcube-ot úgy tervezték, hogy önálló webszolgáltatásként, a belépő képernyőn ad-hoc megadott IMAP(s) szerver URL, felhasználónév és jelszó adatokkal gyakorlatilag bármilyen IMAP(s) szerverhez webes kliensként képes legyen kapcsolódni. Az authentikációt a megadott IMAP szolgáltatás végzi, sikeres belépés esetén a Roundcube alapértelmezésben automatikusan létrehoz egy Roundcube-on belüli felhasználói profilt (login name és mail host együttesen azonosítják), amiben (titkosított) authentikációs adatokat, napló adatokat és a levelező kliens beállításait tárolja (opcionálisan email cache is lehetséges). Ezzel a viselkedéssel akár nyilvános kioszkban, univerzális levelező kliensként is üzemelhetne. Ezt a felhasználást ebben a leírásban csak érintőlegesen tárgyaljuk, viszont rögzítünk néhány, a Roundcube-nak mint általános webalkalmazásnak üzemeltetésére vonatkozó (természetesen vitatható!) elvet:

  • egy webszerver gépen tetszőleges számú Roundcube példányt futtathatunk, amelyek egymástól különböző virtualhostokban helyezkedhetnek el;
  • önálló webalkalmazásként a Roundcube példányt egy-egy virtualhost gyökerébe (nem alkönyvtárba) szeretnénk telepíteni;
  • a Roundcube saját adatainak tárolására minden példány önálló, dedikált MySQL adatbázist használjon;
  • a példányok egy (symlinkelt) közös, frissíthető kódkészletet használjanak, amely csak olvasható tárterületen (/usr/local/share) legyen;
  • a közös kódkészlet frissítése manuálisan történik; azt, minden frissítés alkalmával, szükség szerint patch-elni fogjuk;

TODO!

Roundcube - VExim - ownCloud integráció vázlata

A Roundcube talán jellemzőbb felhasználása, amikor egy konkrét levelező megoldáshoz (jelen leírásban egy VExim alapú levelező szolgáltatáshoz) vagy egy felhőszolgáltatáshoz (jelen leírásban egy ownCloud szolgáltatáshoz) nyújt webmail funkcionalitást. Az alábbi vázlatrajz egy ilyen integrációt vázol fel.


RoundCube-VExim-ownCloud integráció vázlatrajza


A fenti elrendezésben a Roundcube egy szokványos, asztali levelező kliensprogrammal megegyező módon, imap(s) és smtp(s) kliensként kapcsolódik a levelező szerverhez (az asztali kliensekkel szemben megszorítás, hogy a Roundcube egy bejelentkezéssel csak egy imap(s) postafiókhoz képes csatlakozni), így elvileg bárhol - tetszőleges webkiszolgálón - futtatható lenne. Nincs elvi akadálya annak, hogy több, különböző Roundcube példánnyal csatlakozzunk egy levelező kiszolgálóhoz (mint ahogy egy-egy postafiók gyakran több asztali gépen, mobil eszközön is fel van csatolva) - tarthatnánk pl. egy Roundcube példányt a levelező szerveren, egy másikat az ownCloud kiszolgálón (amennyiben ezek különböző szervergépek). Ilyenkor azonban a különböző példányok beállításait (pl. az összegyűjtött email címeket, küldő email aliasokat, stb.) érdemes lenne szinkronizáltatni, hogy egy felhasználó bármelyik példányba belépve azonos környezetben találja magát. A jelen leírásban ezt a problémát úgy kerüljük meg, hogy csak egy webmail klienst telepítünk.

A webmail klienst telepíthetjük magára a levelező szerverre (amely a VExim miatt egyben webszerver is), vagy az ownCloud szerverre. Megoldásunkban a Roundcube funkcionalitását kiegészítjük egy, a postafiók ön-adminisztrációjára képes pluginnal, amely natív adatbázis-kapcsolatot igényel a VExim adatbázisához, így az első megoldást választjuk, és a levelező szerverre telepített Roundcube-ot külső webalkalmazásként integráljuk az ownCloud webfelületébe. A Roundcube lehetőségeit úgy korlátozzuk, hogy csak azok használhassák a vonatkozó Roundcube példányt, akiknek a felsorolt szolgáltatásokhoz érvényes hozzáférésük van.

A jelen leírásban a Roundcube-ot
  • a közös levélküldő- és levélfogadó szerverre, az ahhoz tartozó webmail megoldásként, egy példányban telepítjük;
  • úgy állítjuk be, hogy csak ehhez a levelező szerverhez kapcsolódjon;
  • egy bejelentkezéssel csak egy darab (a szóban forgó szerveren hostolt) postafiókot engedünk kezelni;
  • a webmail szolgáltatást csak titkosítva (https kapcsolaton) prezentáljuk;
  • engedjük, hogy előre megadott külső URL-ekről meghívva, a Roundcube iframe-ben megjelenjen (ownCloud integráció).

TODO!

Előfeltételek

Akár önálló webalkalmazásként, akár integrációban telepítve, a Roundcube működéséhez legalább az alábbiakra szükség van:

apt-get install php5-intl php5-json php5-mcrypt # +: sok függőség
  • A PHP globális beállításai között az alábbi függvények engedélyezése (TODO!):
-rw-r--r-- root root /etc/php5/apache2/conf.d/99-wsm2-php5.ini

[...]
disable_functions = [...] // Remove the enabled functions listed below from here!
[...]
; The 'enable' directives below are invalid, leave them commented!
; You may use only as a reminder, about policy changes above.
;enable_functions = ""
[...]
  • A roundcube-addons használatához az alábbiak telepítése:
apt-get install diffutils patch # nincs függősége, nem hoz sallangokat

Telepítés

Ebben a szakaszban a később létrehozandó Roundcube példányok közös kódkészletét telepítjük.

A Roundcube szerepel ugyan a Debian terjesztésben, de a csomagolt verzió jelentősen (akár több nagy verziószámmal is) elmarad az aktuálistól, valamint a .deb telepítés nem igazán támogatja a szervergépen több párhuzamos példány használatát, így a házirendünk kívánalmainak kevéssé felel meg. Ezért a Roundcube-ot tarball-ból telepítjük. Ellenőrizzük a legfrissebb stabil verzió verziószámát, és a /usr írhatóan újracsatolása után csomagoljuk ki a /usr/local/share/roundcube-versions/roundcube-X.Y.Z könyvtárba a házirend szerinti jogosultságok beállításával, pl. az alábbi parancsokkal:

mount -o remount,rw /usr  # Írni kell ide
RC_VERSION="X.Y.Z"        # Töltsük ki az aktuális verzióval!

# Közös kódkészlet könyvtárának elkészítése
mkdir /usr/local/share/roundcube-versions; chown root:staff /usr/local/share/roundcube-versions
mkdir /usr/local/share/roundcube-versions/roundcube-$RC_VERSION

# Letöltés, kicsomagolás
cd /root/tmp
wget "https://github.com/roundcube/roundcubemail/releases/download/$RC_VERSION/roundcubemail-$RC_VERSION-complete.tar.gz" -O roundcubemail-$RC_VERSION.tar.gz
tar xzvf roundcubemail-$RC_VERSION.tar.gz -C /usr/local/share/roundcube-versions/roundcube-$RC_VERSION --strip-components=1

# Jogosultságok beállítása
chown -R root:www-data /usr/local/share/roundcube-versions/
find /usr/local/share/roundcube-versions/ -type d -exec chmod 750 {} \;
find /usr/local/share/roundcube-versions/ -type f -exec chmod 640 {} \;

# Symlink az aktuális verzióra
ln -s roundcube-versions/roundcube-$RC_VERSION /usr/local/share/roundcube
chown -h root:www-data /usr/local/share/roundcube

A roundcube-addons telepítése

A (saját készítésű) roundcube-addons csomag kisebb kódmódosításokat (foltokat, patcheket) és opcionálisan felhasználható beépülő modulokat tartalmaz. Töltsük le és (a /usr partíció írhatóra csatolásának ellenőrzése után) könyvtárhelyesen csomagoljuk ki roundcube-addons tarball legfrissebb változatát!

Core patchelése

Bár a core kódkészlet megváltoztatásától általában jobb tartózkodni, a Roundcube, jelenlegi állapotában, a házirendünkkel nem teljesen kompatibilis és ezt csak a core foltozásával tudjuk áthidalni (TODO!). A roundcube-addons minden Roundcube verzióhoz tartalmaz egy core patch állományt a /usr/local/share/roundcube-addons/patch könyvtárban, amely lehetővé teszi a házirendünk szerinti symlinkelt környezet használatát. Válasszuk ki a telepített Roundcube verziószámának megfelelőt(!), és alkalmazzuk:

patch -p0 -d /usr/local/share/roundcube </usr/local/share/roundcube-addons/patch/roundcube_X.Y.Z-roundcube-addons-YYYYMMDD.patch

Amennyiben lennének felülírandó binárisok, ezeket is csomagoljuk ki:

tar xzvf /usr/local/share/roundcube-addons/patch/roundcube_X.Y.Z-roundcube-addons-YYYYMMDD.binaries.tgz -C /usr/local/share/roundcube-versions/roundcube-$RC_VERSION

Siker esetén állítsuk helyre az esetleg elromlott jogosultságokat:

chown -R root:www-data /usr/local/share/roundcube/
find /usr/local/share/roundcube/ -type d -exec chmod 750 {} \;
find /usr/local/share/roundcube/ -type f -exec chmod 640 {} \;

3rd party pluginok

A Roundcube alap funkcionalitása beépülő modulokkal (pluginokkal) sokféleképpen bővíthető. A roundcube-addons csomag (a /usr/local/share/roundcube-addons/plugins könyvtárban) tartalmaz néhány előtelepített 3rd party plugint, így ezek minden, később létrehozott Roundcube példányban automatikusan rendelkezésre állnak majd. Ha a csomagban érkező példányokat használjuk, ezekkel a pluginokkal most nincs teendő; a virtualhostok kialakításakor a használni kívánt plugin(oka)t innen fogjuk linkelni.

A roundcube-addons 3rd party pluginjai jelenleg:

  • Automatic Addressbook - (GitHub) - a Roundcube használata során összegyűjtött címek kezelése;
  • CardDAV Client - külső címjegyzékek kezelése, szinkronizálása;
  • Iframe External - saját plugin, lehetővé teszi a Roundcube futtatását iframe környezetben, előre megadott domainekről;
  • Thunderbird Labels - (GitHub) - Thunderbird-kompatibilis, színes címkék (Fontos, Munka, stb.) kezelése;
  • VExim Account Admin - saját felhasználói adatok kezelése helyi, VExim alapú levélkiszolgálón.

Megjegyzés: A roundcube-addons csomagban szereplő pluginok némelyike, az eredeti repository-ban szereplőkhöz képest módosított (patchelt). Az alkalmazott foltokat a /usr/local/share/roundcube-addons/patch könyvtár tartalmazza.

A telepítés befejezése

A közös kódkészlet telepítésének befejezéseként csatoljuk újra csak olvashatóan a /usr partíciót:

mount -o remount /usr

A telepített Roundcube-ot itt még nem tudjuk kipróbálni, csak ha a lentiek szerint, legalább egy konkrét példányt is telepítünk.

Roundcube példány készítése

Ez a szakasz az önálló webalkalmazásként, vagy VExim integrációban működő Roundcube példány készítését és beállítását tárgyalja. A Roundcube példány számára szükség lesz egy önálló MySQL adatbázisra és egy alkalmas virtualhostra.

MySQL adatbázis készítése

A Roundcube MySQL adatbázisnak egyetlen, az adatbázisra nézve teljes jogú felhasználója van, akinek neve célszerűen megegyezik a Roundcube adatbázis nevével. A nevet konvencionálisan rc_-vel kezdjük, és az előtag után igyekszünk a virtualhostra, illetve a webszolgáltatásra jellemző nevet választani.

Az adatbázist és a felhasználót a MySQL root hozzáféréssel hozzuk létre.

mysql --defaults-file=/etc/mysql/root.cnf

mysql> CREATE DATABASE rc_INSTANCENAME CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> GRANT ALL PRIVILEGES ON rc_INSTANCENAME.* TO 'rc_INSTANCENAME'@'localhost' IDENTIFIED BY 'PASSWORD';
mysql> FLUSH PRIVILEGES;

ahol a PASSWORD egy megfelelő jelszó. Relatív megjegyezhető, mégis erős jelszó a pwgen segédprogrammal is generálható, pl. a következőképpen:

/usr/bin/pwgen -s -n -c 12 1

Ellenőrizzük, hogy a felhasználó megfelelően létrejött-e:

mysql> SELECT host, user, password FROM mysql.user ORDER BY user;
+-----------+------------------+---------------------------------------------+
| host      | user             | password                                    |
+-----------+------------------+---------------------------------------------+
| localhost | rc_INSTANCENAME  | *73CDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
[...]
+-----------+------------------+---------------------------------------------+

mysql> quit

Ezután próbáljunk a létrehozott felhasználó nevében és jelszavával belépni. Az alábbi parancsokkal ellenőrizhetjük, hogy a felhasználó jogosultságai valóban csak erre az adatbázisra terjednek ki:

mysql -u rc_INSTANCENAME -p
Enter password:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| rc_INSTANCENAME    |
+--------------------+

mysql> quit

Az adatbázis iniciális feltöltéséhez (amelyet jelenleg manuálisan kell elvégezni) a maintainer SQL scriptjét használhatjuk:

cat /usr/local/share/roundcube/SQL/mysql.initial.sql | mysql -u rc_INSTANCENAME -p -D rc_INSTANCENAME

Az adatbázis telepítését követően töröljük le a .mysql_history állományt, mert ebben a jelszó szabad szöveges formában benne van:

rm ~/.mysql_history

Apache virtualhost készítése

Leírásunkban a http://fully.qualified.hostname weboldal közvetlenül a Roundcube példány nyitólapjára mutat. VExim integráció esetén a virtualhost már létezik, önálló telepítés esetén a virtualhostot a szokott módon, a wsm2 segítségével készítjük el; ennek 2.6 vagy későbbi verzióinál, ha van a /etc/ssl/certs-ben elhelyezett, hitelesített webszerver SSL tanúsítványunk, annak fájlnevét (kiterjesztés nélkül) megadhatjuk harmadik paraméterként (ellenkező esetben önaláírt tanúsítvány készül):

wsm2 -cw FULLY.QUALIFIED.HOSTNAME sysadmin@MYDOMAIN certificate_name

A beállítások idejére érdemes a virtualhostot letiltani (így nem kapunk feleslegesen cron, stb. hibaüzeneteket):

a2dissite FULLY.QUALIFIED.HOSTNAME
systemctl reload apache2

A fájlrendszer beállításai

A Roundcube tárterülete a virtualhost alapkönyvtára lesz, ezen belül az esetleges egyedi pluginok és template-ek részére a tárterületet (a plugins és skins könyvtárakat) fizikailag is el kell készíteni, ebbe belinkeljük a közösségi modulokat és sminkeket. A példány egyedi konfigurációs könyvtárát (config) és a webszerver által írható könyvtárakat (logs, temp) szintén el kell készíteni, míg a /usr/local/share/roundcube alatti összes többi tartalmat (a közös kódkészletet) egyszerűen belinkeljük:

cd /var/www/FULLY.QUALIFIED.HOSTNAME
pwd # Biztos, ami biztos.

# bin berendezése
ln -s /usr/local/share/roundcube/bin/* bin

# config berendezése
ln -s /usr/local/share/roundcube/config/* config

# upload átnevezése (data - www-data írhatja)
mv upload data

# download eltávolítása
rmdir download

# installer komponensek belinkelése
ln -s /usr/local/share/roundcube/installer installer
ln -s /usr/local/share/roundcube/SQL SQL

# logs elkészítése (www-data írhatja)
mkdir data/logs; chown webadmin:www-data data/logs; chmod 2770 data/logs;
ln -s ../data/logs log/applog

# plugins berendezése
mkdir plugins; chown webadmin:www-data plugins; chmod 2750 plugins
ln -s /usr/local/share/roundcube-addons/plugins/* plugins/    # Saját modulok, ha vannak
ln -s /usr/local/share/roundcube/plugins/* plugins            # Közösségi modulok

# program belinkelése
ln -s /usr/local/share/roundcube/program program

# skins berendezése
mkdir skins; chown webadmin:www-data skins; chmod 2750 skins
ln -s /usr/local/share/roundcube/skins/* skins

# temp berendezése (www-data írhatja)
mkdir data/temp; chown webadmin:www-data data/temp; chmod 2770 data/temp

# vendor belinkelése
ln -s /usr/local/share/roundcube/vendor vendor

# .htaccess bemásolása (változtatni kellhet)
cp /usr/local/share/roundcube/.htaccess .
chown webadmin:www-data .htaccess; chmod 640 .htaccess

# index.html kiiktatása
mv index.html index.html.bak

# favicon beállítása
ln -s skins/larry/images/favicon.ico favicon.ico

# robots.txt lecserélése
rm robots.txt
ln -s /usr/local/share/roundcube/robots.txt robots.txt

# minden php-t belinkelünk
ln -s /usr/local/share/roundcube/*.php .

# symlinkek tulajdonjogának átruházása (csak szépség)
find . -type l -exec chown -h webadmin:www-data {} \;

Integráció esetén a VExim (már meglévő) könyvtárát hagyjuk változatlanul.

Webszerver beállítások

Módosítsuk a virtualhost (a wsm2 által létrehozott) Apache konfigurációját (integráció esetén a VExim könyvtárára vonatkozó bejegyzések meghagyásával):

  • a teljes virtualhostra vonatkozóan:
    • felvesszük az esetleges ServerAlias-okat;
    • engedélyezzük a PHP futtatását, engedélyezünk 64 MB RAM használatot és hosszabb futásidőt (feltöltések);
    • módosítjuk a PHP open_basedir bejegyzést, hozzátesszük a Roundcube kódkönyvtárait (figyelem: include_path-t nem szabad megadni!);
    • engedélyezzük a PHP file feltöltést, ha az APC telepítve van, a progress bar-t, megadunk egy méretkorlátot és az ideiglenes könyvtárat;
    • engedélyezzük a PHP allow_url_fopen-t;
    • tiltjuk a ModSecurity-t (mindenféle gonoszság várható, amire értelmesen nem tudok szűrni - TODO!);
    • módosítjuk az írható könyvtár nevét (upload -> data) a vonatkozó bejegyzésben;
  • a nem használt (törölt) könyvtárakra vonatkozó bejegyzéseket törölhetjük;
  • a virtualhost ssl konfigurációját az esetleges ServerAlias-ok felvételét kivéve nem kell módosítani.
-rw-r--r-- root root /etc/apache2/sites-available/FULLY.QUALIFIED.HOSTNAME.conf

<VirtualHost *:80>
[...]
    <IfModule mod_php5.c>
        php_admin_flag engine on
        php_admin_value open_basedir /var/www/FULLY.QUALIFIED.HOSTNAME/:/usr/local/share/roundcube/:/usr/local/share/roundcube-versions/:/usr/local/share/roundcube-addons/
#       php_admin_value include_path .:/usr/share/php5/
        php_admin_value memory_limit 64M
        php_admin_value max_execution_time 300
        [...]
        php_admin_value file_uploads on
#       php_admin_flag apc.rfc1867 on
        php_admin_value upload_max_filesize 5M
        php_admin_value post_max_size 6M
        [...]
        php_admin_flag allow_url_fopen on
        php_admin_value user_agent 'PHP (5.x)'
        [...]
        php_admin_value upload_tmp_dir /var/www/FULLY.QUALIFIED.HOSTNAME/data/temp/
        [...]
    </IfModule>
[...]
    # ModSecurity settings (entire virtualhost).
    <IfModule security2_module>
        # Engine On/Off/DetectionOnly.
        SecRuleEngine Off
    </IfModule>
[...]
    # Official upload directory (writable by www-data).
    <Directory /var/www/mail.teszt.hu/data>

    </Directory>
[...]

A fentiekkel a Roundcube példány virtualhost alapbeállítása megtörtént, az a virtualhost engedélyezése és a webszerver konfiguráció újraolvasása után használatba vehető:

a2ensite FULLY.QUALIFIED.HOSTNAME
systemctl reload apache2

Mivel ezután a Roundcube telepítő segéd authentikáció nélkül elérhető, lehetőleg azonnal folytassuk a telepítést ennek lefuttatásával.

Roundcube telepítő segéd

A Roundcube példány használatba vételéhez már csak az alkalmazás konfigurációs állományának (/config/config.inc.php) elkészítésére van szükség. Ehhez egy, a telepítés alatti szervert elérő munkaállomás grafikus böngészőjében hívjuk be a http://FULLY.QUALIFIED.HOSTNAME/installer weboldalt, ami (https-re váltás után) a Roundcube telepítő segédjére visz. A segéd ellenőrzi a környezeti beállításokat (Check environment), majd ad egy részben kitöltött beállító lapot (Create config). Ezen:

General configuration
  • temp_dir legyen /var/www/FULLY.QUALIFIED.HOSTNAME/data/temp/;
  • enable_spellcheck (Googie helyesírás-ellenőrző) opcionálisan legyen kikapcsolva (különben a Google elolvassa a szerkesztés alatti üzeneteket);
Logging & debugging
  • log_dir legyen /var/www/FULLY.QUALIFIED.HOSTNAME/data/logs/
Database setup
  • a motor legyen MySQL, az adatokat töltsük ki a korábban létrehozott adatbázisnak megfelelően;
IMAP settings
  • adjuk meg a használandó levélfogadó (IMAP) szervert (default_host) és portszámot (default_port) - jelen leírásban a Roundcube magán a levélfogadó szerveren fut, és más szerverhez (pl. a GMail-hez) nem is szeretnénk hozzáférést adni, így az alapértelmezett localhost:143 megfelel - ha távoli lenne a levélfogadó szerver, a titkosított eléréshez használjuk a hostnévben a tls:// vagy az ssl:// előtagot, és adjuk meg a használandó TCP port számát is;
  • ne adjunk meg username_domain-t;
  • hagyjuk bekapcsolva az auto_create_user funkciót;
  • a speciális mappák alapértelmezett nevei megfelelőek;
SMTP settings
  • adjuk meg a használandó levélküldő (SMTP) szervert - jelen leírásban a Roundcube magán a levélküldő szerveren fut, így smtp_server legyen localhost - ha távoli lenne a levélküldő szerver, titkosított eléréshez használjuk a hostnévben a tls:// illetve ssl:// előtagot és a megfelelő portszámot (smtp_port);
  • jelen leírásban a küldés és fogadás azonos authentikációt igényel, ezért a Use the current IMAP username and password for SMTP authentication checkboxot kapcsoljuk be;
  • az SMTP naplózást egyelőre hagyjuk bekapcsolva;
Display settings & user prefs
  • a nyelv legyen hu_HU;
  • a preview_pane legyen bekapcsolva;
  • a htmleditor legyen always.
  • a pluginokat később fogjuk aktiválni, az erre vonatkozó részt egyelőre hagyjuk alapértelmezetten (kikapcsolva).

A Create config nyomógombbal a segéd elkészíti és szövegdobozban megmutatja, illetve letölthetővé teszi a fentieket tartalmazó beállító állományt. Helyezzük el ezt a config könyvtárban:

cd /var/www/FULLY.QUALIFIED.HOSTNAME

touch config/config.inc.php; chown webadmin:www-data config/config.inc.php; chmod 640 config/config.inc.php;
mcedit config/config.inc.php # copy-paste, save, még ne zárjuk be!

Megjegyzés: a copy-paste nehézkesnek tűnik, viszont így nem kell a webszervernek írásjog a konfigurációs állományokra!

Manual changes

Az alábbi beállításokra nincs rubrika(?) az adatlapon:

  • latin-1 helyett UTF-8 legyen az alapértelmezett karakterkódolás az üzenetek megjelenítésénél (minden felhasználó módosíthatja a saját profiljában);
  • az első bejelentkezéskor jöjjenek létre a speciális IMAP könyvtárak (Draft, Junk, Sent, Trash);
  • opcionálisan alapértelmezetten ne csak a név, hanem a partner email címe is látsszon az üzeneteknél (minden felhasználó módosíthatja a saját profiljában);

így ezeket a config/config.inc.php manuális szerkesztésével írjuk elő, pl. az állomány végén:

[...]
// Use this charset as fallback for message decoding
$config['default_charset'] = 'UTF-8';

// Automatically create the default folders on first login
$config['create_default_folders'] = true;

// Set true if deleted messages should not be displayed
// This will make the application run slower
$config['skip_deleted'] = true;

// Enables display of email address with name instead of a name (and address in title)
$config['message_show_email'] = true;

Mentsük el, de még ne zárjuk be az állományt a szövegszerkesztőben. A webfelületen a Continue nyomógomb továbbvisz a tesztelésre.

A levélküldést és az IMAP bejelentkezést mindenképpen érdemes tesztelnünk! Titkosított protokoll (ssl:// vagy tls://) használata esetén hibalehetőség, ha a levelező szerver SSL tanúsítványát a telepítés alatti gép nem képes verifikálni (pl. mert az önaláírt, vagy az aláíráshoz használt közbenső (intermediate) tanúsítvány nincs telepítve ezen a gépen). Ha valóban ez a probléma, átmenetileg a konfigurációs állomány IMAP illetve SMTP szakaszában a verifikálást (egymástól függetlenül is) kikapcsolhatjuk az alábbi beállítások felvételével:

[...]
// ----------------------------------
// IMAP
// ----------------------------------
[...]
$config['imap_conn_options'] = array(
    'ssl' => array(
        'verify_peer'  => false,
        )
);
[...]
// ----------------------------------
// SMTP
// ----------------------------------
[...]
$config['smtp_conn_options'] = array(
    'ssl' => array(
        'verify_peer'  => false,
        )
);
[...]

Ha a hibát behatároltuk, lehetőség szerint ne nyugodjunk bele a tüneti kezelésbe, hanem pl. a hiányzó intermediate tanúsítvány /etc/ssl/certs alá telepítésével orvosoljuk a problémát (TODO!).

Sikeres tesztet követően, zárjuk be a telepítőt, és a konfigurációs állományban kapcsoljuk ki az installert (ha erről megfeledkeznénk, a bejelentkező oldalon figyelmeztetést kapunk):

[...]

// Enable only on upgrading the Roundcube core
$config['enable_installer'] = false;

[...]

Opcionálisan megszüntethetjük a telepítő komponensek symlinkelését is (erre igazából nincs szükség):

if [ -L installer ]; then rm installer; fi
if [ -L SQL ]; then rm SQL; fi

Megjegyzés: a most kikapcsolt telepítő segéden kívül a Roundcube-nak nincs adminisztratív webfelülete (bár léteznek pluginok, ami ilyet biztosítanak), így minden további konfigurálás a config/config.inc.php állomány közvetlen szerkesztésével végezhető el.

Ekkor a Roundcube példány már használatba vehető; ha rendelkezünk alkalmas IMAP hozzáféréssel, a webmail felületén belépve tesztelhetjük a működőképességet (gyorsteszt: TODO!).

Csak HTTPs forgalom kényszerítése

Tekintettel arra, hogy az Roundcube webfelületén szenzitív adatok haladnak át, mindenképpen ajánlott a forgalmat titkosítani, https-re kényszeríteni. A jelen leírásban ezt a wsm2 eszközeivel fogjuk megvalósítani.

  • Titkosított adatforgalom esetén célszerű, ha a virtualhostnak van hitelesített (nem self-signed) tanúsítványa.

Ha ezt a virtualhost létrehozatalakor már megadtuk a wsm2-nek, vagy nem rendelkezünk ilyennel, ez a pont kihagyható.

Ha van hitelesített tanúsítványunk, annak állományait helyezzük el azt az Apache wsm2 szerinti authentikációs könyvtárában (lecserélve a wsm2 által készített, önaláírt tanúsítványt):

/etc/apache2/auth.d/
root:root rw-r--r--  FULLY.QUALIFIED.HOSTNAME.pem   # tanúsító által aláírt szerver tanúsítvány
root:root rw-------  FULLY.QUALIFIED.HOSTNAME.key   # a tanúsítvány kérelemhez is használt privát kulcsunk
root:root rw-r--r--  FULLY.QUALIFIED.HOSTNAME.chain # tanúsító saját tanúsítványa (intermediate certificate - ha szükséges)

Érvényesítsük a konfigurációt:

systemctl reload apache2

és a https://FULLY.QUALIFIED.HOSTNAME/ weboldal (azaz a Roundcube példány nyitólapja titkosított adatkapcsolaton) böngészőben történő megtekintésével ellenőrizzük a tanúsítást.

  • Kényszerítsük a https használatát a virtualhost Apache konfigurációjában a wsm2 által előre elhelyezett rewrite aktiválásával:
-rw-r--r-- root root /etc/apache2/sites-available/FULLY.QUALIFIED.HOSTNAME.conf

[...]
    # General purpose rewrites.
    <IfModule mod_rewrite.c>
        [...]
        # Use to disable public http service (providing content only via https proxy).
        RewriteCond %{HTTP:X-Forwarded-For} !^.*\..*\..*\..*
        RewriteCond %{REMOTE_ADDR} !^(127\.0\.0\.1)$
        RewriteCond %{REMOTE_ADDR} !^(127\.0\.1\.1)$
        # Optionally by server IP also:
#       RewriteCond %{REMOTE_ADDR} !^(IP\.USED\.BY\.HTTPS-PROXY)$
        # Optional exception: the common client certificate may be delivered via http.
#       RewriteCond %{REQUEST_URI} !^/client.p12$
        # Protecting only a part:
#       RewriteRule ^/admin(/.*)*$ https://%{HTTP_HOST}/admin$1 [L,R,QSA]
        # Protecting whole site:
        RewriteRule ^/(.*)         https://%{HTTP_HOST}/$1 [L,R,QSA]
        # 
[...]

Érvényesítsük a konfigurációt:

systemctl reload apache2

és a http://FULLY.QUALIFIED.HOSTNAME/ (azaz a Roundcube példány nyitólapja) böngészőben történő megtekintésével ellenőrizzük az automatikus https-re váltást.

Roundcube pluginok beállítása

A Roundcube-bal együtt szállított (core) pluginokat és a roundcube-addons-ban szereplő pluginokat telepíteni már nem kell, azokat elegendő csak aktiválni.

Az alábbi Roundcube pluginokat érdemes bekapcsolni:

  • ACL (core) - felhasználói felületet ad IMAP mappák jogosultságkezeléséhez és megosztásához;
  • Automatic address book (3rd party, roundcube-addons) - megvalósítja a szokásos összegyűjtött címjegyzéket (elküldött levelek címzettjei) - ezek a címek a levélküldéskor használatos automatikus címkiegészítésben (autocomplete) is megjelennek;
  • CardDAV client (3rd party, roundcube-addons) - lehetőséget ad külső címjegyzékek (pl. a felhasználó alapértelmezett OwnCloud címjegyzéke) felcsatolására - ezek a címek a levélküldéskor használatos automatikus címkiegészítésben (autocomplete) is megjelennek;
  • Emoticons (core) - a levelekben szereplő hangulatjeleket grafikaként jeleníti meg;
  • Iframe External (saját, roundcube-addons) - opcionálisan lehetővé teszi a Roundcube futtatását iframe környezetben, előre megadott domainekről;
  • Mark as junk (core) - a felhasználói felületen egy ikont ad a levelek szemétnek minősítésére;
  • Thunderbird Labels (3rd party, roundcube-addons) - Thunderbird-kompatibilis, színes címkék (Fontos, Munka, stb.) kezelése.

Néhány roundcube-addons plugin még a bekapcsolás előtt elvégzendő beállításokat igényel:

Automatic Address Book beállítása

A plugin saját adatbázis táblákkal rendelkezik, aktiválás előtt ezeket a pluginnal szállított SQL script lefuttatásával létre kell hozni:

# Automatic address book
cat /var/www/FULLY.QUALIFIED.HOSTNAME/plugins/automatic_addressbook/SQL/mysql.initial.sql |\
mysql -u rc_INSTANCENAME -p -D rc_INSTANCENAME

CardDAV Client beállítása

A plugin saját adatbázis táblákkal rendelkezik, aktiválás előtt ezeket a pluginnal szállított SQL script lefuttatásával létre kell hozni:

# CardDAV client
cat /var/www/FULLY.QUALIFIED.HOSTNAME/plugins/carddav/SQL/mysql.sql |\ 
mysql -u rc_INSTANCENAME -p -D rc_INSTANCENAME

A CardDAV Client plugin fejlesztője javasolja, hogy egy cron job segítségével, időről időre, automatikusan szinkronizáljuk újra a felhasználók által becsatolt címjegyzékeket. Az erre szolgáló PHP kódot a wsm2 webcron szolgáltatásával naponta egyszer (kora hajnalban) automatikusan meghívhatjuk az alábbi .htcrontab bejegyzéssel:

-rw-r----- webadmin www-data /var/www/FULLY.QUALIFIED.HOSTNAME/.htcrontab

[...]
30      4 * * * https://FULLY.QUALIFIED.HOSTNAME/plugins/carddav/cronjob/synchronize.php 3600

Sok felhasználó esetén a szinkronizálás hosszadalmas művelet lehet, ezért a fenti a fenti urlcheck hívásban megadott, hosszú timeout-ot érdemes a cron job számára a PHP beállításokban is érvényesíteni, egyben a szokottnál több(?) memóriát allokálni:

-rw-r--r-- root root /etc/apache2/sites-available/FULLY.QUALIFIED.HOSTNAME.conf

[...]
    # CardDAV synchronisation cronjob.
    <Location /plugins/carddav/cronjob/synchronize.php>
        <IfModule mod_php5.c>
            php_admin_value memory_limit 256M
            php_admin_value max_execution_time 3600
        </IfModule>
    </Location>
[...]

A beállítás a webszerver konfiguráció újraolvastatásával érvényesíthető:

systemctl reload apache2

Iframe External beállítása

Az Iframe External plugin számára - célszerűen a Roundcube config/main.inc.php konfigurációs állományában, mert ezt a kódfrissítések nem érintik - opcionálisan fel kell sorolni azokat az URL-eket, amelyeken futó idegen alkalmazások számára engedélyezni szeretnénk a Roundcube iframe-ben történő megjelenítését. Ha ownCloud integrációt kívánunk használni, itt (pl. az állomány végén) célszerű felsorolni az ownCloud példány(ok) webcímeit, az alábbi formában:

-rw-r----- webadmin www-data /var/www/FULLY.QUALIFIED.HOSTNAME/config/config.inc.php

[...]
// Allowed origins from Roundcube may be called within an iframe
$config['iframe_external_allowed_origins'] =
    array(
        'https://myowncloud.com',
        'https://www.myowncloud.com',
    );

Tetszőleges számú origin megadható (ügyeljünk arra, hogy a http és https, valamint www. és anélküli URL-ek közül a használni kívántakat külön-külön fel kell sorolni). Mivel a Roundcube-ot csak https-en keresztül prezentáljuk, célszerű az integrációban is csak https origin-eket megadni.

Egyéb pluginok telepítése, beállítása

Ha fentieken kívül, speciálisan csak a telepítés alatti Roundcube példányhoz szeretnénk egyéb plugint telepíteni, azt a Roundcube Plugin Repository-ból letöltve és a Roundcube plugins könyvtárába webadmin:www-data 2750/640 jogosultságokkal kicsomagolva tehetjük meg (részletesen: TODO!).

Aktiválás

A tényleges aktiválás a Roundcube config/main.inc.php konfigurációs állományában a pluginok nevének egy tömbben történő felsorolásával történik:

-rw-r----- webadmin www-data /var/www/FULLY.QUALIFIED.HOSTNAME/config/config.inc.php

[...]
$config['plugins'] = array( 'acl', 'automatic_addressbook', 'carddav', 'emoticons', 
                            'iframe_external', 'markasjunk', 'thunderbird_labels', );

Az aktiválás azonnal hatályba lép, semmit nem kell újraindítani.

Karbantartás

Ebben a részben a telepítés után felmerülő, a napi használaton túlmenő, karbantartói-üzemeltetési feladatokat tárgyaljuk.

Egy felhasználó első belépése

TODO!

Egy felhasználó törlése

Egy Roundcube felhasználó törlése a hozzá tartozó webmail profil törlését jelenti (mintha egy asztali gépről törölnénk egy Thunderbird vagy Outlook profilt) - vagyis nem érinti a hozzá tartozó IMAP postafiókot. A törölt felhasználó elveszíti a beállításait, személyiségeit (aliasait), címjegyzékeit, stb., de ha az IMAP postafiókja még létezik, továbbra is be tud lépni a Roundcube webfelületére (ahol újra létrejön számára egy Roundcube profil, amelyben az alapértelmezett beállításokat kapja meg) és továbbra is kezelheti a postafiókját. Ezért, a felhasználó törlésekor, előbb az IMAP postafiókot szüntessük meg, és csak utána a Roundcube profilt.

Roundcube profil törlésére nincsen webfelület, azt konzolos belépéssel, webadmin (esetleg root) Linux felhasználóként, a Roundcube példány gyökérkönyvtárában (wsm2 házirend esetén /var/www/FULLY.QUALIFIED.HOSTNAME/) állva, a bin/deluser.sh PHP script meghívásával tehetjük meg:

cd /var/www/FULLY.QUALIFIED.HOSTNAME
pwd # Biztos, ami biztos...

/usr/bin/env php -d open_basedir=NULL bin/deluser.sh username@domain.com

A script nem kér megerősítést - ha a megadott profil létezik, azt kérdés nélkül törli. A törlés során meghívja az aktív pluginok esetleges felhasználó-törlő hook-jait is, így a felhasználó adatai nemcsak a core adatbázis táblákból, hanem pl. az összegyűjtött címek, illetve a CardDAV címjegyzékek tábláiból is törlődnek.

Roundcube core frissítése

A verziófrissítésekről legegyszerűbben a Roundcube bejelentések hírleveléből értesülhetünk. Jelenleg nincs a Roundcube-ban automatikus verziófigyelés, így erre a hírlevélre mindenképpen ajánlatos feliratkozni.

A frissítést forgalommentes időszakban végezzük, és mindenképpen legyen mentésünk! Frissítéshez ellenőrizzük a legfrissebb stabil verzió verziószámát, és a /usr írhatóan újracsatolása után csomagoljuk ki a /usr/local/share/roundcube-versions/roundcube-X.Y.Z könyvtárba a házirend szerinti jogosultságok beállításával, pl. az alábbi parancsokkal:

mount -o remount,rw /usr  # Írni kell ide
RC_VERSION="X.Y.Z"        # Töltsük ki az aktuális verzióval!

# Kódkészlet verzió könyvtárának elkészítése
mkdir /usr/local/share/roundcube-versions/roundcube-$RC_VERSION

# Letöltés, kicsomagolás
cd /root/tmp
wget "https://github.com/roundcube/roundcubemail/releases/download/$RC_VERSION/roundcubemail-$RC_VERSION-complete.tar.gz" -O roundcubemail-$RC_VERSION.tar.gz
tar xzvf roundcubemail-$RC_VERSION.tar.gz -C /usr/local/share/roundcube-versions/roundcube-$RC_VERSION --strip-components=1

# Jogosultságok beállítása
chown -R root:www-data /usr/local/share/roundcube-versions/roundcube-$RC_VERSION
find /usr/local/share/roundcube-versions/roundcube-$RC_VERSION -type d -exec chmod 750 {} \;
find /usr/local/share/roundcube-versions/roundcube-$RC_VERSION -type f -exec chmod 640 {} \;

Core patch frissítése

A core patcheléséhez szükséges lehet a roundcube-addons tarball legfrissebb változata, amelyet innen töltsünk le, és (továbbra is írható /usr partíció mellett) könyvtárhelyesen csomagoljunk ki (ezzel egyben frissítjük a saját terjesztésű pluginokat is!). Lehetséges, hogy nem minden Roundcube kiadáshoz tartozik külön roundcube-addons kiadás, ez esetben a meglévő legfrissebb patchet alkalmazhatjuk (de mindenképpen kell foltoznunk!).

A /usr/local/share/roundcube-addons/patch könyvtárból válasszuk ki a telepített Roundcube verziószámának megfelelő (ennek hiányában a legfrissebb) foltot, és alkalmazzuk:

patch -p0 -d /usr/local/share/roundcube-versions/roundcube-$RC_VERSION </usr/local/share/roundcube-addons/patch/roundcube_X.Y.Z-roundcube-addons-YYYYMMDD.patch

Amennyiben lennének felülírandó binárisok, ezeket is csomagoljuk ki:

tar xzvf /usr/local/share/roundcube-addons/patch/roundcube_X.Y.Z-roundcube-addons-YYYYMMDD.binaries.tgz -C /usr/local/share/roundcube-versions/roundcube-$RC_VERSION

Siker esetén állítsuk helyre az esetleg elromlott jogosultságokat:

chown -R root:www-data /usr/local/share/roundcube-versions/roundcube-$RC_VERSION
find /usr/local/share/roundcube-versions/roundcube-$RC_VERSION -type d -exec chmod 750 {} \;
find /usr/local/share/roundcube-versions/roundcube-$RC_VERSION -type f -exec chmod 640 {} \;

Ezzel a frissített közös kódkészletet aktiválásra előkészítettük.

Aktiválás

Aktiválás előtt érdemes valamennyi Roundcube példány működését felfüggeszteni (szolgáltatáskiesés):

a2dissite FULLY.QUALIFIED.HOSTNAME  # minden példányra, külön-külön
systemctl reload apache2            # érvényesítés

A core frissítést az aktuális kódverzióra mutató symlink átírásával élesíthetjük:

if [ -L /usr/local/share/roundcube ]; then rm /usr/local/share/roundcube; fi
ln -s roundcube-versions/roundcube-$RC_VERSION /usr/local/share/roundcube
chown -h root:www-data /usr/local/share/roundcube

Csatoljuk újra csak olvashatóan a /usr partíciót (itt már nincs dolgunk):

mount -o remount /usr  # Már nem kell írni

Példányonkénti teendők

Az esetleges adatbázis-frissítéseket Roundcube példányonként külön-külön kell elvégezni (ld. az UPGRADING állományban - TODO!), erre a web felületű installert fogjuk használni. Ehhez lépjünk be az adott Roundcube példány web gyökérkönyvtárába, és ellenőrizzük, hogy az installer komponensek symlinkelve vannak-e (ha nem, állítsuk helyre ezeket a symlinkeket):

cd /var/www/FULLY.QUALIFIED.HOSTNAME

# installer komponensek belinkelése
ln -s /usr/local/share/roundcube/installer installer
ln -s /usr/local/share/roundcube/SQL SQL

Szerkesszük meg a konfigurációs állományt, átmenetileg engedélyezzük az installer futtatását:

mcedit config/config.inc.php
-rw-r----- webadmin www-data config/config.inc.php

[...]
// enable only on upgrading the Roundcube core
$config['enable_installer'] = true;
[...]

Kapcsoljuk vissza a virtualhostot:

a2ensite FULLY.QUALIFIED.HOSTNAME
systemctl reload apache2

és lehetőleg azonnal, egy, a telepítés alatti szervert elérő munkaállomás grafikus böngészőjében hívjuk be a http://FULLY.QUALIFIED.HOSTNAME/installer weboldalt, ami (https-re váltás után) a Roundcube telepítő segédjére visz. Ellenőrizzük a kiírásokat, miközben ellépkedünk a harmadik lapig, ahol (ha a system PHP függvény engedélyezett - házirendünkben nem az!) a telepítő elvégzi az esetleges adatbázis frissítéseket is. Ha a telepítőnek ez nem sikerülne, a szükséges /SQL/mysql/YYYYMMDDxx.sql SQL scripteket manuálisan kell lefuttatnunk, pl. az alábbi módon:

cat SQL/mysql/YYYYMMDDxx.sql | mysql -u rc_INSTANCENAME -p -D rc_INSTANCENAME

Minden releváns patchet futtassunk le, mindaddig, amíg a böngészőben frissített telepítő segéd az adatbázis állapotára OK-t nem mond.

Siker esetén zárjuk be a telepítőt, és tiltsuk meg a telepítő futtatását a konfigurációs állományban:

mcedit config/config.inc.php
-rw-r----- webadmin www-data config/config.inc.php

[...]
// enable only on upgrading the Roundcube core
$config['enable_installer'] = false;
[...]

Opcionálisan megszüntethetjük a telepítő komponensek symlinkelését is (de erre nincs igazán szükség):

if [ -L installer ]; then rm installer; fi
if [ -L SQL ]; then rm SQL; fi

Végül a Roundcube webfelületén belépve, teszteljük a működőképességet (gyorsteszt: TODO!). Ennél a lépésnél már visszaállt a publikus szolgáltatás is.

Ezzel az aktuális Roundcube példány frissítését befejeztük; a fentieket végezzük el az esetleges további, telepített példányokon is.

Irodalom