web-dev-qa-db-ja.com

OpenDKIMが/ var / tmpに書き込めるようにSELinuxを変更するにはどうすればよいですか?

この回答を試しましたが( 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(最終版)

2
Chloe

OpenDKIMが他のディレクトリに書き込むことを許可する必要はありません。デフォルトの一時ディレクトリ/var/run/opendkimに書き込むだけです。このディレクトリはすでに存在し、書き込みを許可するための正しいSELinuxコンテキストを持っている必要があります。

3
Michael Hampton

まず、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構成を更新する必要があります。

3

Michael Hampton♦が言ったことは最善の解決策だと思います。

しかし、本当にTemporary/var/tmpに設定する必要がある場合はどうでしょうか。

次に、以下を試すことができます。

  1. dkim_milter_tが元々持っていたポリシーを変更する必要があります。したがって、.teファイルを作成します(以下の例opendkim.te

  2. dkim_milter_ttmp_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/からオープンファイルを作成して削除するための書き込みを許可します。

  1. Opendkim.ppを手動で再生成します

    checkmodule -M -m -o opendkim.mod opendkim.te

    semodule_package -o opendkim.pp -m opendkim.mod

  2. 変更を有効にする

    semodule -i opendkim.pp

たぶんあなたはさらに助けが必要です ここ 。そして man の場合。

0
Se ven