尝试设置 Postfix 以运行 chrooted。只有一点信息来自手册页,它只是说要遵循 master.cf 中的说明。master.cf 是不言自明的,只需在 chroot 列中设置“y”。但是不,它仍然不起作用。
# pgrep master
12661
# ls -lh /proc/12661/root
lrwxrwxrwx 1 root root 0 Feb 23 22:03 /proc/12661/root -> /
还是指向我的root!这意味着它仍然从 /etc/passwd 中读取用户相关信息(例如 local_recipient_maps),我不想这样做。我想在 chroot 中使用一个单独的 passwd 文件。我尝试设置:
local_recipient_maps = $maps
maps=/var/spool/postfix/etc/passwd
但仍然没有。它仍然从 /etc/passwd 读取。
Chroot 环境设置在 /var/spool/postfix 中,所有需要的文件和库都在那里。
master.cf
:
smtp inet n - y - - smtpd
smtpd pass - - y - - smtpd
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - y 300 1 qmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - y - - proxymap
proxywrite unix - - y - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n y - - local
virtual unix - n y - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache
postconf -n
:
command_directory = /var/spool/postfix/usr/sbin
config_directory = /var/spool/postfix/etc/postfix
daemon_directory = /var/spool/postfix/usr/libexec/postfix
data_directory = /var/spool/postfix/var/lib/postfix
debug_peer_level = 2
default_privs = nobody
header_checks = regexp:/var/spool/postfix/etc/postfix/header_checks
html_directory = no
inet_interfaces = loopback-only
inet_protocols = ipv4
local_recipient_maps = $maps
mail_owner = postfix
mailq_path = /var/spool/postfix/usr/bin/mailq
manpage_directory = /usr/local/man
maps = /var/spool/postfix/etc/passwd
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
newaliases_path = /var/spool/postfix/usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
sample_directory = /var/spool/postfix/etc/postfix
sendmail_path = /var/spool/postfix/usr/sbin/sendmail
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name
unknown_local_recipient_reject_code = 550
主进程不会运行 chrooted,因为它会产生所有其他实际执行工作的服务。检查各种派生服务的根目录(如 qmgr)。
chroot(在 master.cf 中)的目的是限制可能由漏洞利用造成的损害,而不是向 postfix 提供一组不同的信息。如果你想向不同的用户组展示 postfix,可以查看http://www.postfix.org/VIRTUAL_README.html或者准备一个完整的 chroot 以手动启动初始 postfix 过程。