大多数软件都包含在你的 Linux 发行版中。据我所知,例如 SuSE 从 7.1 版本开始就发布 Cyrus。自 SuSE 8.1 起,cyrus-imap 2.1 和 sasl2 已包含在内,并且可以正常工作。但仍然建议您自行编译 Cyrus。SuSE 不发布启用 MySQL 的 Postfix。
![]() | Debian stable 和 testing 中已弃用的软件包 |
---|---|
Debian 用户可能想要安装 Debian 提供的软件包。不幸的是,Debian stable (Woody) 和 testing (sarge) 使用的是本 HOWTO 中已弃用的软件版本。我测试了 Debian unstable (sid) 中的相应软件包,它们可以正常工作。请注意,Debian 的维护者非常保守。“postfix-mysql”、“libsasl2”和“cyrus21-imapd”软件包是稳定的,即使它们仅在“unstable”树中可用。 |
cd /usr/local tar -xvzf mysql-4.0.18.tar.gz cd mysql-4.0.18 ./configure \ --prefix=/usr/local/mysql \ --enable-assembler \ --with-innodb \ --without-debug make make install /usr/local/mysql/bin/mysql_install_db echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf ldconfig ln -s /usr/local/mysql/include/mysql /usr/include/mysql ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql |
为了提高安全性,在您的系统上添加一个 mysql 用户,例如“mysql”,然后
chown -R mysql /usr/local/mysql/var |
如果您想在启动时自动启动 MySQL,请复制/usr/local/mysql/share/mysql/mysql.server到/etc/init.d/对于 SuSE,对于 Redhat 则是/etc/rc.d/init.d代替/etc/init.d/。此外,您需要添加符号链接到/etc/init.d/rc3.d对于 SuSE 和/etc/rc.d/rc3.d对于 Redhat。
以下示例适用于 SuSE Linux,并且应该很容易为 Redhat 和其他 Linux 发行版以及商业 Unix 系统进行更改。
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/ ln -s /etc/init.d/mysql.server /etc/init.d/rc3.d/S20mysql ln -s /etc/init.d/mysql.server /etc/init.d/rc3.d/k08mysql |
Berkeley DB 是构建 Cyrus-SASL 和 Cyrus-IMAP 的先决条件。某些系统附带了最新版本,但未安装头文件。请查看您的发行商 CD/DVD,以查看是否可以从软件包安装头文件。通常,此软件包称为 bdb-devel。
GNU/Debian Linux 附带的版本已过时,您将需要编译最新的版本。如果您已经在 Debian Box 上安装了 Berkeley DB,请卸载它以防止冲突。
同样非常重要的是,Cyrus-SASL 和 Cyrus-IMAP 使用相同版本的 Berkeley DB 进行编译,否则您可能会遇到问题。
![]() | Berkeley DB 版本 |
---|---|
我只测试了 bdb 的 4.0.x 版本。如果您成功使用了更新的版本,请告诉我。 |
原始站点: http://www.sleepycat.com/update/snapshot/db-4.0.14.tar.gz
从源代码构建 Cyrus SASL 和 IMAP 并非易事。有一些先决条件需要满足,并且有很多与身份验证相关的难题需要考虑。
原始站点: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.18.tar.gz
原始站点: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.2.3.tar.gz
在大多数系统中,默认情况下没有 cyrus 用户和 mailgroup。检查一个空闲的 UID,通常守护程序使用小于 100 的 UID 运行。例如,我使用 UID 96,这是 SuSE 在默认情况下使用的 UID/etc/passwd.
groupadd mail useradd -u 96 -d /usr/cyrus -g mail cyrus passwd cyrus |
tar -xvzf cyrus-sasl-2.1.18.tar.gz cd cyrus-sasl-2.1.18 ./configure \ --enable-anon \ --enable-plain \ --enable-login \ --disable-krb4 \ --disable-otp \ --disable-cram \ --disable-digest \ --with-saslauthd=/var/run/saslauthd \ --with-pam=/lib/security \ --with-dblib=berkeley \ --with-bdb-libdir=/usr/local/bdb/lib \ --with-bdb-incdir=/usr/local/bdb/include \ --with-openssl=/usr/local/ssl \ --with-plugindir=/usr/local/lib/sasl2 make make install mkdir -p /var/run/saslauthd cd saslauthd make testsaslauthd cp testsaslauthd /usr/local/bin echo /usr/local/lib/sasl2 >> /etc/ld.so.conf ldconfig |
SASL 库安装在/usr/local/lib/sasl2但有些程序期望 SASL 在/usr/lib/sasl2中。因此,创建一个符号链接是个好主意:ln -s /usr/local/lib/sasl2 /usr/lib/sasl2。
tar -xvzf cyrus-imapd-2.2.3.tar.gz cd cyrus-imapd-2.2.3 export CPPFLAGS="-I/usr/include/et" ./configure \ --with-sasl=/usr/local/lib \ --with-perl \ --with-auth=unix \ --with-dbdir=/usr/local/bdb \ --with-bdb-libdir=/usr/local/bdb/lib \ --with-bdb-incdir=/usr/local/bdb/include \ --with-openssl=/usr/local/ssl \ --without-ucdsnmp \ make depend make make install |
如果您希望在启动后自动启动 Cyrus IMAP 守护程序,则需要一个启动脚本。将以下脚本放置在/etc/init.d/。对于 Redhat,它是/etc/rc.d/init.d代替/etc/init.d/.
#!/bin/bash # # Cyrus startup script case "$1" in start) # Starting SASL saslauthdaemon /usr/local/sbin/saslauthd -c -a pam& # Starting Cyrus IMAP Server /usr/cyrus/bin/master & ;; stop) # Stopping SASL saslauthdaemon killall saslauthd # Stopping Cyrus IMAP Server killall /usr/cyrus/bin/master ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac |
如果我有时间,我将提供一个更完善的脚本,但是这个脚本可以工作。
现在在运行级别目录中创建符号链接 (SuSE)
ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/S20 ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/K10 |
对于 Redhat
ln -s /etc/rc.d/init.d/cyrus /etc/rc.d/rc3.d/S20cyrus ln -s /etc/rc.d/init.d/cyrus /etc/rc.d/rc3.d/K10cyrus |
本节介绍了如何将 IMAPd 从版本 2.1.x 更新到 2.2.x
![]() | 更新至关重要,可能意味着完全的数据丢失 |
---|---|
请先在测试/预生产服务器上测试此过程。还要仔细查看install-upgrade.html该文件随 cyrus-imapd 发行版一起提供。请注意,您应该为生产服务器计划停机时间,以便有时间解决问题。另请注意,对于此处提供的更新过程,我无法承担任何责任 |
Cyrus 更改了用于内部存储邮箱列表标志等的 dbd 数据库的格式。
发行版附带了一个转换脚本。最重要的数据库是/var/imap/mailboxes.db。没有该数据库,cyrus-imapd 将无法运行。这需要备份。让我们对数据库进行转储和备份。
/etc/init.d/cyrus stop # be sure no cyrus process is running lsof /var/imap/mailboxes.db # be sure NO process is accessing the mailbox file su - cyrus /usr/cyrus/bin/ctl_mboxlist -d > /tmp/mailbox.db.dump cp /var/imap/mailboxes.db /var/imap/mailboxes.db.old |
转换/var/imap/mailboxes.db
/usr/cyrus/bin/cvt_cyrusdb /var/imap/mailboxes.db berkeley /var/imap/mailboxes.db.new skiplist mv /var/imap/mailboxes.db.new /var/imap/mailboxes.db |
转换所有“seen”数据库
find /var/imap/user -name \*.seen -exec /usr/cyrus/bin/cvt_cyrusdb \{\} flat \{\}.new skiplist \; -exec mv \{\}.new \{\} \; |
转换 sieve 脚本
/usr/local/cyrus-imapd-2.2.3/tools/masssievec /usr/cyrus/bin/sievec |
在构建和安装 postfix 之前,请确保创建“postfix”和“postdrop”用户和组(如果系统上不存在)。首先检查组。您可以通过 grep postfix /etc/group 和 grep maildrop /etc/group 来检查。
如果没有这样的组和用户,您只需创建它们。搜索一个空闲的数字 UID 和 GID。在以下示例中,我将为 Postfix 使用 UID 和 GID 33333,为 maildrop UID 和 GID 使用 33335。这些 ID 与其他文档相对应。
groupadd -g 33333 postfix groupadd -g 33335 postdrop useradd -u 33333 -g 33333 -d /dev/null -s /bin/false postfix |
以下部分显示了如果您按照上述说明从源代码安装 MySQL,您必须执行的操作。如果您从二进制软件包(例如 rpm 或 deb)安装了 MySQL,则必须将 include 和 library-flags 更改为 -I/usr/include/mysql 和 -L/usr/lib/mysql。
![]() | 需要卸载旧的 MTA |
---|---|
重要的是,您要从基于 RPM 的系统中卸载任何 sendmail 版本。我建议您删除 sendmail,然后安装 Postfix。至少 SuSE RPM 需要 MTA。安装 Postfix-RPM 后,只需按照 HOWTO 在 RPM 安装之上安装 Postfix 即可。 |
tar -xvzf postfix-2.0.19.tar.gz cd postfix-2.0.19 make makefiles 'CCARGS=-DHAS_MYSQL \ -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH \ -I/usr/local/include/sasl -I/usr/local/bdb/include' \ 'AUXLIBS=-L/usr/local/mysql/lib/mysql \ -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2 -L/usr/local/bdb/lib' make make install |
在 make install 期间,会问几个问题。只需按 Enter 应该就能满足您的需求。对于 Redhat 用户,输入/usr/local/share/man
可能很有用。现在您需要创建一些符号链接以在系统启动时自动启动 Postfix。该示例适用于 SuSE Linux,请查阅您的供应商手册以了解其他发行版。
ln -s /usr/sbin/postfix /etc/init.d/rc3.d/S14postfix ln -s /usr/sbin/postfix /etc/init.d/rc3.d/K07postfix |
默认情况下,几乎所有 Linux 发行版都安装了 PAM。我不描述如何自行编译 PAM,因为它可能会破坏您的系统。相反,我将描述如何安装软件包。
基于 RPM 的发行版的用户可以发出以下命令
rpm -i pam-devel.rpm |
Debian 用户可以使用以下命令安装 devel 软件包
apt-get install libpam0g-dev |
tar -xvzf pam_mysql-0.5.tar.gz cd pam_mysql |
如果您自己编译了 mysql,请检查Makefile并输入 mysql 库的正确路径并添加编译器标志CFLAGS -I/path/to/mysql/include.
ifndef FULL_LINUX_PAM_SOURCE_TREE export DYNAMIC=-DPAM_DYNAMIC export CC=gcc export CFLAGS=-O2 -Dlinux -DLINUX_PAM \ -ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \ -Wpointer-arith -Wcast-qual -Wcast-align -Wtraditional \ -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline \ -Wshadow -pedantic -fPIC -I/usr/local/mysql/include export MKDIR=mkdir -p export LD_D=gcc -shared -Xlinker -x -L/usr/local/mysql/lib/mysql -lz endif |
在自定义该文件后,您可以继续进行 pam_mysql 编译。
make cp pam_mysql.so /lib/security [[ ! -d /var/lib/mysql ]] && mkdir /var/lib/mysql ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock |
cd /usr/local/apache/htdocs tar -xvzf web-cyradm-0.5.4.tar.gz touch /var/log/web-cyradm.log chown nobody /var/log/web-cyradm.log |
解压缩 web-cyradm 后,将其移动到您的 Web 服务器文档根目录中的某个位置。
就这样。现在您需要配置整个软件堆栈。
Web-cyradm 0.5.4 被认为是稳定的,并于 2003-12-05 发布
由于 web-cyradm 使用 PEAR 作为其数据库抽象层,因此您还需要 PEAR 的最新副本。这包含在最新的 PHP 版本中。我强烈建议将 PHP 更新到 4.3.4,因为已经修复了很多重要的错误。
一个常见的错误是忘记触摸日志文件并将所有者更改为 Apache UID。这通常是“nobody”或“wwwrun”。
现在我们需要为 Postfix 和 Web-cyradm 创建数据库和表,并向数据库添加用户。
Web-cyradm 附带了几个 MySQL 脚本insertuser_mysql.sql和create_mysql.sql。“第一个”将数据库用户插入到数据库“mysql”中,并创建数据库“mail”。“第二个”创建所需的表,并使用初始管理员用户和 cyrus 用户填充数据库。
其他脚本用于从旧版本进行增量升级。
在本示例中,数据库用户“mail”的密码为“secret”。请插入您喜欢的任何用户和密码。
初始超级用户的用户名是“admin”,密码是“test”。
![]() | 更改默认密码! |
---|---|
如果恶意用户想要获得对系统的未授权访问,则第一次尝试始终是供应商提供的默认用户名和密码。重要的是,您要在应用脚本之前在脚本中更改它们。 |
自定义用户名和密码后,应用脚本
/usr/local/mysql/bin/mysql -u root -p < \ /usr/local/apache/htdocs/web-cyradm/scripts/insertuser_mysql.sql /usr/local/mysql/bin/mysql mail -u mail -p < \ /usr/local/apache/htdocs/web-cyradm/scripts/create_mysql.sql |