私はPostfixメールサーバーを設定しようとしています。ルートのメールはアクセス可能です。しかし、非ルートユーザーのメールをチェックしているときに、次のエラーが表示されます。
/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 シェルでは、$MAIL 変数のデフォルト値は です/var/spool/mail/$USER
。 からの抜粋man mail
。
郵便
設定されている場合、ユーザーのメールボックスとして使用されます。設定されていない場合は、システム依存のデフォルトが使用されます。protocol:// 文字列にすることができます (詳細については、folder コマンドを参照してください)。
OPはコメントで述べているシェルでユーザーを変更するためにルート ユーザーから使用しましたsu myuser
。残念ながら、これは何らかの影響があります。変数 $MAIL は引き続き を指します/var/spool/mail/root
。したがって、メールボックス パスは変更されていませんが、特権は非ルート ユーザーに降格されています。
su -l myuser
この問題に対処するには、シェルでユーザーを変更するために を使用します。 からの抜粋man su
。
-、-l、--ログイン
シェルをログインシェルにする
がなければ-l
、環境変数は変更されません。
結論: 両方のソフトウェア (postfix と bsd-mailx) は正しく動作しました。問題は、ユーザーを変更する前に環境変数を設定できなかった OP にあります。