diff --git a/dspam.fc b/dspam.fc new file mode 100644 index 0000000..5eddac5 --- /dev/null +++ b/dspam.fc @@ -0,0 +1,12 @@ +/etc/rc\.d/init\.d/dspam -- gen_context(system_u:object_r:dspam_initrc_exec_t,s0) + +/usr/bin/dspam -- gen_context(system_u:object_r:dspam_exec_t,s0) + +/usr/share/dspam-web/dspam\.cgi -- gen_context(system_u:object_r:httpd_dspam_script_exec_t,s0) + +/var/lib/dspam(/.*)? gen_context(system_u:object_r:dspam_var_lib_t,s0) +/var/lib/dspam/data(/.*)? gen_context(system_u:object_r:httpd_dspam_rw_content_t,s0) + +/var/log/dspam(/.*)? gen_context(system_u:object_r:dspam_log_t,s0) + +/var/run/dspam(/.*)? gen_context(system_u:object_r:dspam_var_run_t,s0) diff --git a/dspam.if b/dspam.if new file mode 100644 index 0000000..9f7cdee --- /dev/null +++ b/dspam.if @@ -0,0 +1,42 @@ +## Content-based spam filter designed for multi-user enterprise systems. + +######################################## +## +## All of the rules required to +## administrate an dspam environment. +## +## +## +## Domain allowed access. +## +## +## +## +## Role allowed access. +## +## +## +# +interface(`dspam_admin',` + gen_require(` + type dspam_t, dspam_initrc_exec_t, dspam_log_t; + type dspam_var_lib_t, dspam_var_run_t; + ') + + allow $1 dspam_t:process { ptrace signal_perms }; + ps_process_pattern($1, dspam_t) + + init_labeled_script_domtrans($1, dspam_initrc_exec_t) + domain_system_change_exemption($1) + role_transition $2 dspam_initrc_exec_t system_r; + allow $2 system_r; + + logging_search_logs($1) + admin_pattern($1, dspam_log_t) + + files_search_var_lib($1) + admin_pattern($1, dspam_var_lib_t) + + files_search_pids($1) + admin_pattern($1, dspam_var_run_t) +') diff --git a/dspam.te b/dspam.te new file mode 100644 index 0000000..3354d71 --- /dev/null +++ b/dspam.te @@ -0,0 +1,78 @@ +policy_module(dspam, 1.0.0) + +######################################## +# +# Declarations +# + +type dspam_t; +type dspam_exec_t; +init_daemon_domain(dspam_t, dspam_exec_t) + +type dspam_initrc_exec_t; +init_script_file(dspam_initrc_exec_t) + +type dspam_log_t; +logging_log_file(dspam_log_t) + +type dspam_var_lib_t; +files_type(dspam_var_lib_t) + +type dspam_var_run_t; +files_pid_file(dspam_var_run_t) + +######################################## +# +# Local policy +# + +allow dspam_t self:capability net_admin; +allow dspam_t self:process signal; +allow dspam_t self:fifo_file rw_fifo_file_perms; +allow dspam_t self:unix_stream_socket { accept listen }; + +manage_dirs_pattern(dspam_t, dspam_log_t, dspam_log_t) +append_files_pattern(dspam_t, dspam_log_t, dspam_log_t) +create_files_pattern(dspam_t, dspam_log_t, dspam_log_t) +setattr_files_pattern(dspam_t, dspam_log_t, dspam_log_t) +logging_log_filetrans(dspam_t, dspam_log_t, dir) + +manage_dirs_pattern(dspam_t, dspam_var_lib_t, dspam_var_lib_t) +manage_files_pattern(dspam_t, dspam_var_lib_t, dspam_var_lib_t) +files_var_lib_filetrans(dspam_t, dspam_var_lib_t, dir) + +manage_dirs_pattern(dspam_t, dspam_var_run_t, dspam_var_run_t) +manage_files_pattern(dspam_t, dspam_var_run_t, dspam_var_run_t) +files_pid_filetrans(dspam_t, dspam_var_run_t, dir) + +corenet_all_recvfrom_unlabeled(dspam_t) +corenet_all_recvfrom_netlabel(dspam_t) +corenet_tcp_sendrecv_generic_if(dspam_t) +corenet_tcp_sendrecv_generic_node(dspam_t) +corenet_tcp_sendrecv_all_ports(dspam_t) +corenet_tcp_bind_generic_node(dspam_t) + +auth_use_nsswitch(dspam_t) + +logging_send_syslog_msg(dspam_t) + +miscfiles_read_localization(dspam_t) + +optional_policy(` + apache_content_template(dspam) + + list_dirs_pattern(dspam_t, httpd_dspam_content_t, httpd_dspam_content_t) + manage_dirs_pattern(dspam_t, httpd_dspam_rw_content_t, httpd_dspam_rw_content_t) + manage_files_pattern(dspam_t, httpd_dspam_rw_content_t, httpd_dspam_rw_content_t) +') + +optional_policy(` + mysql_search_db(dspam_t) + mysql_stream_connect(dspam_t) + mysql_tcp_connect(dspam_t) +') + +optional_policy(` + postgresql_stream_connect(dspam_t) + postgresql_tcp_connect(dspam_t) +')