SELinux:拒绝访问 unconfined_t 进程的自定义类型

SELinux:拒绝访问 unconfined_t 进程的自定义类型

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_tmytest_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 也无法看到这些文件的属性。

相关内容