commit:     04b08d98853038ae67ee57607755fb8ac1b7f7a0
Author:     Kenton Groombridge <me <AT> concord <DOT> sh>
AuthorDate: Wed Apr 27 22:47:57 2022 +0000
Commit:     Jason Zaman <perfinion <AT> gentoo <DOT> org>
CommitDate: Sat Sep  3 18:41:55 2022 +0000
URL:        
https://gitweb.gentoo.org/proj/hardened-refpolicy.git/commit/?id=04b08d98

container: add unconfined role

Add a specific template for unconfined role access. This is mostly
identical to the user role except container engines will run in the
caller domain.

Signed-off-by: Kenton Groombridge <me <AT> concord.sh>
Signed-off-by: Jason Zaman <perfinion <AT> gentoo.org>

 policy/modules/services/container.if | 217 +++++++++++++++++++++++++++--------
 1 file changed, 171 insertions(+), 46 deletions(-)

diff --git a/policy/modules/services/container.if 
b/policy/modules/services/container.if
index 07ef8873..bc4a12f4 100644
--- a/policy/modules/services/container.if
+++ b/policy/modules/services/container.if
@@ -130,7 +130,6 @@ interface(`container_user_engine',`
 #
 template(`container_base_role',`
        gen_require(`
-               type container_file_t, container_ro_file_t;
                type container_config_t;
        ')
 
@@ -143,19 +142,8 @@ template(`container_base_role',`
        files_search_etc($2)
        read_files_pattern($2, container_config_t, container_config_t)
 
-       allow $2 container_file_t:dir { manage_dir_perms relabel_dir_perms };
-       allow $2 container_file_t:file { manage_file_perms relabel_file_perms };
-       allow $2 container_file_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
-       allow $2 container_file_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
-       allow $2 container_file_t:chr_file { manage_chr_file_perms 
relabel_chr_file_perms };
-       allow $2 container_file_t:blk_file { manage_blk_file_perms 
relabel_blk_file_perms };
-
-       allow $2 container_ro_file_t:dir { manage_dir_perms relabel_dir_perms };
-       allow $2 container_ro_file_t:file { manage_file_perms 
relabel_file_perms };
-       allow $2 container_ro_file_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
-       allow $2 container_ro_file_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
-       allow $2 container_ro_file_t:chr_file { manage_chr_file_perms 
relabel_chr_file_perms };
-       allow $2 container_ro_file_t:blk_file { manage_blk_file_perms 
relabel_blk_file_perms };
+       container_admin_all_files($2)
+       container_admin_all_ro_files($2)
 ')
 
 ########################################
@@ -230,10 +218,6 @@ template(`container_user_role',`
        gen_require(`
                attribute container_user_domain;
                attribute container_engine_user_domain;
-               type container_file_t, container_ro_file_t;
-               type container_user_runtime_t;
-               type container_cache_home_t, container_conf_home_t;
-               type container_data_home_t;
        ')
 
        role $4 types container_user_domain;
@@ -245,34 +229,8 @@ template(`container_user_role',`
        allow $3 container_user_domain:process { ptrace signal_perms };
        ps_process_pattern($3, container_user_domain)
 
-       allow $2 container_user_runtime_t:dir { manage_dir_perms 
relabel_dir_perms };
-       allow $2 container_user_runtime_t:file { manage_file_perms 
relabel_file_perms };
-       allow $2 container_user_runtime_t:fifo_file { manage_fifo_file_perms 
relabel_fifo_file_perms };
-       allow $2 container_user_runtime_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
-
-       allow $2 container_cache_home_t:dir { manage_dir_perms 
relabel_dir_perms };
-       allow $2 container_cache_home_t:file { manage_file_perms 
relabel_file_perms };
-       xdg_cache_filetrans($2, container_cache_home_t, dir, "containers")
-
-       allow $2 container_conf_home_t:dir { manage_dir_perms relabel_dir_perms 
};
-       allow $2 container_conf_home_t:file { manage_file_perms 
relabel_file_perms };
-       xdg_config_filetrans($2, container_conf_home_t, dir, "containers")
-
-       allow $2 container_data_home_t:dir { manage_dir_perms relabel_dir_perms 
};
-       allow $2 container_data_home_t:file { manage_file_perms 
relabel_file_perms };
-       allow $2 container_data_home_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
-       allow $2 container_data_home_t:fifo_file { manage_fifo_file_perms 
relabel_fifo_file_perms };
-       allow $2 container_data_home_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
-       allow $2 container_data_home_t:chr_file { manage_chr_file_perms 
relabel_chr_file_perms };
-       allow $2 container_data_home_t:blk_file { manage_blk_file_perms 
relabel_blk_file_perms };
-       xdg_data_filetrans($2, container_data_home_t, dir, "containers")
-       filetrans_pattern($2, container_data_home_t, container_ro_file_t, dir, 
"overlay")
-       filetrans_pattern($2, container_data_home_t, container_ro_file_t, dir, 
"overlay-images")
-       filetrans_pattern($2, container_data_home_t, container_ro_file_t, dir, 
"overlay-layers")
-       filetrans_pattern($2, container_data_home_t, container_ro_file_t, dir, 
"overlay2")
-       filetrans_pattern($2, container_data_home_t, container_ro_file_t, dir, 
"overlay2-images")
-       filetrans_pattern($2, container_data_home_t, container_ro_file_t, dir, 
"overlay2-layers")
-       filetrans_pattern($2, container_data_home_t, container_file_t, dir, 
"volumes")
+       container_admin_all_home_content($2)
+       container_admin_all_user_runtime_content($2)
 
        optional_policy(`
                systemd_read_user_manager_state($1, 
container_engine_user_domain)
@@ -293,6 +251,60 @@ template(`container_user_role',`
        ')
 ')
 
+########################################
+## <summary>
+##     Unconfined role access for containers.
+## </summary>
+## <param name="role_prefix">
+##     <summary>
+##     The prefix of the user role (e.g., user
+##     is the prefix for user_r).
+##     </summary>
+## </param>
+## <param name="user_domain">
+##     <summary>
+##     User domain for the role.
+##     </summary>
+## </param>
+## <param name="user_exec_domain">
+##     <summary>
+##     User exec domain for execute and transition access.
+##     </summary>
+## </param>
+## <param name="role">
+##     <summary>
+##     Role allowed access.
+##     </summary>
+## </param>
+#
+template(`container_unconfined_role',`
+       gen_require(`
+               attribute container_domain;
+               type container_config_t;
+       ')
+
+       role $4 types container_domain;
+
+       allow $3 container_domain:process transition;
+       allow $3 container_domain:process2 { nnp_transition nosuid_transition };
+       allow container_domain $3:fd use;
+       allow container_domain $3:unix_stream_socket rw_stream_socket_perms;
+
+       allow $3 self:cap_userns { kill sys_ptrace };
+
+       allow $3 container_domain:process { ptrace signal_perms };
+       ps_process_pattern($3, container_domain)
+
+       files_search_etc($2)
+       read_files_pattern($2, container_config_t, container_config_t)
+
+       container_admin_all_files($2)
+       container_admin_all_ro_files($2)
+
+       container_admin_all_home_content($2)
+       container_admin_all_user_runtime_content($2)
+')
+
 ########################################
 ## <summary>
 ##     Execute generic container engines in the
@@ -1079,6 +1091,119 @@ interface(`container_manage_home_data_sock_files',`
        manage_sock_files_pattern($1, container_data_home_t, 
container_data_home_t)
 ')
 
+########################################
+## <summary>
+##     Administrate all container files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`container_admin_all_files',`
+       gen_require(`
+               type container_file_t;
+       ')
+
+       allow $1 container_file_t:dir { manage_dir_perms relabel_dir_perms };
+       allow $1 container_file_t:file { manage_file_perms relabel_file_perms };
+       allow $1 container_file_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
+       allow $1 container_file_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
+       allow $1 container_file_t:chr_file { manage_chr_file_perms 
relabel_chr_file_perms };
+       allow $1 container_file_t:blk_file { manage_blk_file_perms 
relabel_blk_file_perms };
+')
+
+########################################
+## <summary>
+##     Administrate all container read-only files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`container_admin_all_ro_files',`
+       gen_require(`
+               type container_ro_file_t;
+       ')
+
+       allow $1 container_ro_file_t:dir { manage_dir_perms relabel_dir_perms };
+       allow $1 container_ro_file_t:file { manage_file_perms 
relabel_file_perms };
+       allow $1 container_ro_file_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
+       allow $1 container_ro_file_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
+       allow $1 container_ro_file_t:chr_file { manage_chr_file_perms 
relabel_chr_file_perms };
+       allow $1 container_ro_file_t:blk_file { manage_blk_file_perms 
relabel_blk_file_perms };
+')
+
+########################################
+## <summary>
+##     All of the rules necessary for a user
+##     to manage user container runtime data
+##     in their user runtime directory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`container_admin_all_user_runtime_content',`
+       gen_require(`
+               type container_user_runtime_t;
+       ')
+
+       allow $1 container_user_runtime_t:dir { manage_dir_perms 
relabel_dir_perms };
+       allow $1 container_user_runtime_t:file { manage_file_perms 
relabel_file_perms };
+       allow $1 container_user_runtime_t:fifo_file { manage_fifo_file_perms 
relabel_fifo_file_perms };
+       allow $1 container_user_runtime_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
+')
+
+########################################
+## <summary>
+##     All of the rules necessary for a user
+##     to manage container data in their home
+##     directory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`container_admin_all_home_content',`
+       gen_require(`
+               type container_file_t, container_ro_file_t;
+               type container_cache_home_t, container_conf_home_t;
+               type container_data_home_t;
+       ')
+
+       allow $1 container_cache_home_t:dir { manage_dir_perms 
relabel_dir_perms };
+       allow $1 container_cache_home_t:file { manage_file_perms 
relabel_file_perms };
+       xdg_cache_filetrans($1, container_cache_home_t, dir, "containers")
+
+       allow $1 container_conf_home_t:dir { manage_dir_perms relabel_dir_perms 
};
+       allow $1 container_conf_home_t:file { manage_file_perms 
relabel_file_perms };
+       xdg_config_filetrans($1, container_conf_home_t, dir, "containers")
+
+       allow $1 container_data_home_t:dir { manage_dir_perms relabel_dir_perms 
};
+       allow $1 container_data_home_t:file { manage_file_perms 
relabel_file_perms };
+       allow $1 container_data_home_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
+       allow $1 container_data_home_t:fifo_file { manage_fifo_file_perms 
relabel_fifo_file_perms };
+       allow $1 container_data_home_t:sock_file { manage_sock_file_perms 
relabel_sock_file_perms };
+       allow $1 container_data_home_t:chr_file { manage_chr_file_perms 
relabel_chr_file_perms };
+       allow $1 container_data_home_t:blk_file { manage_blk_file_perms 
relabel_blk_file_perms };
+       xdg_data_filetrans($1, container_data_home_t, dir, "containers")
+       filetrans_pattern($1, container_data_home_t, container_ro_file_t, dir, 
"overlay")
+       filetrans_pattern($1, container_data_home_t, container_ro_file_t, dir, 
"overlay-images")
+       filetrans_pattern($1, container_data_home_t, container_ro_file_t, dir, 
"overlay-layers")
+       filetrans_pattern($1, container_data_home_t, container_ro_file_t, dir, 
"overlay2")
+       filetrans_pattern($1, container_data_home_t, container_ro_file_t, dir, 
"overlay2-images")
+       filetrans_pattern($1, container_data_home_t, container_ro_file_t, dir, 
"overlay2-layers")
+       filetrans_pattern($1, container_data_home_t, container_file_t, dir, 
"volumes")
+')
+
 ########################################
 ## <summary>
 ##     Allow the specified domain to

Reply via email to