我正在尝试配置 Postfix 邮件服务器。root 的邮件可以访问。但在检查非 root 用户的邮件时,我收到以下错误
/var/spool/mail/root:权限被拒绝
文件/var/spool/mail/$USER
存在于相应的用户,但邮件命令仍然引用根的文件。
postconf -n 的输出
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
mydomain = domain.in
myhostname = server.domain.in
mynetworks = 166.64.32.22, 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
答案1
所以,这里的问题与 postfix 完全无关。服务器端的 Postfix 行为正常,但邮件客户端行为异常。
默认情况下mail
命令将使用$MAIL
环境变量来确定邮箱的位置(除非您使用-f
参数明确告知它)。在 CentOS bash shell 中,$MAIL 变量的默认值是/var/spool/mail/$USER
。摘自man mail
。
邮件
如果已设置,则用作用户的邮箱。否则,将使用系统相关的默认值。可以是 protocol:// 字符串(有关更多信息,请参阅文件夹命令)。
OP 在评论中指出他使用su myuser
root 用户在 shell 上更改用户。不幸的是,这会产生一些影响。变量 $MAIL 仍然指向/var/spool/mail/root
。因此,邮箱路径没有改变,但特权已被降为非 root 用户。
要解决该问题,您可以使用su -l myuser
在 shell 上更改用户。代码片段来自man su
。
-、-l、--登录
使 shell 成为登录 shell
如果没有-l
,环境变量就不会自行改变。
结论:两个软件(postfix 和 bsd-mailx)都运行正常。问题在于 OP 在更改用户之前未能设置环境变量。