policy_module(zoneminder, 1.0.0) ######################################## # # Declarations # ## ##

## Allow ZoneMinder to run su/sudo. ##

##
gen_tunable(zoneminder_run_sudo, false) ## ##

## Allow ZoneMinder to modify public files ## used for public file transfer services. ##

##
gen_tunable(zoneminder_anon_write, false) gen_require(` class passwd rootok; class passwd passwd; ') type zoneminder_t; type zoneminder_exec_t; init_daemon_domain(zoneminder_t, zoneminder_exec_t) type zoneminder_unit_file_t; systemd_unit_file(zoneminder_unit_file_t) type zoneminder_initrc_exec_t; init_script_file(zoneminder_initrc_exec_t) type zoneminder_log_t; logging_log_file(zoneminder_log_t) type zoneminder_tmpfs_t; files_tmpfs_file(zoneminder_tmpfs_t) type zoneminder_spool_t; files_type(zoneminder_spool_t) type zoneminder_var_lib_t; files_type(zoneminder_var_lib_t) type zoneminder_var_run_t; files_pid_file(zoneminder_var_run_t) ######################################## # # zoneminder local policy # allow zoneminder_t self:capability { chown dac_read_search }; allow zoneminder_t self:process { signal_perms setpgid }; allow zoneminder_t self:shm create_shm_perms; allow zoneminder_t self:fifo_file rw_fifo_file_perms; allow zoneminder_t self:unix_stream_socket { create_stream_socket_perms connectto }; allow zoneminder_t self:netlink_selinux_socket create_socket_perms; manage_dirs_pattern(zoneminder_t, zoneminder_log_t, zoneminder_log_t) manage_files_pattern(zoneminder_t, zoneminder_log_t, zoneminder_log_t) logging_log_filetrans(zoneminder_t, zoneminder_log_t, { dir file }) manage_dirs_pattern(zoneminder_t, zoneminder_tmpfs_t, zoneminder_tmpfs_t) manage_files_pattern(zoneminder_t, zoneminder_tmpfs_t, zoneminder_tmpfs_t) manage_lnk_files_pattern(zoneminder_t, zoneminder_tmpfs_t, zoneminder_tmpfs_t) fs_tmpfs_filetrans(zoneminder_t, zoneminder_tmpfs_t, { dir file lnk_file }) allow zoneminder_t zoneminder_tmpfs_t:file map; manage_dirs_pattern(zoneminder_t, zoneminder_var_lib_t, zoneminder_var_lib_t) manage_files_pattern(zoneminder_t, zoneminder_var_lib_t, zoneminder_var_lib_t) manage_sock_files_pattern(zoneminder_t, zoneminder_var_lib_t, zoneminder_var_lib_t) manage_lnk_files_pattern(zoneminder_t, zoneminder_var_lib_t, zoneminder_var_lib_t) files_var_lib_filetrans(zoneminder_t, zoneminder_var_lib_t, { dir file lnk_file sock_file }) manage_dirs_pattern(zoneminder_t, zoneminder_var_run_t, zoneminder_var_run_t) manage_files_pattern(zoneminder_t, zoneminder_var_run_t, zoneminder_var_run_t) files_pid_filetrans(zoneminder_t, zoneminder_var_run_t, { dir file }) manage_dirs_pattern(zoneminder_t, zoneminder_spool_t, zoneminder_spool_t) manage_files_pattern(zoneminder_t, zoneminder_spool_t, zoneminder_spool_t) manage_lnk_files_pattern(zoneminder_t, zoneminder_spool_t, zoneminder_spool_t) files_spool_filetrans(zoneminder_t, zoneminder_spool_t, { dir file }) kernel_read_system_state(zoneminder_t) domain_read_all_domains_state(zoneminder_t) corecmd_exec_bin(zoneminder_t) corecmd_exec_shell(zoneminder_t) corenet_tcp_bind_http_cache_port(zoneminder_t) corenet_tcp_bind_transproxy_port(zoneminder_t) corenet_tcp_connect_http_port(zoneminder_t) corenet_tcp_connect_smtp_port(zoneminder_t) dev_read_sysfs(zoneminder_t) dev_read_rand(zoneminder_t) dev_read_urand(zoneminder_t) dev_read_video_dev(zoneminder_t) dev_write_video_dev(zoneminder_t) dev_map_video_dev(zoneminder_t) fs_getattr_xattr_fs(zoneminder_t) auth_use_nsswitch(zoneminder_t) #auth_read_shadow(zoneminder_t) need to debug zmpkg.pl to see why is needed this rule. logging_send_syslog_msg(zoneminder_t) logging_send_audit_msgs(zoneminder_t) mta_send_mail(zoneminder_t) tunable_policy(`zoneminder_anon_write',` miscfiles_manage_public_files(zoneminder_t) ') tunable_policy(`zoneminder_run_sudo',` allow zoneminder_t self:capability { setuid setgid sys_resource }; allow zoneminder_t self:process { setrlimit setsched }; allow zoneminder_t self:key write; allow zoneminder_t self:passwd { passwd rootok }; auth_rw_lastlog(zoneminder_t) auth_rw_faillog(zoneminder_t) auth_exec_chkpwd(zoneminder_t) selinux_compute_access_vector(zoneminder_t) systemd_write_inherited_logind_sessions_pipes(zoneminder_t) systemd_dbus_chat_logind(zoneminder_t) xserver_exec_xauth(zoneminder_t) ') optional_policy(` tunable_policy(`zoneminder_run_sudo',` sudo_exec(zoneminder_t) su_exec(zoneminder_t) ') ') optional_policy(` dbus_system_bus_client(zoneminder_t) ') optional_policy(` mysql_stream_connect(zoneminder_t) ') optional_policy(` fprintd_dbus_chat(zoneminder_t) ') optional_policy(` motion_manage_all_files(zoneminder_t) ') ######################################## # # zoneminder cgi local policy # optional_policy(` apache_content_template(zoneminder) apache_content_alias_template(zoneminder, zoneminder) # need more testing #allow zoneminder_script_t self:shm create_shm_perms; manage_sock_files_pattern(zoneminder_script_t, zoneminder_var_lib_t, zoneminder_var_lib_t) manage_dirs_pattern(zoneminder_script_t, zoneminder_var_lib_t, zoneminder_var_lib_t) manage_files_pattern(zoneminder_script_t, zoneminder_var_lib_t, zoneminder_var_lib_t) manage_lnk_files_pattern(zoneminder_script_t, zoneminder_var_lib_t, zoneminder_var_lib_t) files_var_lib_filetrans(zoneminder_script_t, zoneminder_var_lib_t, { dir file lnk_file sock_file }) allow zoneminder_script_t zoneminder_tmpfs_t:file map; rw_files_pattern(zoneminder_script_t, zoneminder_tmpfs_t, zoneminder_tmpfs_t) zoneminder_stream_connect(zoneminder_script_t) can_exec(zoneminder_t, zoneminder_script_exec_t) dev_list_sysfs(zoneminder_script_t) dev_read_sysfs(zoneminder_script_t) files_search_var_lib(zoneminder_script_t) logging_send_syslog_msg(zoneminder_script_t) init_search_pid_dirs(zoneminder_script_t) miscfiles_read_certs(zoneminder_script_t) optional_policy(` mysql_stream_connect(zoneminder_script_t) ') ')