私はFedora 23とSELinuxを初めて使用します。 NetworkManager経由でOpenVPNクライアントを使用しています。 OpenVPNアクセスに必要なすべてのファイル(証明書、CA、秘密鍵)が内部に保存されてい~/.cert
ますupdatecon -R -v ~/.cert
。出力の関連部分は次のとおりですgrep AVC /var/log/audit/audit.log | less
。
type=AVC msg=audit(1457179403.296:364): avc: denied { open } for pid=2608 comm="nm-openvpn-serv" path="/home/ggoncalves/.cert/ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.296:365): avc: denied { open } for pid=2608 comm="nm-openvpn-serv" path="/home/ggoncalves/.cert/ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.330:366): avc: denied { read } for pid=2611 comm="openvpn" name="lastline-ca.crt" dev="dm-2" ino=2888749 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.332:367): avc: denied { read } for pid=2611 comm="openvpn" name="ggoncalves.crt" dev="dm-2" ino=2888751 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
type=AVC msg=audit(1457179403.332:368): avc: denied { read } for pid=2611 comm="openvpn" name="ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
SELinuxを使用してから数日しか経っていないので、どこから探すべきかわかりません。どのようなヒントがありますか?
編集する:svirt_sandbox_file_t
私が見るにはラベルに問題があるようです。私はこれらのファイルにタグを付ける必要があると思いますhome_cert_t
。
編集2:実際、svirt_sandbox_file_t
何らかの理由で私のホームディレクトリ全体にフラグが立てられました。これがDocker戦略の特徴ですか、それともバグですか?
修正する
まあ、少し時間がかかりました。誰かが同じ状況に遭遇した場合に備えて、問題をより詳しく説明します。svirt_sandbox_file_t
私のホームディレクトリをフラグ付きのボリュームとしてマウントしたとき、Dockerがそれをプロパティとして指定したことがわかりました:Z
(言及どおり)。ここ)。その後、Dockerはホームディレクトリ全体にラベルを繰り返し適用しますが、どういうわけかFSラベルを再構築または適用しませんrestorecon
。
私のホームディレクトリを元の権限に復元するためにrsync
一時フォルダに保存し、その中のすべてのアイテムを削除してrsync
復元しました。最も賢いアイデアではありませんが、効果があります。
答え1
ファイルのターゲットコンテキストタイプがまだ間違っています。
svirt_sandbox_file_t
のファイルはでマークする必要が~/.cert
ありますhome_cert_t
。もう一度お試しください。
restorecon -Rf ~/.cert
またはタイプを強制してみてください。
chcon -t home_cert_t ~/.cert/*
selinux-policyまたはdocker selinuxポリシーに誤ったデフォルトラベルを引き起こすバグがある可能性があります。