SELinux, debian 11, 기본 정책(apt를 통해 설치). 나만의 파일 형식을 만들었습니다. 나는 이 파일들이 다른 unconfined_t 응용 프로그램(루트 포함)이 아닌 특정 응용 프로그램에서만 액세스할 수 있기를 원합니다. 이를 달성하는 가장 쉽고 안정적인 방법은 무엇입니까? 복잡한 설정을 하지 않고 가능한 한 기본 정책에 가깝게 유지하는 것이 가장 좋습니다.
답변1
몇 번의 시도 끝에 작업을 수행하기 위해 TE 파일을 만들었습니다.
혹시 누군가에게 유용할까봐 여기에 남겨두겠습니다.
주요 문제는 우리가 사용하면 files_type (< our type >)
제한되지 않은 모든 프로세스가 자동으로 이러한 파일에 액세스할 수 있다는 것입니다. 따라서 매크로를 사용하지 않고도 files_type()
충분합니다 .
policy_module(mytest,1.0)
require {
type kernel_t;
type init_t;
type initrc_t;
type user_home_dir_t;
role unconfined_r;
type unconfined_t;
attribute exec_type;
}
type mytest_file_t;
type mytest_app_t;
allow mytest_app_t mytest_file_t:file { manage_file_perms relabel_file_perms exec_file_perms quotaon mounton watch };
# mark mytest_app_t as unconfined application
unconfined_domain(mytest_app_t);
application_exec_all(mytest_app_t);
application_signal(mytest_app_t);
files_unconfined(mytest_app_t);
# files
fs_associate(mytest_file_t);
type_transition mytest_app_t user_home_dir_t: file mytest_file_t;
# add to unconfined role
role unconfined_r types { mytest_app_t mytest_file_t};
# allow transition to mytest_app_t only from unconfined, kernel and init
allow {unconfined_t kernel_t init_t initrc_t} mytest_app_t : process {transition siginh rlimitinh noatsecure};
# allow kernel and init apps to work with my files
allow {kernel_t init_t initrc_t} mytest_file_t:file { manage_file_perms relabel_file_perms quotaon mounton watch };
# allow any exec file to be entrypoint to mytest_app (only for demo and test reasons)
allow mytest_app_t exec_type : file {read_file_perms exec_file_perms entrypoint};
이 구성에는 mytest_app_t
및 의 두 가지 유형이 도입되었습니다 mytest_file_t
. mytest_app_t
프로세스가 폴더에 파일을 생성 하면 user_home_dir_t
파일 유형은 mytest_file_t
제한되지 않은 루트 프로세스라도 이 파일에 대한 액세스를 거부합니다. 또한 config에는 커널 및 초기화 예외도 도입됩니다.
이 개념을 테스트하려면 명령을 실행하고 /home/cp/file1.txt의 nano 애플리케이션에서 파일을 생성하여 프로세스 유형을 수동으로 설정할 수 있습니다.
runcon -t mytest_app_t /usr/bin/nano /home/cp/file1.txt
mytest_file_t
파일은 프로세스에서 생성된 경우에만 보고 수정할 수 있습니다 mytest_app_t
. 루트조차도 이러한 파일의 속성을 볼 수 없습니다.