メールコマンドは常にルートのファイルを指す

メールコマンドは常にルートのファイルを指す

私は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 にあります。

関連情報