この回答を試しましたが( https://serverfault.com/a/744756/123651 )、それでもエラーが発生します。
Jan 7 23:56:33 ip-172-31-15-65 opendkim [24223]:AF15521407:dkim_eoh():リソースが利用できません:/var/tmp/dkim.AF15521407.ennuJKに一時ファイルを作成できません:アクセスが拒否されました
ここにいくつかのaudit.log
type=AVC msg=audit(1483827348.024:363280): avc: denied { write } for pid=22334 comm="opendkim" name="tmp" dev=xvde ino=40961 scontext=unconfined_u:system_r:dkim_milter_t:s0 tcontext=system_u:object_r:tmp_t:s0 tclass=dir
type=SYSCALL msg=audit(1483827348.024:363280): Arch=c000003e syscall=2 success=no exit=-13 a0=7f7eecd1f910 a1=c2 a2=180 a3=0 items=0 ppid=22035 pid=22334 auid=0 uid=495 gid=495 euid=495 suid=495 fsuid=495 egid=495 sgid=495 fsgid=495 tty=(none) ses=4038 comm="opendkim" exe="/usr/sbin/opendkim" subj=unconfined_u:system_r:dkim_milter_t:s0 key=(null)
# cat opendkim.te
module opendkim 1.0;
require {
type tmp_t;
type dkim_milter_t;
class dir write;
}
#============= dkim_milter_t ==============
#!!!! The source type 'dkim_milter_t' can write to a 'dir' of the following types:
# dkim_milter_data_t, cluster_var_lib_t, cluster_var_run_t, root_t, cluster_conf_t
allow dkim_milter_t tmp_t:dir write;
# semodule -i opendkim.pp
# ls -ldZ /var/tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /var/tmp
# service opendkim restart
Stopping OpenDKIM Milter: [ OK ]
Starting OpenDKIM Milter: [ OK ]
他に何を試すべきかわかりません。
参照:私はこのガイドを使用しました: https://www.rosehosting.com/blog/how-to-install-and-integrate-opendkim-with-postfix-on-a-centos-6-vps/
CentOSリリース6.8(最終版)
OpenDKIMが他のディレクトリに書き込むことを許可する必要はありません。デフォルトの一時ディレクトリ/var/run/opendkim
に書き込むだけです。このディレクトリはすでに存在し、書き込みを許可するための正しいSELinuxコンテキストを持っている必要があります。
まず、setroubleshoot
パッケージはsealert
コマンドを提供します。これにより、SELinux関連のログのトラブルシューティングを行い、解決策を提案できますが、最も安全な解決策ではない可能性があります。
EL6ドキュメント: リンク
EL7ドキュメント: リンク
デフォルトのディレクトリは/var/run/opendkim
であり、正しいdkim_milter_data_t
SELinuxタイプであるため、MichaelHamptonの答えは適切です。ただし、質問に答えるには、次のコマンドを使用して、正しいアクセス許可とSELinuxコンテキストを使用して/var/tmp/opendkim
(またはその他の呼び出したいディレクトリ)という新しいディレクトリを作成できます。
mkdir -p /var/tmp/opendkim
chown opendkim:opendkim /var/tmp/opendkim
chmod 0775 /var/tmp/opendkim
semanage fcontext -a -t dkim_milter_data_t "/var/tmp/opendkim(/.*)?"
restorecon -rv /var/tmp/opendkim
これらの変更は再起動後も永続的であり、この回答の範囲外であるこの新しく作成されたディレクトリを使用するには、opendkim構成を更新する必要があります。
Michael Hampton♦
が言ったことは最善の解決策だと思います。
しかし、本当にTemporary
を/var/tmp
に設定する必要がある場合はどうでしょうか。
次に、以下を試すことができます。
dkim_milter_t
が元々持っていたポリシーを変更する必要があります。したがって、.te
ファイルを作成します(以下の例opendkim.te
)
dkim_milter_t
にtmp_t
にアクセスする権限を与えます。そのディレクトリは/var/tmp/
です。
# ll -Zd /var/tmp/ drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /var/tmp/
ファイルは以下のようになります
module opendkim 1.0;
require {
type tmp_t;
type dkim_milter_t;
class dir { write remove_name add_name };
class file { write create unlink open };
}
allow dkim_milter_t tmp_t:dir { write remove_name add_name };
allow dkim_milter_t tmp_t:file { write create unlink open };
もちろん、適切に変更することもできます。しかし、私はそれがあなたが最も必要としないものだと思います。実際には、dkim_milter_t
に、/var/tmp/
からオープンファイルを作成して削除するための書き込みを許可します。
Opendkim.ppを手動で再生成します
checkmodule -M -m -o opendkim.mod opendkim.te
semodule_package -o opendkim.pp -m opendkim.mod
変更を有効にする
semodule -i opendkim.pp