mv -Z
デフォルトの selinux コンテキストを適用します。他のすべての呼び出しとは異なり、mv
移動したディレクトリ内のすべてのファイルを個別に処理しますか?
答え1
はい。
$ mkdir a
$ touch a/b
$ ls -Z -d a a/b
unconfined_u:object_r:user_home_t:s0 a
unconfined_u:object_r:user_home_t:s0 a/b
$ strace -f mv -Z a ~/.local/share/Trash/files
...
open("/home/alan/.local/share/Trash/files/a/b", O_RDONLY|O_NOFOLLOW) = 3
...
fgetxattr(3, "security.selinux", "unconfined_u:object_r:user_home_t:s0", 255) = 37
fsetxattr(3, "security.selinux", "unconfined_u:object_r:data_home_t:s0", 37, 0) = 0
...
$ cd ~/.local/share/Trash/files
$ ls -Zd a a/b
unconfined_u:object_r:data_home_t:s0 a
unconfined_u:object_r:data_home_t:s0 a/b
また、単一のファイルシステム内でディレクトリの移動が途中で失敗する可能性もあります。つまり、ラベルを変更するとディスク容量が不足するためです。ラベルの上書きは2番目のステップなので、この効果は軽減されます。初期移動操作は依然として単一原子によって実行されますrename
。これは、ラベルは一貫性がないが、ファイルは他のすべての点で一貫性があることを意味します。スペースを確保したら、ラベルを固定するのは簡単です。