Roundcube kasutamine operatsioonisüsteemiga Debian

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

Roundcube http://roundcube.net/ on veebipõhine eposti klient, mis töötab tavaliselt teenusepakkuja serveris ja kuhu kasutaja pöördub oma brauseriga. Roundcube sisaldab eposti kasutamiseks olulist funktsionaalsust, pakkudes kasutajale mugava kasutajaliidese. 2013 aasta keskel on Debian Wheezy v. 7 paketihalduses oleva Roundcube versioon 0.7.2.

Veebimaili kasutamine on populaarne ja kasutajale mugav seetõttu, et kasutaja arvutisse ei pea paigaldama ja seadistama mingit eposti-spetsiifilist tarkvara. Kuna kõik eposti puudutavad andmed, saadetud ja vastuvõetud kirjad, aadressraamat jms asuvad serveris, ei pea kasutaja muretsema nende varundamise pärast (eeldusel, et seda teeb teenusepakkuja).

Squirrelmail Squirrelmail tarkvara kasutamisel võiks kaaluda Roundcube lahenduse juurutamist.

Tööpõhimõte

Roundcube sisaldab ainult IMAP v.4 postimasinaga suhtlemiseks vajalikku veebiliidest, st ta ei pea ise kasutajate kirjadega postkaste, ei autendi kasutajat vms. Joonisel võiks kujutada eposti kasutamise komponente selliselt

                  kasutaja brauser
  
                         ^    
                         |
                         v
 
                    veebiserver 
               ( Roundcube rakendus )
 
                     ^        |
   kirjade lugemine  |        | kirjade saatmine
       IMAP          |        | SMTP või /usr/sbin/sendmail
                     |        v
 
       Cyrus (IMAP server)   Postfix
 
                     postimasin

kus

  • kasutaja pöördub brauseriga veebiserveris töötava Roundcube rakenduse poole
  • kui kasutaja loeb veebiserveris töötava rakenduse kasutajaliideses kirju, siis kopeerib rakendus IMAP serverist andmeid
  • kui kasutaja saadab kasutajaliideses kirju, siis sõltuvalt rakenduse seadistusest saadetakse kiri otse üle võrgu SMTP serverile või lokaalselt nn /usr/sbin/sendmail programmi poolt (see eeldab, et veebiserverisse on samuti MTA, nt Postfixi eksemlar paigaldatud)
  • kõige all on kujutatud postimasinat, kus töötab kirjade lugemiseks vajalik IMAP server, nt Cyrus ja kirjade saatmiseks vajalik server, nt Postfix; need teenused võivad esineda ka kahes erinevas postimasinas

Ettevalmistused Roundcube kasutamiseks

Kuna Roundcube on veebirakendus, siis Roundcube kasutamiseks on tarvis

  • töötavat veebiserverit, nt võiks kasutada Apache tarkvara
  • töötavat kasutaja postikasti, nt Cyrus tarkvara abil realiseeritud postimasinat
  • töötavat smtp releed, mille abil saab veebirakendus kirju välja saata
  • töötavad PostgreSQL andmebaasi, mida Roundcube kasutab sessiooniandmete, aadressraamatu jms jaoks (või MySQL)

Failisüsteem

# groupadd roundcube
# useradd -g roundcube -m -d /opt/roundcube -s /bin/false roundcube

PostgreSQL andmebaas

postgres=# CREATE ROLE roundcube LOGIN PASSWORD 'parool' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

postgres=# CREATE DATABASE roundcube
    WITH OWNER = roundcube
      ENCODING = 'UTF8'
      TABLESPACE = pg_default
      LC_COLLATE = 'et_EE.UTF-8'
      LC_CTYPE = 'et_EE.UTF-8'
      CONNECTION LIMIT = -1;

MySQL andmebaas

Kui baas on paigaldatud, sobib öelda

# mysql --defaults-file=/etc/mysql/debian.cnf
mysql> create database roundcube character set utf8 collate utf8_general_ci;
mysql> grant all privileges on roundcube.* to 'roundcube'@'%' identified by 'parool';
mysql> grant all privileges on roundcube.* to 'roundcube'@'localhost' identified by 'parool';

Kui baas on eraldi arvutis, siis peab MySQL serveris olema puudu rida failis /etc/mysql/my.cnf (välja kommenteeritud)

# bind-address          = 127.0.0.1

MariaDB andmebaas

Paigaldamiseks sobib öelda

# apt-get install --no-install-recommends mariadb-server

TODO

