尝试设置 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 -> /
仍然指向我的根!这意味着它仍然从 /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
答案1
主进程不会以 chroot 方式运行,因为它会生成其他所有实际执行工作的服务。检查各种生成的服务的根目录(如 qmgr)。
chroot(在 master.cf 中)的目的是限制可能由漏洞造成的损害,而不是向 postfix 提供不同的信息集。如果您想向 postfix 提供不同的用户集,可以查看http://www.postfix.org/VIRTUAL_README.html或者准备一个完整的 chroot 来手动启动初始 postfix 进程。