commit:     ff059cfa2c7ef4bd5ff446240617a14e515a0ace
Author:     Kenton Groombridge <me <AT> concord <DOT> sh>
AuthorDate: Tue Jan 11 19:56:49 2022 +0000
Commit:     Jason Zaman <perfinion <AT> gentoo <DOT> org>
CommitDate: Sun Jan 30 01:15:06 2022 +0000
URL:        
https://gitweb.gentoo.org/proj/hardened-refpolicy.git/commit/?id=ff059cfa

userdomain: add type for user bin files

Add a type and allow execute access to executable files that may be
freely managed by users in their home directories. Although users may
normally execute anything labeled user_home_t, this type is intended to
be executed by user services such as the user's systemd --user instance.

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

 policy/modules/system/userdomain.fc |  2 ++
 policy/modules/system/userdomain.if | 52 ++++++++++++++++++++++++++++++++++++-
 policy/modules/system/userdomain.te |  3 +++
 3 files changed, 56 insertions(+), 1 deletion(-)

diff --git a/policy/modules/system/userdomain.fc 
b/policy/modules/system/userdomain.fc
index 70b83058..173e314a 100644
--- a/policy/modules/system/userdomain.fc
+++ b/policy/modules/system/userdomain.fc
@@ -1,5 +1,7 @@
 HOME_DIR       -d      
gen_context(system_u:object_r:user_home_dir_t,s0-mls_systemhigh)
 HOME_DIR/.+            gen_context(system_u:object_r:user_home_t,s0)
+HOME_DIR/bin(/.*)?             gen_context(system_u:object_r:user_bin_t,s0)
+HOME_DIR/\.local/bin(/.*)?             
gen_context(system_u:object_r:user_bin_t,s0)
 HOME_DIR/\.pki(/.*)?   gen_context(system_u:object_r:user_cert_t,s0)
 
 /tmp/gconfd-%{USERNAME} -d     gen_context(system_u:object_r:user_tmp_t,s0)

diff --git a/policy/modules/system/userdomain.if 
b/policy/modules/system/userdomain.if
index ef4419a5..6380e869 100644
--- a/policy/modules/system/userdomain.if
+++ b/policy/modules/system/userdomain.if
@@ -376,7 +376,8 @@ interface(`userdom_ro_home_role',`
 #
 interface(`userdom_manage_home_role',`
        gen_require(`
-               type user_home_t, user_home_dir_t, user_cert_t;
+               type user_home_t, user_home_dir_t;
+               type user_bin_t, user_cert_t;
        ')
 
        ##############################
@@ -410,6 +411,10 @@ interface(`userdom_manage_home_role',`
        allow $2 user_home_t:sock_file { watch watch_mount watch_sb 
watch_with_perm watch_reads };
        allow $2 user_home_t:fifo_file { watch watch_mount watch_sb 
watch_with_perm watch_reads };
 
+       userdom_manage_user_bin($2)
+       userdom_exec_user_bin_files($2)
+       userdom_user_home_dir_filetrans($2, user_bin_t, dir, "bin")
+
        userdom_manage_user_certs($2)
        userdom_user_home_dir_filetrans($2, user_cert_t, dir, ".pki")
 
@@ -442,6 +447,10 @@ interface(`userdom_manage_home_role',`
                        flash_relabel_home($2)
                ')
        ')
+
+       optional_policy(`
+               xdg_data_filetrans($2, user_bin_t, dir, "bin")
+       ')
 ')
 
 #######################################
@@ -2774,6 +2783,47 @@ 
interface(`userdom_user_home_dir_filetrans_user_home_content',`
        files_search_home($1)
 ')
 
+########################################
+## <summary>
+##     Execute user executable files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_exec_user_bin_files',`
+       gen_require(`
+               type user_bin_t;
+       ')
+
+       exec_files_pattern($1, user_bin_t, user_bin_t)
+       read_lnk_files_pattern($1, user_bin_t, user_bin_t)
+       files_search_home($1)
+')
+
+########################################
+## <summary>
+##     Manage user executable files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_user_bin',`
+       gen_require(`
+               type user_bin_t;
+       ')
+
+       allow $1 user_bin_t:dir { manage_dir_perms relabel_dir_perms };
+       allow $1 user_bin_t:file { manage_file_perms relabel_file_perms };
+       allow $1 user_bin_t:lnk_file { manage_lnk_file_perms 
relabel_lnk_file_perms };
+       files_search_home($1)
+')
+
 ########################################
 ## <summary>
 ##     Read user SSL certificates.

diff --git a/policy/modules/system/userdomain.te 
b/policy/modules/system/userdomain.te
index e9a5ccfc..9339cb9d 100644
--- a/policy/modules/system/userdomain.te
+++ b/policy/modules/system/userdomain.te
@@ -95,6 +95,9 @@ files_associate_tmp(user_home_t)
 files_poly_parent(user_home_t)
 files_mountpoint(user_home_t)
 
+type user_bin_t;
+userdom_user_home_content(user_bin_t)
+
 type user_cert_t;
 userdom_user_home_content(user_cert_t)
 

Reply via email to