我正在嘗試配置 postfix 郵件伺服器。 root 的郵件是可以存取的。但在檢查非 root 使用者的郵件時,出現以下錯誤
/var/spool/mail/root:權限被拒絕
文件/var/spool/mail/$USER
存在於各個使用者中,但郵件命令仍然引用 root 的文件。
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
命令in 將使用$MAIL
環境變數來確定郵箱的位置(除非您使用-f
參數明確告訴它)。在 CentOS bash shell 中,$MAIL 變數的預設值為/var/spool/mail/$USER
。片段來自man mail
.
郵件
用作使用者的郵箱(如果設定)。否則,將使用系統相關的預設值。可以是協議://字串(有關詳細信息,請參閱資料夾命令)。
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未能在更改使用者之前設定環境變數。