本篇是继上一篇:
的补充。
实话说,我已经依赖于发行版预编译软件包好久了,甚至最后一次运行 rpmbuild 都已经是几年前的事。
现在突然再来一次从源代码开始编译安装,看着屏幕上飞快滚动的编译过程输出,想起当年自己为了突破 AMD K6 2+ CPU 超频频率上限而修改 Linux Kernel 的相关单元然后反复编译、测试的过程,颇有故地重游之感。
话说 Dovecot 用了这么久,它网站我还真的是第一次上,Logo也是第一次看到:
言归正传。
首先还是下载安装龙蜥 Anolis Linux 23 GA版。选择最小安装。安装过程过于简单不表。
[root@anolis23 ~]# dnf install pam-devel openssl-devel autoconf automake gcc gcc-c++
编译环境需要安装 pam-devel 才能使 Dovecot 通过 libpam 进行用户身份校验。
同时,必须安装 openssl-devel 才能使 Dovecot 支持加密连接。就现在的网络环境来说,必须要有SSL加密连接支持,传统的不加密POP3连接并不安全,要弃用。
下载源代码包,解压,检查环境生成 Makefile:
[root@anolis23 ~]# wget https://dovecot.org/releases/2.3/dovecot-2.3.21.tar.gz
[root@anolis23 ~]# tar zxf dovecot-2.3.21.tar.gz
[root@anolis23 ~]# cd dovecot-2.3.21/
[root@anolis23 dovecot-2.3.21]# ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-pam
需要给出的参数包括指定使用pam进行用户校验,以及定义 prefix、localstatedir 和 sysconfdir。要注意的是,这三个目录路径如果不专门给出定义而是按默认,也即这些位置都会基于 /usr/local/ 目录,那么 Dovecot 服务是运行不起来的。
因为 dovecot 服务需要用非 root 账号启动子进程,但 systemd 会拦截非root账号服务进程修改 /usr/local/ 位置之下的下级目录属性,导致 Dovecot 服务启动失败。
成功有效的环境检查过程,最后的输出应类似如下:
config.status: creating stamp.h
config.status: creating dovecot-config.in
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
Install prefix . : /usr
File offsets ... : 64bit
I/O polling .... : epoll
I/O notifys .... : inotify
SSL ............ : yes (OpenSSL)
GSSAPI ......... : no
passdbs ........ : static passwd passwd-file shadow checkpassword
: -pam -bsdauth -ldap -sql
userdbs ........ : static prefetch passwd passwd-file checkpassword
: -ldap -sql
CFLAGS ......... : -std=gnu99 -g -O2 -fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -mfunction-return=keep -mindirect-branch=keep -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -fno-builtin-strftime -Wstrict-aliasing=2
SYSTEMD ........ : simple - /usr/lib/systemd/system/dovecot.service
SQL drivers .... :
: -pgsql -mysql -sqlite -cassandra
Full text search : squat
: -lucene -solr
可以注意以上输出中,Install prefix 设置为/usr。SSL 应显示为yes,如果是 no 则缺失了 OpenSSL 的开发包。
然后是编译和安装,耐心等待即可。
[root@anolis23 ~]# make ; make install
可以分开执行,观察 make 的执行结果。
参考文档说明:
https://doc.dovecot.org/configuration_manual/quick_configuration/#quick-configuration
其中,可以通过执行 doveconf 命令:
doveconf -n | head -n 1
确认配置文件应放到哪里,按本文的编译配置应为 /etc/dovecot/ 。然后复制范例配置过去:
[root@anolis23 ~]# cp -r /usr/local/share/doc/dovecot/example-config/* /etc/dovecot/
然后添加专门给 Dovecot 服务用的账号 dovenull 和 dovecot,并作适当的账号设置:
[root@anolis23 ~]# adduser -u 500 dovenull
adduser warning: dovenull's uid 500 outside of the UID_MIN 1000 and UID_MAX 60000 range.
[root@anolis23 ~]# adduser -u 501 dovecot
adduser warning: dovecot's uid 501 outside of the UID_MIN 1000 and UID_MAX 60000 range.
[root@anolis23 ~]# groupmod --gid 500 dovenull
[root@anolis23 ~]# groupmod --gid 501 dovecot
[root@anolis23 ~]# usermod -d /usr/libexec/dovecot dovecot
[root@anolis23 ~]# usermod -d /usr/libexec/dovecot dovenull
[root@anolis23 ~]# usermod -s /sbin/nologin dovecot
[root@anolis23 ~]# usermod -s /sbin/nologin dovenull
为和普通用户区分,我把 UID 和 GID 都设置为小于默认的1000,忽略 adduser 给出的 warning 提示即可。
如果想把这两个账号设置到和发行版预设(比如龙蜥 Anolis Linux 8)一样,如下是参考:
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:971:970:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
最后是设置pam如何支持dovecot校验用户身份,方法是创建这个配置文件:
/etc/pam.d/dovecot
其内容为:
#%PAM-1.0
auth required pam_nologin.so
auth include password-auth
account include password-auth
session include password-auth
这个文件的属性应符合如下设置:
[root@anolis23 pam.d]# ll -Z dovecot
-rw-r--r--. 1 root root system_u:object_r:etc_t:s0 164 Sep 29 23:27 dovecot
本来剩下的配置过程和上一篇是一样的,但由于版本23的环境设置稍有不同,加密证书的创建脚本要先切换到脚本所在位置再运行,所以就列一下。
首先是看自己需要,修改证书设置配置文件:
/usr/share/doc/dovecot/dovecot-openssl.cnf
设置SSL证书的信息。
然后检查证书的目的目录是否已经存在,没有就手工创建:
[root@anolis23 ~]# mkdir /etc/pki/private
[root@anolis23 ~]# chmod 700 /etc/pki/private/
[root@anolis23 ~]# ln -s /etc/pki/private/ /etc/ssl/private
[root@anolis23 ~]# ll /etc/ssl
total 4
-rw-r--r--. 1 root root 1167 Apr 13 17:02 README
lrwxrwxrwx. 1 root root 47 Apr 13 17:04 cert.pem -> ../pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. 1 root root 44 Apr 13 17:04 certs -> ../pki/ca-trust/extracted/pem/directory-hash
lrwxrwxrwx. 1 root root 26 Apr 13 17:04 ct_log_list.cnf -> ../pki/tls/ct_log_list.cnf
lrwxrwxrwx. 1 root root 22 Apr 13 17:04 openssl.cnf -> ../pki/tls/openssl.cnf
lrwxrwxrwx. 1 root root 17 Sep 27 11:44 private -> /etc/pki/private/
再然后运行脚本生成证书:
[root@anolis23 ~]# cd /usr/share/doc/dovecot/
[root@anolis23 dovecot]# bash mkcert.sh
..+........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+......+............+...+......+.+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+....+..+...+.+...........+......................+..+...+...+....+.........+......+.........+......+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
........+...+....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+......+......+.+..+......+....+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*............+..+............+.+......+.....+......+..........+..+.............+........+......+......+.......+..+.........+.......+.....+.............+..+.......+..+...+.......+......+...+.........+.....+............+.....................+...+.+.....+.+..............+.+...+......+...+......+..+....+........+...+....+...+..+..................+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
subject=OU = IMAP server, CN = imap.example.com, emailAddress = postmaster@example.com
SHA1 Fingerprint=41:1B:EC:68:28:2E:DD:A3:5B:67:28:C4:4F:1F:0D:09:ED:B9:B9:8E
[root@anolis23 dovecot]# ll /etc/ssl/private/
total 3
-rw-------. 1 root root 1704 Sep 27 12:03 dovecot.pem
运行完检查一下应该已经正常生成。
后面的配置过程和我上一篇文章是一样的,就不重复了:
要说区别的话,就是由于示范配置内容基本上都是注释起来按默认。如果对默认不放心,可以参照龙蜥 Anolis Linux 8.x 版本的配置文件,把在示范配置中被注释了的设置项目取消注释,明示之。
如果在安装自己编译的 Dovecot 后要卸载,在源代码解压的目录内运行
make uninstall
即可实现卸载。
如果要重新编译(包括重新检测配置),要在源代码解压的目录内先运行
make clean
进行清理。
最后还是要说说学习。学习我只推崇看书。什么视频、网课都是浪费时间。如果自己没有足够的能力把零碎的知识片段拼凑起来,那么还是认认真真买本书读透了再说。
本站微信订阅号:
本页网址二维码: