#DESC Courier - POP and IMAP servers # # Author: Russell Coker # X-Debian-Packages: courier-base # # Type for files created during execution of courier. type courier_var_run_t, file_type, sysadmfile, pidfile; type courier_var_lib_t, file_type, sysadmfile; type courier_etc_t, file_type, sysadmfile; # allow start scripts to read the config allow initrc_t courier_etc_t:file r_file_perms; type courier_exec_t, file_type, sysadmfile, exec_type; type sqwebmail_cron_exec_t, file_type, sysadmfile, exec_type; define(`courier_domain', ` ################################# # # Rules for the courier_$1_t domain. # # courier_$1_exec_t is the type of the courier_$1 executables. # daemon_base_domain(courier_$1, `$2') allow courier_$1_t var_run_t:dir search; rw_dir_create_file(courier_$1_t, courier_var_run_t) allow courier_$1_t courier_var_run_t:sock_file create_file_perms; # allow it to read config files etc allow courier_$1_t { courier_etc_t var_t }:dir r_dir_perms; allow courier_$1_t courier_etc_t:file r_file_perms; allow courier_$1_t etc_t:dir r_dir_perms; allow courier_$1_t etc_t:file r_file_perms; # execute scripts etc allow courier_$1_t { bin_t courier_$1_exec_t }:file rx_file_perms; allow courier_$1_t bin_t:dir r_dir_perms; allow courier_$1_t fs_t:filesystem getattr; # set process group and allow permissions over-ride allow courier_$1_t self:process setpgid; allow courier_$1_t self:capability dac_override; # Use the network. can_network_server(courier_$1_t) allow courier_$1_t self:fifo_file { read write getattr }; allow courier_$1_t self:unix_stream_socket create_stream_socket_perms; allow courier_$1_t self:unix_dgram_socket create_socket_perms; allow courier_$1_t null_device_t:chr_file rw_file_perms; # allow it to log to /dev/tty allow courier_$1_t devtty_t:chr_file rw_file_perms; allow courier_$1_t { usr_t etc_runtime_t }:file r_file_perms; allow courier_$1_t usr_t:dir r_dir_perms; allow courier_$1_t root_t:dir r_dir_perms; can_exec(courier_$1_t, courier_$1_exec_t) can_exec(courier_$1_t, bin_t) allow courier_$1_t bin_t:dir search; allow courier_$1_t proc_t:dir r_dir_perms; allow courier_$1_t proc_t:file r_file_perms; ')dnl courier_domain(authdaemon, `, auth_chkpwd') allow courier_authdaemon_t sbin_t:dir search; allow courier_authdaemon_t lib_t:file { read getattr }; allow courier_authdaemon_t tmp_t:dir getattr; allow courier_authdaemon_t self:file { getattr read }; read_locale(courier_authdaemon_t) can_exec(courier_authdaemon_t, courier_exec_t) dontaudit courier_authdaemon_t selinux_config_t:dir search; # for SSP allow courier_authdaemon_t urandom_device_t:chr_file read; # should not be needed! allow courier_authdaemon_t home_root_t:dir search; allow courier_authdaemon_t user_home_dir_type:dir search; dontaudit courier_authdaemon_t sysadm_home_dir_t:dir search; allow courier_authdaemon_t self:unix_stream_socket connectto; allow courier_authdaemon_t self:capability { setuid setgid sys_tty_config }; courier_domain(tcpd) allow courier_tcpd_t self:capability { kill net_bind_service }; allow courier_tcpd_t pop_port_t:tcp_socket name_bind; allow courier_tcpd_t sbin_t:dir search; allow courier_tcpd_t var_lib_t:dir search; # for TLS allow courier_tcpd_t { random_device_t urandom_device_t }:chr_file { getattr read }; read_locale(courier_tcpd_t) can_exec(courier_tcpd_t, courier_exec_t) allow courier_authdaemon_t courier_tcpd_t:{ unix_stream_socket tcp_socket } rw_stream_socket_perms; allow courier_authdaemon_t courier_tcpd_t:process sigchld; can_tcp_connect(userdomain, courier_tcpd_t) rw_dir_create_file(courier_tcpd_t, courier_var_lib_t) # domain for pop and imap courier_domain(pop) read_locale(courier_pop_t) domain_auto_trans(courier_tcpd_t, courier_pop_exec_t, courier_pop_t) allow courier_pop_t courier_tcpd_t:{ unix_stream_socket tcp_socket } rw_stream_socket_perms; domain_auto_trans(courier_pop_t, courier_authdaemon_exec_t, courier_authdaemon_t) allow courier_pop_t courier_authdaemon_t:tcp_socket rw_stream_socket_perms; allow courier_authdaemon_t courier_tcpd_t:fd use; allow courier_authdaemon_t courier_tcpd_t:tcp_socket rw_stream_socket_perms; allow courier_authdaemon_t courier_tcpd_t:fifo_file rw_file_perms; allow courier_pop_t courier_authdaemon_t:process sigchld; domain_auto_trans(courier_authdaemon_t, courier_pop_exec_t, courier_pop_t) # inherits file handle - should it? allow courier_pop_t courier_var_lib_t:file { read write }; # do the actual work (read the Maildir) # imap needs to write files allow courier_pop_t home_root_t:dir { getattr search }; allow courier_pop_t user_home_dir_type:dir { getattr search }; # pop does not need to create subdirs, IMAP does #rw_dir_create_file(courier_pop_t, user_home_type) create_dir_file(courier_pop_t, user_home_type) # for calendaring courier_domain(pcp) allow courier_pcp_t self:capability { setuid setgid }; allow courier_pcp_t random_device_t:chr_file r_file_perms; # for webmail courier_domain(sqwebmail) ifdef(`crond.te', ` system_crond_entry(sqwebmail_cron_exec_t, courier_sqwebmail_t) ') read_sysctl(courier_sqwebmail_t)