
私は SELinux 対応のコードを書いています。このセキュリティ モジュールは初めてなので、学習曲線が急です。
SELinux 環境でコードが動作するには、ファイルのラベルを変更できる必要があります。たとえば、一時ファイルシステムをマウントしていて、マウント後に元のラベルを復元したいとします。
マウント部分では明らかに root (CAP_SYS_ADMIN 権限を持つ) である必要がありますが、再ラベル付け部分でも root である必要がありますか?
Fedora では、自分が所有するファイルのラベルを変更することができます。たとえば、権限のないユーザーとして次の操作を実行できます。
$ touch /tmp/test
$ ls -Z /tmp/test
unconfined_u:object_r:user_tmp_t:s0 /tmp/test
$ chcon system_u:object_r:etc_t:s0 /tmp/test
$ ls -Z /tmp/test
system_u:object_r:etc_t:s0 /tmp/test
別のユーザーが所有するファイルに再ラベルを付ける権限がないようです。
しかし、RedHatで次のことが分かりましたマニュアル:
SELinux ポリシーは、ユーザーが特定のファイルの SELinux コンテキストを変更できるかどうかを制御します。
これは、この動作が実際に構成可能であり、自分が所有するファイルのラベルを変更できるとは限らないことを示しているようです。
編集:
Fedora ではこれを を使用して実装しているようですconstraints
。
# dnf install setools-console
# seinfo --constrain
...
constrain file {relabelto create relabelfrom } (u1 == u2 or ( t1 == can_change_object_identity ));
...