SELinux以外のシステムにインストールされているext4イメージのSELinuxコンテキストを読み取って変更する方法は?

SELinux以外のシステムにインストールされているext4イメージのSELinuxコンテキストを読み取って変更する方法は?

SELinuxをサポートしていないLinuxシステム(Arch Linux)があります。私のシステムでこれらのサポートを設定したくありません。これで、ファイルにいくつかのSELinuxコンテキストが設定されたext4ボリュームイメージがあります。一部のファイルのコンテキストを読み、変更する必要があります。このイメージをインストールしてls -lZ操作すると、?コンテキストの代わりにが表示されます。

システム全体でSELinuxを有効にしていない場合は、ファイルのSELinuxコンテキストにどのようにアクセスして変更しますか?これが不可能な場合はシステム全体には影響しませんが、インストールされたイメージ内でコンテキストを変更できる最小のSELinux構成は何ですか?

答え1

SELinux コンテキストはファイルの拡張属性 ( xattr, man 5 attr) に格納されます。core/attrこれを使用するためのツールはソフトウェアパッケージに付属しています。

SELinuxコンテキストを使用して属性を取得できますgetfattr。しかし、注意することがあります。デフォルトでは、名前空間の属性のみが一覧getfattr表示user.されます。必要な属性は名前空間にselinuxあります。したがって、すべての名前空間の属性を要求するには、オプションを渡すsecurity必要があります(値と名前のダンプなど)。-m --d

$ getfattr -m - -d bin/sh
# file: bin/sh
security.selinux="u:object_r:system_file:s0"

selinuxコンテキストを変更するためにsetfattrroot権限を必要とするツールを使用しました。

$ sudo setfattr -n security.selinux -v u:object_r:shell_exec:s0 bin/sh
$ getfattr -m - -d bin/sh
# file: bin/sh
security.selinux="u:object_r:shell_exec:s0"

関連情報