mail 命令始终指向 root 的文件

mail 命令始终指向 root 的文件

我正在尝试配置 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 myuserroot 用户在 shell 上更改用户。不幸的是,这会产生一些影响。变量 $MAIL 仍然指向/var/spool/mail/root。因此,邮箱路径没有改变,但特权已被降为非 root 用户。

要解决该问题,您可以使用su -l myuser在 shell 上更改用户。代码片段来自man su

-、-l、--登录

使 shell 成为登录 shell

如果没有-l,环境变量就不会自行改变。

结论:两个软件(postfix 和 bsd-mailx)都运行正常。问题在于 OP 在更改用户之前未能设置环境变量。

相关内容