SELinux,debian 11,默认策略(通过 apt 安装)。我创建了自己的文件类型。我希望这些文件只能由某些应用程序访问,而不能由任何其他 unconfined_t 应用程序(即使是 root 用户)访问。实现这一点最简单、最可靠的方法是什么?最好不要进行复杂的设置,尽可能接近默认策略。
答案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 还引入了内核和 init 的异常。
要测试这个概念,您可以运行该命令并在 nano 应用程序中的 /home/cp/file1.txt 处创建一个文件,手动设置进程类型。
runcon -t mytest_app_t /usr/bin/nano /home/cp/file1.txt
mytest_file_t
仅当文件来自进程时才可以查看和修改文件mytest_app_t
。即使 root 也无法看到这些文件的属性。