Tarkvara paigaldamine

Nagu ikka tarkvara, põhimõtteliselt saab Roundcube paigaldada kahel erineval viisil

  • operatsioonisüsteemi paketihaldusest - paigaldatakse automaatselt kõik vajalikud sõltuvused (st tarkvara tööd abistavad programmid, teegid jms), kuid tarkvara ei ole nii uus; samas hoolitsevad operatsioonisüsteemi pidajad tarkvara uuenduste eest
  • lähtetekstist, mida reeglina otse arendaja jagab - eelmise punkti asjaolud, aga vastupidiselt

Esimesel juhul teisel juhul peab ise seda tegema.

Paigaldamine paketihaldusest

Esmalt tuleb paigaldada pgsql tugi, vastasel korral paigaldatakse vaikimisi mysql tugi koos MySQL andmebaasiga

# apt-get install roundcube-pgsql
# apt-get install roundcube

Seejärel küsitakse, kas seadistada andmebaasi kasutamine dbconfig-command abil, vastata nt jaatavalt. Millegipärast andmebaasi seadistamine siiski ebaõnnestub, minna ignore abil üle ja paigaldada lõpuni. Seejärel aga öelda

# dpkg-reconfigure roundcube-core

Ning siis saab baasi ära seadistada ja populeerida, selleks tuleb usaldada rakendusele baasi privilegeeritud kasutaja ligipääs.

Paigaldamine lähtetekstist

Esmalt tuleks teha kindlaks vajalikud sõltuvused ja need paigaldada. Nt kui paketihalduses on olemas, siis öelda

# apt-get install roundcube -s

Seejuures mitte paigaldada midagi, teha märkmed ja siis sõltuvused paigaldada. Tundub, et 2015 kevadel on sõltuvused sellised

apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common aspell aspell-en dbconfig-common dictionaries-common
fontconfig-config javascript-common libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaspell15
libfontconfig1 libgd2-xpm libicu48 libjpeg8 libjs-jquery libjs-jquery-ui libltdl7 libmcrypt4 libonig2 libpng12-0 libqdbm14 libxpm4
php-auth php-auth-sasl php-mail-mime php-mail-mimedecode php-mdb2 php-mdb2-driver-mysql php-net-smtp php-net-socket php-pear php5
php5-cli php5-common php5-gd php5-intl php5-mcrypt php5-mysql php5-pspell roundcube roundcube-core roundcube-mysql tinymce
ttf-dejavu-core wwwconfig-common

Mugavam on öelda

# apt-get install `echo $(apt-get install roundcube -s | grep ^Inst | grep -v roundcube | awk {'print $2'})` -s
  • /etc/php5/apache2/php.ini
date.timezone = "Europe/Tallinn"

Roundcube on PHP rakendus, st kompileerida pole midagi tarvis, piisab tarkvara pakkida lahti veebijuurika alla kataloogi, nt (soovitav valida nn complete variant)

# cd /var/www
# tar zxf /var/tmp/roundcubemail-1.0.2.tar.gz 
# mv roundcubemail roundcube
# chown -R www-data:www-data roundcube

Seejärel tuleb avada brauseris ning järgida juhiseid

https://imool.org/roundcube/installer/

kus

  • General Configuration
  • Logging & Debugging
  • Database setup - näidata baasi ligipääs
  • IMAP Settings
auto_create_user - tuleb jätta tavaliselt true
  • SMTP Settings - outgoin meiliserver
  • Display settings & user prefs
  • Plugins

Tulemusena tekitatakse seadistusfail

roundcube/config/config.inc.php
# chown -R roundcube:roundcube roundcube
# chown -R www-data:www-data roundcube/temp roundcube/logs

ning pressida nuppu

Initialize database

Lõpus öeldakse brauserisse

After completing the installation and the final testsplease remove the whole installer folder from the document root of 
the webserver or make sure that enable_installer option in config.inc.php is disabled

Roundcube seadistamine

Seadistamise eesmärgid

  • et kirjadega saaks kasutada nö mõistlikult suuri attachmente
  • webmail pöördub IMAP serveri poole üle krüptitud ühenduse
  • webmail saadab kirju välja läbi SMTP server, pöördumine on krüptitud ühendusega ning SMTP serveri kasutamiseks kasutaja autenditakse oma IMAP sisselogimise kasutaja ja parooliga

Failisuurused

Seadistused on kirjas failis

/etc/roundcube/main.inc.php

