すべてのログを読めるようにするために、logstash を root として実行したいです (すべてのログへのアクセスを許可するのは非常に面倒です)。ただし、サーバー上でそれが暴走するのは望ましくないので、SELinux で制限することを考えました。
私が見つけたオプションは次のとおりです。
- logstash 用の新しいラベル全体を作成します。これは、logstash 構成ファイル、logstash 実行可能ファイル、ライブラリなどのラベルも作成することを意味します。
clogd_t
別のプロセス用に設計されたラベルを使用してlogstashを実行します。名前にそれが含まれているため、注目しましたlog
が、疑わしい書き込み権限は見つかりませんでした。sudo sesearch --allow -s clogd_t | grep clogd_t | less -p write
- 諦めて制約のないルートプロセスとして実行する
どちらも普通のことでしょうか?
念のため言っておきますが、私はCentOS 6.7を使用しています。
答え1
より明確で、何が起こっているかを制御できるため、カスタム ポリシーを作成することをお勧めします。
カスタムポリシー
私の理解では、これは Java ベースのデーモンなので、 として実行するのがおそらく賢明ですsystem_u:system_r:logstash_t
。次に、すべてのログ ファイルへの (読み取り専用?) アクセスを logstash_t ドメインに付与し、最後に logstash の実行に必要な追加の権限を付与する必要があります。
refpolicy インターフェースを使用すると、次のようになります。
policy_module(logstash, 1.0)
# define the entry point and the domain
type logstash_exec_t
init_daemon_domain(logstash_t, logstash_exec_t)
次に、logstash デーモンがログ ファイルを読み取ることができる必要があります。
logging_search_all_logs(logstash_t)
logging_getattr_all_logs(logstash_t)
logging_read_all_logs(logstash_t)
これでほとんどの作業は完了するはずです。その後、残りの部分を追加する必要があります。
再利用されたポリシー
2 番目の点に関しては、sesearch によって書き込み権限が報告されない理由がわかりませんが、ソースを見ると次のようになります。
# clogd.te
storage_raw_read_fixed_disk(clogd_t)
storage_raw_write_fixed_disk(clogd_t)
# storage.te
########################################
## <summary>
## Allow the caller to directly write to a fixed disk.
## This is extremely dangerous as it can bypass the
## SELinux protections for filesystem objects, and
## should only be used by trusted domains.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`storage_raw_write_fixed_disk',`
# and the rest of the stuff here...
ログ監視ツールに求められる機能ではありません。2 番目のソリューションに適したものが見つかるかもしれませんが、不要な権限を追加で取得しないように注意してください。そうしないと、selinux 内でプロセスを実行する目的が台無しになります。
それが役に立てば幸い。