cronjobで実行されるコマンド(logrotateなど)ではselinuxポリシーが機能しますが、コマンドラインから直接実行されるコマンドでは機能しないのはなぜですか?
コマンドラインから手動でlogrotateを実行すると、正常に動作します。しかし、cronjobで実行すると、audit.logにselinuxがwwwなどへのアクセスをブロックするというエラーが表示されます。
なぜそんなことですか?テストするためにcronjobで実行されていることをどのようにシミュレートできますか?
ベストアンサー1
cron
を実行すると、logrotate
SELinuxはこれをlogrotate_t "type"に制限します。この「タイプ」は、他のファイルタイプを変更することを制限します(「エスケープ制限」とも呼ばれます)。
いつあなたlogrotateを実行すると、「無制限」タイプで始まる可能性が高くなります。つまり、logrotate
プロセスがファイルを変更できることを意味します。プロセスを再開したり、シグナルを送信したりすることもできますlogrotate
(例:postrotate)。このアクティビティはSELinuxによって制限されることがあります。
私の提案は、SELinuxに次のようにlogrotate_t型を制限外にすることを許可(「許可」)するように指示することです。
semanage permissive -a logrotate_t
これは中程度の軽い解決策です。SELinuxをオフにするそして、必要な制限エスケープを正確に許可するようにポリシーを微調整します(おそらくカスタムタグを使用)。この変更を元に戻すには、を使用しますsemanage permissive -d logrotate_t
。
cron実行プロセスをシミュレートする最善の方法は、タスクをcronに入れることです。そして私も知っていますruncon
、私はそれを使用することに成功しませんでした。