commit:     b6371921229cf02860e383fe970d331ebcaad159
Author:     cgzones <cgzones <AT> googlemail <DOT> com>
AuthorDate: Wed Mar  8 20:27:57 2017 +0000
Commit:     Jason Zaman <perfinion <AT> gentoo <DOT> org>
CommitDate: Thu Mar 30 13:58:38 2017 +0000
URL:        
https://gitweb.gentoo.org/proj/hardened-refpolicy.git/commit/?id=b6371921

monit: update

add monit cli policy and several interfaces

 policy/modules/contrib/monit.fc |   6 +-
 policy/modules/contrib/monit.if | 127 ++++++++++++++++++++++++++++++++++++-
 policy/modules/contrib/monit.te | 134 ++++++++++++++++++++++++++--------------
 3 files changed, 217 insertions(+), 50 deletions(-)

diff --git a/policy/modules/contrib/monit.fc b/policy/modules/contrib/monit.fc
index d47fa153..273aad3e 100644
--- a/policy/modules/contrib/monit.fc
+++ b/policy/modules/contrib/monit.fc
@@ -1,7 +1,8 @@
 /etc/rc\.d/init\.d/monit       --      
gen_context(system_u:object_r:monit_initrc_exec_t,s9)
-/etc/monit(/.*)?                       
gen_context(system_u:object_r:monit_etc_t,s0)
 
-/run/monit\.pid                        --      
gen_context(system_u:object_r:monit_run_t,s0)
+/etc/monit(/.*)?                       
gen_context(system_u:object_r:monit_conf_t,s0)
+
+/run/monit\.pid                        --      
gen_context(system_u:object_r:monit_pid_t,s0)
 
 /usr/bin/monit                 --      
gen_context(system_u:object_r:monit_exec_t,s0)
 
@@ -10,4 +11,3 @@
 /var/lib/monit(/.*)?                   
gen_context(system_u:object_r:monit_var_lib_t,s0)
 
 /var/log/monit\.log.*          --      
gen_context(system_u:object_r:monit_log_t,s0)
-

