한 디렉터리에서 다른 디렉터리로 파일을 복사할 때 파일의 SELinux 레이블 유지 관리

한 디렉터리에서 다른 디렉터리로 파일을 복사할 때 파일의 SELinux 레이블 유지 관리

한 디렉터리에서 다른 디렉터리로 파일이나 하위 디렉터리를 복사할 때 기본 동작은 이동된 개체와 달리 복사된 개체가 SELinux 유형(도메인)을 유지하지 않는다는 것입니다. 복사된 개체는 상위 도메인의 보안 컨텍스트를 상속합니다."cp --preserve=context" 명령의 동작을 복제하는 SELinux 정책을 작성하는 것이 가능합니까?즉, 개체가 한 디렉터리에서 다른 디렉터리로 복사될 때 이전 상위 디렉터리의 SELinux 유형(도메인)을 유지할 수 있습니다. 예를 들어 디렉토리 구조가 다음과 같다면

[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

파일을 복사한 후"user_one_test2_file1"디렉토리에서"/tmp/test_dir/test2/"디렉토리 입력"/tmp/test_dir/test1/"디렉토리의 내용은 다음과 같아야 합니다.

[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

현재 TE 파일은 다음과 같습니다

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)

이런 방식으로 작성된 "constraint" 매크로 constrain dir_file_class_set { create relabelto relabelfrom }( u1 == u2 또는 t1 == can_change_object_identity )를 사용해 보았지만 이로 인해 정책 컴파일 중에 오류가 발생했습니다. neverallow 매크로를 사용해도 (물론) 도움이 되지 않습니다. 내 TE neverallow 지시문에서는 다음과 같습니다.

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 
};

나는 연구에서 광범위하게 사용합니다.selinuxproject.org지도 시간.

다시 질문은 "cp --preserve=context" 명령의 동작을 복제하는 방식으로 SELinux 정책을 작성할 수 있느냐는 것입니다. 즉, 개체가 한 디렉터리에서 다른 디렉터리로 복사될 때 이전 상위 디렉터리의 유형을 유지합니다. 이 문제:한 디렉터리에서 SELinux 컨텍스트를 복사하여 다른 디렉터리에 적용하는 방법은 무엇입니까?내 것은 전략, 즉 도구가 아닌 TE 파일만 포함하기 때문에 약간 다릅니다.

관련 정보