O comportamento padrão para copiar arquivos ou sub-diretórios de um diretório para outro é que os objetos copiados não mantêm seu tipo de SELinux (domínio) que é oposto aos objetos que foram movidos. Objetos copiados herdam o contexto de segurança do domínio pai. É possível escrever a política do SELinux que repita o comportamento do comando "cp --preserve = context"? Em outras palavras, quando um objeto é copiado de um diretório para outro, ele pode preservar o tipo (domínio) do SELinux. o pai anterior. Por exemplo, se a estrutura dos diretórios se parece com isso
[root@localhost user_test_three]# ls -Zd /tmp/test_dir/test1
drwxrwxrwx. root root system_u:object_r:seuser_object_test_one_t:s0 test1
[root@localhost user_test_three]# ls -Zd /tmp/test_dir/test2
drwxrwxrwx. root root system_u:object_r:seuser_object_test_two_t:s0 test2
[root@localhost user_test_three]# ls -Z /tmp/test_dir/test1 /tmp/test_dir/test2
/tmp/test_dir/test1:
-rw-rw-r--. user_test_four user_test_four seuser_test_four_u:object_r:seuser_object_test_one_t:s0 user_one_test1_file1
/tmp/test_dir/test2:
-rw-rw-r--. user_test_four user_test_four seuser_test_four_u:object_r:seuser_object_test_two_t:s0 user_one_test2_file1
depois de copiar o arquivo " user_one_test2_file1 " do diretório " / tmp / test_dir / test2 / " no diretório " / tmp / test_dir / test1 / O conteúdo dos "diretórios" deve ser assim
[root@localhost user_test_three]# ls -Z /tmp/test_dir/test1 /tmp/test_dir/test2
/tmp/test_dir/test1:
-rw-rw-r--. user_test_four user_test_four seuser_test_four_u:object_r:seuser_object_test_one_t:s0 user_one_test1_file1
-rw-rw-r--. user_test_four user_test_four seuser_test_four_u:object_r:seuser_object_test_two_t:s0 user_one_test2_file1
/tmp/test_dir/test2:
-rw-rw-r--. user_test_four user_test_four seuser_test_four_u:object_r:seuser_object_test_two_t:s0 user_one_test2_file1
Por enquanto, o arquivo TE parece assim
policy_module(user_test_threeLB, 1.0.0)
require
{
type fs_t;
type unconfined_t;
class file
{
getattr setattr read write rename
};
class dir
{
getattr setattr read write open rename remove_name add_name
create
};
class filesystem
{
associate
};
role object_r;
}
type seuser_object_test_one_t;
type seuser_object_test_two_t;
type seuser_object_test_four_t;
role object_r types
{
seuser_object_test_one_t seuser_object_test_two_t
seuser_object_test_four_t
};
allow seuser_object_test_one_t fs_t: filesystem
{
associate
};
allow seuser_object_test_two_t fs_t: filesystem
{
associate
};
allow seuser_object_test_four_t fs_t: filesystem
{
associate
};
allow unconfined_t seuser_object_test_one_t: file
{
append create getattr setattr open read write rename unlink
};
allow unconfined_t seuser_object_test_two_t: file
{
append create getattr setattr open read write rename unlink
};
allow unconfined_t seuser_object_test_four_t: file
{
append create getattr setattr open read write rename unlink
};
allow unconfined_t seuser_object_test_one_t: dir
{
getattr setattr read write open rename remove_name add_name create
search rmdir
};
allow unconfined_t seuser_object_test_two_t: dir
{
getattr setattr read write open rename remove_name add_name create
search rmdir
};
allow unconfined_t seuser_object_test_four_t: dir
{
getattr setattr read write open rename remove_name add_name create
search rmdir
};
userdom_unpriv_user_template(seuser_test_one)
userdom_unpriv_user_template(seuser_test_two)
userdom_unpriv_user_template(seuser_test_four)
role seuser_test_one_r types
{
seuser_object_test_one_t
};
role seuser_test_two_r types
{
seuser_object_test_two_t
};
role seuser_test_four_r types
{
seuser_object_test_four_t seuser_object_test_three_t
seuser_object_test_two_t seuser_object_test_one_t
};
allow seuser_test_one_t seuser_object_test_one_t: dir
{
add_name create getattr setattr open read remove_name rename rmdir
search write
};
allow seuser_test_one_t seuser_object_test_one_t: file
{
append create getattr setattr open rename read write
};
allow seuser_test_two_t seuser_object_test_two_t: dir
{
add_name create getattr setattr open read remove_name rename rmdir
search write
};
allow seuser_test_two_t seuser_object_test_two_t: file
{
append create getattr setattr open rename read write
};
allow seuser_test_four_t seuser_object_test_one_t: dir
{
add_name create getattr setattr open read remove_name rename rmdir
search write
};
allow seuser_test_four_t seuser_object_test_one_t: file
{
append create getattr setattr open rename read write
};
allow seuser_test_four_t seuser_object_test_two_t: dir
{
add_name create getattr setattr open read remove_name rename rmdir
search write
};
allow seuser_test_four_t seuser_object_test_two_t: file
{
append create getattr setattr open rename read write
};
allow seuser_test_four_t seuser_object_test_four_t: dir
{
add_name create getattr open read remove_name rename rmdir search
write
};
allow seuser_test_four_t seuser_object_test_four_t: file
{
append create getattr open rename read setattr write
};
gen_user(seuser_test_one_u, user, seuser_test_one_r, s0)
gen_user(seuser_test_two_u, user, seuser_test_two_r, s0)
gen_user(seuser_test_four_u, user, seuser_test_four_r, s0)
Eu tentei usar "restringir" Macros escritas dessa maneira restringir dir_file_class_set {create relabelto relabelfrom} ( u1 == u2 ou t1 == can_change_object_identity ); Mas isso levou a erros durante a compilação de políticas. O uso de nunca nunca ajudou Macro (não é claro). Na minha TE diretiva neverallow parecia com isso
neverallow seuser_test_four_t seuser_object_test_four_t: dir
{
relabelfrom relabelto
};
neverallow seuser_test_four_t seuser_object_test_four_t: file
{
relabelfrom relabelto
};
Na minha pesquisa eu usei extensivamente selinuxproject.org e este tutorial .
Mais uma vez a questão é se é possível escrever a política do SELinux como repetir o comportamento do comando "cp --preserve = context"? Em outras palavras, quando um objeto é copiado de um diretório para outro, ele preserva o tipo do pai anterior. Esta pergunta: Como copiar o contexto do SELinux de um diretório e aplicá-lo a outro diretório? é um pouco diferente, já que o meu se refere apenas a poicies, isto é, arquivos TE não ferramentas.