Lisaks võib olla vajalik muuta nt max attachmenti suuruse muutmiseks (või /srv/www-yhine/html/mail/.htaccess)

# cat /etc/roundcube/htaccess
..
php_value       upload_max_filesize     25M
php_value       post_max_size           30M
php_value       memory_limit            64M
...

PHP teegi konfis /etc/php5/apache2/php.ini

..
upload_max_filesize = 20M
...
post_max_size = 25M
....

IMAPS ühendus

Selleks, et webmail saaks IMAPS serveriga suhelda üle SSL/TLS ühenduse (mitte STARTTLS), sobib kasutada seadistusfailis selliseid direktiive, on oluline, et toimuks nö puhas ühendumine (webmail teab serveri sertifikaati või ahela juurikat, webmail pöördub imap serveri poole kasutades sertifikaadis olevat nime)

$config['default_host'] = 'tls://mail.imool.org';
$config['imap_conn_options'] = array(
  'ssl'         => array(
    'verify_peer'  => true,
    'verify_depth' => 3,
    'cafile'       => '/var/www/html/roundcube/config/imap.pem',
  ),
);
$config['default_port'] = 993;

kus

  • mail.imool.org - serveri nimi
  • /var/www/html/roundcube/config/imap.pem - ahela või serveri selfsigned sertifikaadi asukoht

SMTP AUTH TLS ühendus

Selleks, et webmail saaks SMTP serveri port 587 kaudu suhelda kasutades STARTTLS protokolli, sobib kasutada seadistusfailis selliseid direktiive, on oluline, et toimuks nö puhas ühendumine(webmail teab serveri sertifikaati või ahela juurikat, webmail pöördub imap serveri poole kasutades sertifikaadis olevat nime)

$config['smtp_server'] = 'tls://post-fend.imool.org';
$config['smtp_port'] = 587;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['smtp_auth_type'] = 'PLAIN';
$config['smtp_conn_options'] = array(
  'ssl'         => array(  
    'verify_peer'  => true,
    'verify_depth' => 3,
    'cafile'       => '/var/www/html/roundcube/config/smtp.pem',
  ),
);

kus

  • tls:// - ühendus on üle krüptitud kanali, väga oluline on kasutada siin hostname'i mitte ip aadressi, vastasel korral krüpto kokkuleppimine ei õnnestu
  • 587 - kasutatakse just STARTTLS protokolli
  • %u ja %p - webmail pöördumisel SMTP serveri poole kasutatakse autentimisel webmaili sisselogimiseks kasutatud kasutajanime ja parooli
  • /var/www/html/roundcube/config/smtp.pem - ahela või serveri selfsigned sertifikaadi asukoht

Roundcube kasutamine

Kirja lugemine

Peale sisselogimist paistab Roundcube kasutajaliides välja selline

Fail:Roundcube-1.gif

kus

  • TODO

Kirja koostamine

  • Paremal all saab valida, kas kasutatakse plain tekst või html formaadis editori

Kasutaja seadistused

Kasutajaliidesega töötamisel võiks tähale panna

  • Kas näidatakse lõimesid (ingl. k. threads)
Settings -> Folders -> List view Mode -> Threads
  • Oma saatja aadressi kirjeldamine (from address)
Settings -> Identities -> väärtus -> Edit item
  • Kui palju ridu kirju esitatakse
Settings -> Preferences -> User Interface -> Rows per page
  • Kas preview pane on vaikimisi avatud
Settings -> Preferences -> Mailbox view -> Show preview pane
  • nn spetsiaalsete folderite seostamine konkreetsete folderitega
 Settings -> Preferences -> Special Folders
  • Kui postkasti loetakse ka muude programmidega, siis võib olla folderile compact jäänud tegemata ning seal on nn deleted olekus kirju, kas neid näidata
Settings -> Preferences -> Server Settings -> Do not show deleted messages
  • Kas tühjedada trash ja inbox väljalogimisel
Settings -> Preferences -> Server Settings -> Clear trash on logout ja compact inbox on logout

Aadressiraamat

TODO

Plugins

TODO

Managesieve

Roundcube v. 1.0.2 koosseisus olev Managesieve plugin võimaldab sieve teenuse abil seadistada kasutada filtreid. Plugin asub kataloogis

plugins/managesieve

Kasutamiseks tuleb plugin seadistada, näidades teenuse aadressi, nt localhost ja port 4190

# cp plugins/managesieve/config.inc.php.dist plugins/managesieve/config.inc.php

Seadistusfailis näidata IMAP serveri asukoht, nt

