From Debian package 0.2.20100524-2
* Include tmpreaper in base policy as mountnfs-bootclean.sh and
mountall-bootclean.sh need to run as tmpreaper_t.
* Added a new mcsdeleteall attribute for tmpreaper_t so that it can
delete files and directories regardless of mcs level.
I don't see why the tmpreaper part is necessary - initrc_t already has lots of
privileges; shouldn't we be adding mcsdeleteall to initrc_t?
Index: policy/modules/admin/tmpreaper.fc
===================================================================
--- policy/modules/admin/tmpreaper.fc.orig
+++ policy/modules/admin/tmpreaper.fc
@@ -1,2 +1,6 @@
/usr/sbin/tmpreaper -- gen_context(system_u:object_r:tmpreaper_exec_t,s0)
/usr/sbin/tmpwatch -- gen_context(system_u:object_r:tmpreaper_exec_t,s0)
+ifdef(`distro_debian', `
+/etc/init\.d/mountall-bootclean.sh -- gen_context(system_u:object_r:tmpreaper_exec_t,s0)
+/etc/init\.d/mountnfs-bootclean.sh -- gen_context(system_u:object_r:tmpreaper_exec_t,s0)
+')
Index: policy/modules/admin/tmpreaper.te
===================================================================
--- policy/modules/admin/tmpreaper.te.orig
+++ policy/modules/admin/tmpreaper.te
@@ -30,8 +30,7 @@
files_getattr_all_dirs(tmpreaper_t)
files_getattr_all_files(tmpreaper_t)
-mls_file_read_all_levels(tmpreaper_t)
-mls_file_write_all_levels(tmpreaper_t)
+mcs_file_delete_all(tmpreaper_t)
logging_send_syslog_msg(tmpreaper_t)
@@ -39,6 +38,7 @@
miscfiles_delete_man_pages(tmpreaper_t)
cron_system_entry(tmpreaper_t, tmpreaper_exec_t)
+init_system_domain(tmpreaper_t, tmpreaper_exec_t)
ifdef(`distro_redhat',`
userdom_list_user_home_content(tmpreaper_t)
Index: policy/modules/kernel/mcs.if
===================================================================
--- policy/modules/kernel/mcs.if.orig
+++ policy/modules/kernel/mcs.if
@@ -45,6 +45,26 @@
########################################
##
+## This domain is allowed to delete files and directories
+## regardless of their MCS category set.
+##
+##
+##
+## Domain target for user exemption.
+##
+##
+##
+#
+interface(`mcs_file_delete_all',`
+ gen_require(`
+ attribute mcsdeleteall;
+ ')
+
+ typeattribute $1 mcsdeleteall;
+')
+
+########################################
+##
## This domain is allowed to sigkill and sigstop
## all domains regardless of their MCS category set.
##
Index: policy/modules/kernel/mcs.te
===================================================================
--- policy/modules/kernel/mcs.te.orig
+++ policy/modules/kernel/mcs.te
@@ -15,6 +15,9 @@
attribute mcssetlow;
# object may be accessed by any process at a higher level
attribute mcstrustedobject;
-
+# process may write all files/dirs
attribute mcswriteall;
+# process may read all files/dirs
attribute mcsreadall;
+# process may delete all files and write dirs as appropriate
+attribute mcsdeleteall;
Index: policy/mcs
===================================================================
--- policy/mcs.orig
+++ policy/mcs
@@ -71,19 +71,29 @@
mlsconstrain file { read ioctl lock execute execute_no_trans }
(( h1 dom h2 ) or ( t1 == mcsreadall ) or ( t2 == domain ));
-mlsconstrain file { write setattr append unlink link rename }
+mlsconstrain file { write setattr append link rename }
ifdef(`distro_debian', `
((( h1 dom h2 ) and (l1 domby l2)) or ( t1 == mcswriteall ) or (t2 == mcstrustedobject) or ( t2 == domain ));
', `
(( h1 dom h2 ) or ( t1 == mcswriteall ) or ( t2 == domain ));
')
+mlsconstrain file { unlink }
+ifdef(`distro_debian', `
+ ((( h1 dom h2 ) and (l1 domby l2)) or (( t1 == mcswriteall ) or ( t1 == mcsdeleteall )) or (t2 == mcstrustedobject) or ( t2 == domain ));
+', `
+ (( h1 dom h2 ) or (( t1 == mcswriteall ) or ( t1 == mcsdeleteall )) or ( t2 == domain ));
+')
+
mlsconstrain dir { search read ioctl lock }
- (( h1 dom h2 ) or ( t1 == mcsreadall ) or ( t2 == domain ));
+ (( h1 dom h2 ) or ( t1 == mcsreadall ) or ( t1 == mcsdeleteall ) or ( t2 == domain ));
-mlsconstrain dir { write setattr append unlink link rename add_name remove_name }
+mlsconstrain dir { setattr append link rename add_name }
(( h1 dom h2 ) or ( t1 == mcswriteall ) or ( t2 == domain ));
+mlsconstrain dir { write unlink remove_name }
+ (( h1 dom h2 ) or ( t1 == mcswriteall ) or ( t1 == mcsdeleteall ) or ( t2 == domain ));
+
# New filesystem object labels must be dominated by the relabeling subject
# clearance, also the objects are single-level.
mlsconstrain file { create relabelto }