カスタムポリシー

カスタムポリシー

すべてのログを読めるようにするために、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 内でプロセスを実行する目的が台無しになります。

それが役に立てば幸い。

関連情報