..
$config['managesieve_host'] = '10.0.6.143';

ning vajadusel

// use or not TLS for managesieve server connection
// Note: tls:// prefix in managesieve_host is also supported
$config['managesieve_usetls'] = true;

// Connection scket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
$config['managesieve_conn_options'] = array(
  'ssl'         => array(
     'verify_peer'  => true,
     'verify_depth' => 2,
     'cafile'       => '/var/www/html/roundcube/config/le-chain.pem',
   ),
 );

Roundcube seadistusfailis tuleb plugin lubada

# tail -n 2 roundcube/config/config.inc.php
$config['plugins'] = array('managesieve');

Kasutamine toimub avades Roundcube veebiliideses

Settings -> Filers -> ...

Fail:Roundcube-3.gif

Vacation teadete võimaluse aktiviseerimiseks tulub config.inc seadisusfailis kirjeldada muutujale sobiv väärtus

// Enables separate management interface for vacation responses (out-of-office)
// 0 - no separate section (default),
// 1 - add Vacation section,
// 2 - add Vacation section, but hide Filters section
$config['managesieve_vacation'] = 1;

authres

Märkused

  • imapproxy paketist võib olla abi veebiseveri ja imap arvuti vahelise suhtlemise koormuse vähendamisel
  • Veebimeili kasutamisel tuleb arvestada, et võõrast arvutit kasutades võib jääda brauserisse maha olulisi jälgi loetud meilist, nt brauseri cache'i või kui peale kasutamist ei logita korrektselt välja, siis saab arvuti omanik nö kasutamist jätkata.
  • Veebimeili kasutajaliides on soovitav seadistada käima üle https:// kanali, Roundcube toetab ilusti ssl offloaderi kasutamist
  • Kui postimasina ja selle veebiserveri, kus töötab Roundcube rakendus vahel on märkimisväärne vahekaugus, saab Roundcube vahenditega korraldada IMAPS ühenduse; lisaks on võimalik kasutada nö generic lahendusi, nt Stunnelit.

Tarkvara uuendamine

Enne uuendamist

  • veenduda, et olemasolev süsteem töötab
  • teha koopia rakenduse failisüsteemist
  • teha koopia rakenduse andmebaasist

Kopeerida järgmine (tundub, et versioone saab ka vahele jätta, nt 1.2.1 -> 1.2.3, ju upgrade skript ütleb) tõenäoliselt nn complete versioon failisüsteemi

$ wget https://github.com/roundcube/roundcubemail/releases/download/1.2.1/roundcubemail-1.2.1-complete.tar.gz

pakkida ajutisse kataloogi lahti ning öelda seal

# chown -R roundcube:roundcube /var/tmp/roundcubemail-1.2.0
root@www-4:/var/tmp/roundcubemail-1.2.0# ./bin/installto.sh /srv/www.moraal.ee/yyyy_xxxx/html/mail
..

Running update script at target...
WARNING: Dependency check failed!
(Some of your configuration settings require other options to be configured or additional PHP modules to be installed)
- spellcheck_engine: This requires the pspell extension which could not be loaded.
Please fix your config files and run this script again!
See ya.
Executing database schema update.
This instance of Roundcube is up-to-date.
Have fun!
All done.

kus

  • TODO
# chown -R www-data:www-data mail/temp mail/logs

1.4.2 -> 1.4.8 uuendamisel saab

...
NOTICE: JavaScript dependencies installation skipped.

Running update script at target...
Executing database schema update.
NOTICE: Update dependencies by running `php composer.phar update --no-dev`
This instance of Roundcube is up-to-date.
Have fun!
All done.

SSL offload

Tundub, et Roundcube töötab väga hästi ssl offloaderi, nt NginX taga. Selleks, et lisada kirjale manuseid on tõenäoliselt vajalik kasutada NginX seadistuste juures client_max_body_size parameetrit

server {
    listen 443;
    ..
    client_max_body_size 25m
    ...
}

Keskkonna uuendamine Debian v. 8 -> v. 9

Peale operatsioonisüsteemi keskkonna uuendamist tuleb paigaldada paketid

# apt-get install php-mbstring php-xml php-gd php-intl php-ldap php-imagick

ning käivitada korraks tmp url aadressil roundcube installer ning veenduda seal sisalduva keskkonna kontrolli abil, et kõik vajalikud php teegid jms on olemas.

IMAP serveri parooli haldamine

