ファイルを編集してACL / SELinuxセキュリティコンテキストを維持する方法は?

ファイルを編集してACL / SELinuxセキュリティコンテキストを維持する方法は?

CentOS 6.2を使用しており、ファイルがあります。代替アクセス方法文字がドットとして表示されます。

ls -l myfile
-rwxr-x---. 1 me mygroup   172 Aug 13 10:03 myfile
          ^ 
          This dot.

lsが表示するヘルプから情報 coreutils 'ls 呼び出し'

Following the file mode bits is a single character that specifies
whether an alternate access method such as an access control list
applies to the file.  When the character following the file mode
bits is a space, there is no alternate access method.  When it is
a printing character, then there is such a method.

GNU `ls' uses a `.' character to indicate a file with an SELinux
security context, but no other alternate access method.

A file with any other combination of alternate access methods is
marked with a `+' character.

だからこのファイルにSELinuxセキュリティコンテキストそれに割り当てられました。使用事実を確認してくださいそして太るこのコマンドは以下を表示します。

getfacl myfile
# file: myfile
# owner: me
# group: mygroup
user::rwx
group::r-x
other::---

getfattr -m - myfile
# file: myfile
security.selinux

getfattr -n security.selinux myfile
# file: myfile
security.selinux="unconfined_u:object_r:usr_t:s0"

元のファイルをバックアップしました。

cp --preserve=all myfile myfile.ORIG

その後、元のテキストが編集されました。

vi myfile
:wq

これにより、既存のすべての背景が破壊されます。

ls -l myfile
-rwxr-x---  1 me mygroup   172 Aug 13 10:06 myfile
          ^ 
          The dot is gone.

getfattr -n security.selinux myfile
myfile: security.selinux: No such attribute

getfacl myfile
# file: myfile
# owner: me
# group: mygroup
user::rwx
group::r-x
other::---

このファイルを編集し、拡張プロパティと代替アクセス方法の設定を維持するための推奨手順は何ですか?

答え1

編集者は、ファイルを保存する際に、2つの戦略のうちの1つに従うことができます。

  • 新しいファイルを作成し、それを移動して古いファイルを置き換えます。最大の利点は、有効なファイルが常に存在することです。以前のバージョンは自動的に新しいバージョンに置き換えられます。欠点は、新しいファイルが作成されるため、編集者が最善を尽くして古いファイルの所有権と権限を手動でコピーする必要があることです。この方法はハードリンクも切断します。
  • 既存のファイルに書き込みます。これにより、ハードリンクと権限が維持されます。また、追加のディスク容量は必要ありませんが、まずバックアップを実行することをお勧めします。これは意味がありません。この方法の主な欠点は、ファイルが保存されている間にプログラムがファイルを読み取ろうとすると、切り捨てられたファイルが表示されることです。保存が中断されると(停電など)、ファイルの一部が保存されます。

エディタは通常、最初の方法を好み、既存のファイルへの権限をコピーできない場合、または既存のファイルにハードリンクがあることを検出すると、2番目の方法に切り替えます。

ほとんどのエディタはおそらく追加のSELinuxプロパティの存在を認識しないので、最初の方法を適用します。最新バージョンのGNU coreutils(≥8.6)を使用すると、ターゲットcp --preserve=context --attributes-onlyファイルの内容を変更することなく、あるファイルのSELinuxコンテキストを別のファイルにコピーできます。

または、編集者にファイルをその場で編集するように指示します。 Vim設定の使用 backupcopyオプションyesこれがシステムのデフォルト設定ではない場合。 Emacsで設定backup-by-copying変える到着するt

関連情報