diff --git a/policy/modules/contrib/monit.if b/policy/modules/contrib/monit.if
index d387f435..6107ef9d 100644
--- a/policy/modules/contrib/monit.if
+++ b/policy/modules/contrib/monit.if
@@ -1 +1,126 @@
-## <summary>Monit system monitoring daemon</summary>
+## <summary>Monit - utility for monitoring services on a Unix system.</summary>
+
+########################################
+## <summary>
+##     Execute a domain transition to run monit cli.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed to transition.
+##     </summary>
+## </param>
+#
+interface(`monit_domtrans_cli',`
+       gen_require(`
+               type monit_cli_t, monit_exec_t;
+       ')
+
+       corecmd_search_bin($1)
+       domtrans_pattern($1, monit_exec_t, monit_cli_t)
+')
+
+########################################
+## <summary>
+##     Execute monit in the monit cli domain,
+##     and allow the specified role
+##     the monit cli domain.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed to transition.
+##     </summary>
+## </param>
+## <param name="role">
+##     <summary>
+##     Role allowed access.
+##     </summary>
+## </param>
+#
+interface(`monit_run_cli',`
+       gen_require(`
+               attribute_role monit_cli_roles;
+       ')
+
+       monit_domtrans_cli($1)
+       roleattribute $2 monit_cli_roles;
+')
+
+########################################
+## <summary>
+##     Reload the monit daemon.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`monit_reload',`
+       gen_require(`
+               class service { reload status };
+               type monit_initrc_exec_t;
+       ')
+
+       allow $1 monit_initrc_exec_t:service { reload status };
+')
+
+########################################
+## <summary>
+##     Start and stop the monit daemon.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`monit_startstop_service',`
+       gen_require(`
+               class service { start status stop };
+               type monit_initrc_exec_t;
+       ')
+
+       allow $1 monit_initrc_exec_t:service { start status stop };
+')
+
+########################################
+## <summary>
+##     All of the rules required to
+##     administrate an monit environment.
+## </summary>
+## <param name="domain">
+##      <summary>
+##      Domain allowed access.
+##      </summary>
+## </param>
+## <param name="role">
+##      <summary>
+##      Role allowed access.
+##      </summary>
+## </param>
+#
+interface(`monit_admin',`
+       gen_require(`
+               type monit_t, monit_conf_t, monit_initrc_exec_t;
+               type monit_log_t, monit_pid_t;
+               type monit_unit_t, monit_var_lib_t;
+       ')
+
+       admin_process_pattern($1, monit_t)
+
+       init_startstop_service($1, $2, monit_t, monit_initrc_exec_t, 
monit_unit_t)
+
+       files_search_etc($1)
+       admin_pattern($1, monit_conf_t)
+
+       logging_search_logs($1)
+       admin_pattern($1, monit_log_t)
+
+       files_search_pids($1)
+       admin_pattern($1, monit_pid_t)
+
+       files_search_var_lib($1)
+       admin_pattern($1, monit_var_lib_t)
+
+       monit_run_cli($1, $2)
+')

diff --git a/policy/modules/contrib/monit.te b/policy/modules/contrib/monit.te
index 14aeddcd..470c44f4 100644
--- a/policy/modules/contrib/monit.te
+++ b/policy/modules/contrib/monit.te
@@ -12,24 +12,29 @@ policy_module(monit, 1.0.1)
 ## </desc>
 gen_tunable(monit_startstop_services, false)
 
-attribute_role monit_interactive_roles;
+attribute_role monit_cli_roles;
 
-type monit_t;
+attribute monit_domain;
+
+type monit_t, monit_domain;
 type monit_exec_t;
 init_daemon_domain(monit_t, monit_exec_t)
 
-type monit_etc_t;
-files_config_file(monit_etc_t)
-files_security_file(monit_etc_t) # may contain password for monit webinterface
+type monit_conf_t alias monit_etc_t;
+files_security_file(monit_conf_t) # may contain password for monit webinterface
 
 type monit_initrc_exec_t;
 init_script_file(monit_initrc_exec_t)
 
+type monit_cli_t, monit_domain;
+application_domain(monit_cli_t, monit_exec_t)
+role monit_cli_roles types monit_cli_t;
+
 type monit_log_t;
 logging_log_file(monit_log_t)
 
-type monit_run_t;
-files_pid_file(monit_run_t)
+type monit_pid_t alias monit_run_t;
+files_pid_file(monit_pid_t)
 
 type monit_unit_t;
 init_unit_file(monit_unit_t)
@@ -39,6 +44,37 @@ files_type(monit_var_lib_t)
 
 ########################################
 #
+# Common monit domain policy
+#
+
+allow monit_domain self:unix_stream_socket create_stream_socket_perms;
+allow monit_domain monit_t:process { getpgid sigkill signal };
+
+allow monit_domain monit_conf_t:dir list_dir_perms;
+allow monit_domain monit_conf_t:file read_file_perms;
+allow monit_domain monit_conf_t:lnk_file read_lnk_file_perms;
+
+kernel_read_system_state(monit_domain)
+
+# can not use with attributes
+#auth_use_nsswitch(monit_domain)
+
+# read /sys/class/net/eth0 /sys/devices/system/cpu
+dev_read_sysfs(monit_domain)
+dev_read_urand(monit_domain)
+
+fs_getattr_dos_fs(monit_domain)
+fs_getattr_dos_dirs(monit_domain)
+fs_getattr_tmpfs(monit_domain)
+fs_getattr_xattr_fs(monit_domain)
+
+miscfiles_read_localization(monit_domain)
+
+# disk usage of sd card
+storage_getattr_removable_dev(monit_domain)
+
+########################################
+#
 # Daemon policy
 #
 
@@ -46,72 +82,78 @@ files_type(monit_var_lib_t)
 # net_raw         : create raw sockets
 # sys_ptrace      : trace processes
 allow monit_t self:capability { dac_read_search net_raw sys_ptrace };
-# kernel bug
-dontaudit monit_t self:capability dac_override;
 # setsockopt
 dontaudit monit_t self:capability net_admin;
 
-allow monit_t self:process { getpgid sigkill signal };
 allow monit_t self:fifo_file rw_fifo_file_perms;
-allow monit_t self:netlink_route_socket r_netlink_socket_perms;
 allow monit_t self:rawip_socket connected_socket_perms;
-allow monit_t self:sem rw_sem_perms;
-allow monit_t self:tcp_socket create_stream_socket_perms;
-allow monit_t self:udp_socket create_socket_perms;
-allow monit_t self:unix_stream_socket create_stream_socket_perms;
-
-allow monit_t monit_etc_t:dir list_dir_perms;
-allow monit_t monit_etc_t:file read_file_perms;
-allow monit_t monit_etc_t:lnk_file read_lnk_file_perms;
+allow monit_t self:tcp_socket server_stream_socket_perms;
 
 allow monit_t monit_log_t:file { create read_file_perms append_file_perms };
 logging_log_filetrans(monit_t, monit_log_t, file)
 
-allow monit_t monit_run_t:file manage_file_perms;
-files_pid_filetrans(monit_t, monit_run_t, file)
+allow monit_t monit_pid_t:file manage_file_perms;
+files_pid_filetrans(monit_t, monit_pid_t, file)
 
 allow monit_t monit_var_lib_t:dir manage_dir_perms;
 allow monit_t monit_var_lib_t:file manage_file_perms;
 
-kernel_read_system_state(monit_t)
+auth_use_nsswitch(monit_t)
 
 corecmd_exec_bin(monit_t)
+
 corenet_tcp_bind_generic_node(monit_t)
 corenet_tcp_bind_monit_port(monit_t)
 corenet_tcp_connect_all_ports(monit_t)
 
-dev_read_sysfs(monit_t)
-dev_read_urand(monit_t)
-
 domain_getpgid_all_domains(monit_t)
 domain_read_all_domains_state(monit_t)
 
 files_read_all_pids(monit_t)
 
-fs_getattr_dos_fs(monit_t)
-fs_getattr_tmpfs(monit_t)
-fs_getattr_xattr_fs(monit_t)
-fs_search_dos(monit_t)
-
-storage_getattr_fixed_disk_dev(monit_t)
-
-auth_use_nsswitch(monit_t)
-
-miscfiles_read_localization(monit_t)
-
-sysnet_read_config(monit_t)
+ifdef(`hide_broken_symptoms',`
+       # kernel bug: https://github.com/SELinuxProject/selinux-kernel/issues/6
+       dontaudit monit_t self:capability dac_override;
+')
 
-ifdef(`init_systemd',`
-       tunable_policy(`monit_startstop_services',`
-               init_get_all_units_status(monit_t)
-               init_get_system_status(monit_t)
-               init_startstop_all_script_services(monit_t)
-               init_start_all_units(monit_t)
-               init_stop_all_units(monit_t)
-               init_stream_connect(monit_t)
-       ')
+tunable_policy(`monit_startstop_services',`
+       init_get_all_units_status(monit_t)
+       init_get_system_status(monit_t)
+       init_start_all_units(monit_t)
+       init_stop_all_units(monit_t)
+       init_stream_connect(monit_t)
 ')
 
 optional_policy(`
        dbus_system_bus_client(monit_t)
 ')
+
+########################################
+#
+# Client policy
+#
+
+allow monit_cli_t monit_log_t:file { append_file_perms read_file_perms };
+
+allow monit_cli_t monit_pid_t:file rw_file_perms;
+
+allow monit_cli_t monit_var_lib_t:dir search_dir_perms;
+allow monit_cli_t monit_var_lib_t:file rw_file_perms;
+
+auth_use_nsswitch(monit_cli_t)
+
+corecmd_check_exec_bin_files(monit_cli_t)
+
+corenet_tcp_connect_monit_port(monit_cli_t)
+
+dev_read_rand(monit_cli_t)
+
+domain_use_interactive_fds(monit_cli_t)
+
+files_search_pids(monit_cli_t)
+files_search_var_lib(monit_cli_t)
+
+logging_search_logs(monit_cli_t)
+
+userdom_dontaudit_search_user_home_dirs(monit_cli_t)
+userdom_use_inherited_user_terminals(monit_cli_t)

Reply via email to