Osutub, et Roundcube plugin 'password' sobib hästi IMAP serveri parooli haldamiseks. Selle eelduseks on, et Dovecot hoiab kasutajate konto andmeid PostgreSQL baasis. Tulemusena saab kasutaja peale Roundcube rakendusse sisselogimist kasutaja muuta seal baasis olevat oma konto IMAP parooli ning tulemusena on efektiivselt ka Roundcube parool kasutaja jaoks muudetud kuna Roundcube autendib IMAP serveri abil oma kasutajat.

IMAP Dovecot juures sql baasi kasutamine

Muu hulgas peab olemas Dovecot passwd direktiiv seadistatud selliselt

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

ja dovecot-sql.conf.ext selliselt (andmebaas asub dovecot protsessiga samas arvutis)

# egrep -v "^$|^#" /etc/dovecot/dovecot-sql.conf.ext 
driver = pgsql
connect = host=127.0.0.1 user=postkast dbname=db_postkast password=parool
default_pass_scheme = SHA512-CRYPT
password_query = \
  SELECT userid as username, domain, password \
  FROM users WHERE userid = '%n' AND domain = '%d'

Kusjuures postgresql andmebaasi ettevalmistamiseks sobib öelda

# apt-get install postgresql
# su - postgres
$ psql
sql> create role postkast login;
sql> \password postkast
...
sql> create database db_postkast owner=postkast;

# psql -h 127.0.0.1 -U postkast db_postkast
sql> CREATE TABLE users (
  user_id serial NOT NULL,
  userid VARCHAR(128) NOT NULL,
  domain VARCHAR(128) NOT NULL,
  password VARCHAR(64) NOT NULL,
  home VARCHAR(255) NOT NULL,
  uid INTEGER NOT NULL,
  gid INTEGER NOT NULL
);

Tabeli andmetega sisustamiseks sobib öelda (kasutaja kasutajanimi on imre@moraal.ee)

 sql> insert into users (userid, domain, password, home, uid, gid) values ('imre', 'moraal.ee', '{SSHA}56jyUIxHzMA0HeFVoAmW9jJdFECxFArx', '/noexistant', 5005, 5005);
 ...

Funktsiooni tekitamiseks, mida kasutab Roundcube php skript (plugin) parooli muutmiseks sobib öelda

CREATE OR REPLACE FUNCTION update_passwd(hash text, account text) RETURNS integer AS $$
    DECLARE
            res integer;
    BEGIN
        UPDATE users SET password = hash
        WHERE userid = split_part(account, '@', 1)
            AND domain = split_part(account, '@', 2)
        RETURNING user_id INTO res;
    RETURN res;
    END;
    $$ LANGUAGE plpgsql SECURITY DEFINER;

kus

  • res tagastamise mõte ei ole arusaadav

Roundcube juures sql baasi kasutamine

Roundcube password plugin kasutamiseks sobib roundcube seadistusfailis config/config.inc.php kasutada rida

$config['plugins'] = array('password');

ning password plugin seadistusfailis teha default suhtes sellised muudatused

# cp plugins/password/config.inc.php.dist plugins/password/config.inc.php
# diff plugins/password/config.inc.php.dist plugins/password/config.inc.php
19c19
< $config['password_minimum_length'] = 8;
---
> $config['password_minimum_length'] = 14;
23c23
< $config['password_minimum_score'] = 0;
---
> $config['password_minimum_score'] = 5;
26c26
< $config['password_log'] = false;
---
> $config['password_log'] = true;
49c49
< $config['password_algorithm'] = 'clear';
---
> $config['password_algorithm'] = 'ssha';
53c53
< $config['password_algorithm_prefix'] = '';
---
> $config['password_algorithm_prefix'] = '{SSHA}';
113c113
< $config['password_db_dsn'] = '';
---
> $config['password_db_dsn'] = 'pgsql://postkast:parool@192.168.7.144/db_postkast';
138c138
< $config['password_query'] = 'SELECT update_passwd(%c, %u)';
---
> $config['password_query'] = 'SELECT update_passwd(%P, %u)';

kus

  • tundub et passowrd_altorithm jms kasutamise tulemusena php skript konstrueerib andmebaasi sissekandmiseks sobivas vormis sisu
  • select update_passwd(%P, %u) argumendid aitavad sobivas vormis andmete baasi viimisega ja update_passwd funktsioon on eelmises punktis ettevalmistatud funktsioon
  • roundcube php rakendus ja andmebaas töötavad erinevates arvutites

Kasulikud lisamaterjalid

Kasulikud lisamaterjalid