## ## SMB and CIFS client/server programs for UNIX and ## name Service Switch daemon for resolving names ## from Windows NT servers. ## ######################################## ## ## Execute nmbd net in the nmbd_t domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_nmbd',` gen_require(` type nmbd_t, nmbd_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1, nmbd_exec_t, nmbd_t) ') ####################################### ## ## Allow domain to signal samba ## ## ## ## Domain allowed access. ## ## # interface(`samba_signal_nmbd',` gen_require(` type nmbd_t; ') allow $1 nmbd_t:process signal; ') ######################################## ## ## Search the samba pid directory. ## ## ## ## Domain to not audit. ## ## # interface(`samba_search_pid',` gen_require(` type smbd_var_run_t; ') files_search_pids($1) allow $1 smbd_var_run_t:dir search_dir_perms; ') ######################################## ## ## Connect to nmbd. ## ## ## ## Domain allowed access. ## ## # interface(`samba_stream_connect_nmbd',` gen_require(` type nmbd_t, nmbd_var_run_t; ') samba_search_pid($1) stream_connect_pattern($1, nmbd_var_run_t, nmbd_var_run_t, nmbd_t) ') ######################################## ## ## Execute samba server in the samba domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_initrc_domtrans',` gen_require(` type samba_initrc_exec_t; ') init_labeled_script_domtrans($1, samba_initrc_exec_t) ') ######################################## ## ## Execute samba server in the samba domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_systemctl',` gen_require(` type samba_unit_file_t; type smbd_t; ') systemd_exec_systemctl($1) init_reload_services($1) allow $1 samba_unit_file_t:file read_file_perms; allow $1 samba_unit_file_t:service manage_service_perms; ps_process_pattern($1, smbd_t) ') ####################################### ## ## Get samba services status ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_service_status',` gen_require(` type samba_unit_file_t; ') allow $1 samba_unit_file_t:service status; ') ######################################## ## ## Execute samba net in the samba_net domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_net',` gen_require(` type samba_net_t, samba_net_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1, samba_net_exec_t, samba_net_t) ') ######################################## ## ## Execute samba net in the samba_unconfined_net domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_unconfined_net',` gen_require(` type samba_unconfined_net_t, samba_net_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1, samba_net_exec_t, samba_unconfined_net_t) ') ######################################## ## ## Execute samba net in the caller domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_exec_net',` gen_require(` type samba_net_exec_t; ') corecmd_search_bin($1) can_exec($1, samba_net_exec_t) ') ######################################## ## ## Execute samba net in the samba_net domain, and ## allow the specified role the samba_net domain. ## ## ## ## Domain allowed to transition. ## ## ## ## ## Role allowed access. ## ## ## # interface(`samba_run_net',` gen_require(` type samba_net_t; ') samba_domtrans_net($1) role $2 types samba_net_t; ') ####################################### ## ## The role for the samba module. ## ## ## ## The role to be allowed the samba_net domain. ## ## ## # interface(`samba_role_notrans',` gen_require(` type smbd_t; ') role $1 types smbd_t; ') ######################################## ## ## Execute samba net in the samba_unconfined_net domain, and ## allow the specified role the samba_unconfined_net domain. ## ## ## ## Domain allowed to transition. ## ## ## ## ## The role to be allowed the samba_unconfined_net domain. ## ## ## # interface(`samba_run_unconfined_net',` gen_require(` type samba_unconfined_net_t; ') samba_domtrans_unconfined_net($1) role $2 types samba_unconfined_net_t; ') ######################################## ## ## Execute smbmount in the smbmount domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_smbmount',` gen_require(` type smbmount_t, smbmount_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1, smbmount_exec_t, smbmount_t) ') ######################################## ## ## Execute smbmount interactively and do ## a domain transition to the smbmount domain. ## ## ## ## Domain allowed to transition. ## ## ## ## ## Role allowed access. ## ## ## # interface(`samba_run_smbmount',` gen_require(` type smbmount_t; ') samba_domtrans_smbmount($1) role $2 types smbmount_t; ') ######################################## ## ## Allow the specified domain to read ## samba configuration files. ## ## ## ## Domain allowed access. ## ## ## # interface(`samba_read_config',` gen_require(` type samba_etc_t; ') files_search_etc($1) list_dirs_pattern($1, samba_etc_t, samba_etc_t) read_files_pattern($1, samba_etc_t, samba_etc_t) ') ######################################## ## ## Allow the specified domain to read ## and write samba configuration files. ## ## ## ## Domain allowed access. ## ## ## # interface(`samba_rw_config',` gen_require(` type samba_etc_t; ') files_search_etc($1) rw_files_pattern($1, samba_etc_t, samba_etc_t) ') ######################################## ## ## Allow the specified domain to read ## and write samba configuration files. ## ## ## ## Domain allowed access. ## ## ## # interface(`samba_manage_config',` gen_require(` type samba_etc_t; ') files_search_etc($1) manage_dirs_pattern($1, samba_etc_t, samba_etc_t) manage_files_pattern($1, samba_etc_t, samba_etc_t) ') ######################################## ## ## Allow the specified domain to read samba's log files. ## ## ## ## Domain allowed access. ## ## ## # interface(`samba_read_log',` gen_require(` type samba_log_t; ') logging_search_logs($1) allow $1 samba_log_t:dir list_dir_perms; read_files_pattern($1, samba_log_t, samba_log_t) ') ######################################## ## ## Allow the specified domain to append to samba's log files. ## ## ## ## Domain allowed access. ## ## ## # interface(`samba_append_log',` gen_require(` type samba_log_t; ') logging_search_logs($1) allow $1 samba_log_t:dir list_dir_perms; allow $1 samba_log_t:file append_file_perms; ') ######################################## ## ## Execute samba log in the caller domain. ## ## ## ## Domain allowed access. ## ## # interface(`samba_exec_log',` gen_require(` type samba_log_t; ') logging_search_logs($1) can_exec($1, samba_log_t) ') ######################################## ## ## Allow the specified domain to read samba's secrets. ## ## ## ## Domain allowed access. ## ## # interface(`samba_read_secrets',` gen_require(` type samba_secrets_t; ') files_search_etc($1) allow $1 samba_secrets_t:file read_file_perms; ') ######################################## ## ## Allow the specified domain to read samba's shares ## ## ## ## Domain allowed access. ## ## # interface(`samba_read_share_files',` gen_require(` type samba_share_t; ') allow $1 samba_share_t:filesystem getattr; read_files_pattern($1, samba_share_t, samba_share_t) ') ######################################## ## ## Allow the specified domain to search ## samba /var directories. ## ## ## ## Domain allowed access. ## ## # interface(`samba_search_var',` gen_require(` type samba_var_t; ') files_search_var($1) files_search_var_lib($1) allow $1 samba_var_t:dir search_dir_perms; ') ######################################## ## ## Allow the specified domain to ## read samba /var files. ## ## ## ## Domain allowed access. ## ## # interface(`samba_read_var_files',` gen_require(` type samba_var_t; ') files_search_var($1) files_search_var_lib($1) read_files_pattern($1, samba_var_t, samba_var_t) ') ######################################## ## ## Do not audit attempts to write samba ## /var files. ## ## ## ## Domain to not audit. ## ## # interface(`samba_dontaudit_write_var_files',` gen_require(` type samba_var_t; ') dontaudit $1 samba_var_t:file write; ') ######################################## ## ## Allow the specified domain to ## read and write samba /var files. ## ## ## ## Domain allowed access. ## ## # interface(`samba_rw_var_files',` gen_require(` type samba_var_t; ') files_search_var($1) files_search_var_lib($1) rw_files_pattern($1, samba_var_t, samba_var_t) allow $1 samba_var_t:file { map}; ') ######################################## ## ## Allow the specified domain to ## read and write samba /var files. ## ## ## ## Domain allowed access. ## ## # interface(`samba_manage_var_files',` gen_require(` type samba_var_t; ') files_search_var_lib($1) files_search_var_lib($1) manage_files_pattern($1, samba_var_t, samba_var_t) manage_lnk_files_pattern($1, samba_var_t, samba_var_t) manage_sock_files_pattern($1, samba_var_t, samba_var_t) allow $1 samba_var_t:file { map }; ') ######################################## ## ## Allow the specified domain to ## read and write samba /var directories. ## ## ## ## Domain allowed access. ## ## # interface(`samba_manage_var_dirs',` gen_require(` type samba_var_t; ') files_search_var_lib($1) files_search_var_lib($1) manage_dirs_pattern($1, samba_var_t, samba_var_t) ') ##################################### ## ## Manage samba var sock files. ## ## ## ## Domain allowed access. ## ## # interface(`samba_manage_var_sock_files',` gen_require(` type samba_var_t; ') files_search_pids($1) manage_sock_files_pattern($1, samba_var_t, samba_var_t) ') ######################################## ## ## Execute a domain transition to run smbcontrol. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_smbcontrol',` gen_require(` type smbcontrol_t; type smbcontrol_exec_t; ') domtrans_pattern($1, smbcontrol_exec_t, smbcontrol_t) ') ######################################## ## ## Execute smbcontrol in the smbcontrol domain, and ## allow the specified role the smbcontrol domain. ## ## ## ## Domain allowed to transition. ## ## ## ## ## Role allowed access. ## ## # interface(`samba_run_smbcontrol',` gen_require(` type smbcontrol_t; ') samba_domtrans_smbcontrol($1) role $2 types smbcontrol_t; ') ######################################## ## ## Execute smbd in the smbd_t domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_smbd',` gen_require(` type smbd_t, smbd_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1, smbd_exec_t, smbd_t) ') ######################################## ## ## Set attributes of samba_share directories. ## ## ## ## Domain allowed access. ## ## # interface(`samba_setattr_samba_share_dirs',` gen_require(` type samba_share_t; ') allow $1 samba_share_t:dir setattr_dir_perms; ') ###################################### ## ## Allow domain to signal samba ## ## ## ## Domain allowed access. ## ## # interface(`samba_signal_smbd',` gen_require(` type smbd_t; ') allow $1 smbd_t:process signal; ') ###################################### ## ## Allow domain to signull samba ## ## ## ## Domain allowed access. ## ## # interface(`samba_signull_smbd',` gen_require(` type smbd_t; ') allow $1 smbd_t:process signull; ') ######################################## ## ## Do not audit attempts to use file descriptors from samba. ## ## ## ## Domain to not audit. ## ## # interface(`samba_dontaudit_use_fds',` gen_require(` type smbd_t; ') dontaudit $1 smbd_t:fd use; ') ######################################## ## ## Allow the specified domain to write to smbmount tcp sockets. ## ## ## ## Domain allowed access. ## ## # interface(`samba_write_smbmount_tcp_sockets',` gen_require(` type smbmount_t; ') allow $1 smbmount_t:tcp_socket write; ') ######################################## ## ## Allow the specified domain to read and write to smbmount tcp sockets. ## ## ## ## Domain allowed access. ## ## # interface(`samba_rw_smbmount_tcp_sockets',` gen_require(` type smbmount_t; ') allow $1 smbmount_t:tcp_socket { read write }; ') ####################################### ## ## Allow to getattr on winbind binary. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_getattr_winbind',` gen_require(` type winbind_exec_t; ') allow $1 winbind_exec_t:file getattr; ') ######################################## ## ## Execute winbind_helper in the winbind_helper domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_winbind_helper',` gen_require(` type winbind_helper_t, winbind_helper_exec_t; ') domtrans_pattern($1, winbind_helper_exec_t, winbind_helper_t) allow $1 winbind_helper_t:process signal; ') ######################################## ## ## Execute winbind_helper in the winbind_helper domain, and ## allow the specified role the winbind_helper domain. ## ## ## ## Domain allowed to transition. ## ## ## ## ## Role allowed access. ## ## ## # interface(`samba_run_winbind_helper',` gen_require(` type winbind_helper_t; ') samba_domtrans_winbind_helper($1) role $2 types winbind_helper_t; ') ######################################## ## ## Allow the specified domain to read the winbind pid files. ## ## ## ## Domain allowed access. ## ## # interface(`samba_read_winbind_pid',` gen_require(` type winbind_var_run_t; ') samba_search_pid($1) allow $1 winbind_var_run_t:file read_file_perms; ') ######################################## ## ## Manage winbind PID files. ## ## ## ## Domain allowed access. ## ## # interface(`samba_manage_winbind_pid',` gen_require(` type winbind_var_run_t; ') files_search_pids($1) manage_dirs_pattern($1, winbind_var_run_t, winbind_var_run_t) manage_files_pattern($1, winbind_var_run_t, winbind_var_run_t) manage_sock_files_pattern($1, winbind_var_run_t, winbind_var_run_t) ') ###################################### ## ## Allow domain to signull winbind ## ## ## ## Domain allowed access. ## ## # interface(`samba_signull_winbind',` gen_require(` type winbind_t; ') allow $1 winbind_t:process signull; ') ###################################### ## ## Allow domain to signull samba_unconfined_net ## ## ## ## Domain allowed access. ## ## # interface(`samba_signull_unconfined_net',` gen_require(` type samba_unconfined_net_t; ') allow $1 samba_unconfined_net_t:process signull; ') ######################################## ## ## Connect to winbind. ## ## ## ## Domain allowed access. ## ## # interface(`samba_stream_connect_winbind',` gen_require(` type samba_var_t, winbind_t, winbind_var_run_t; ') samba_search_pid($1) allow $1 samba_var_t:dir search_dir_perms; stream_connect_pattern($1, winbind_var_run_t, winbind_var_run_t, winbind_t) samba_read_config($1) ifndef(`distro_redhat',` gen_require(` type winbind_tmp_t; ') # the default for the socket is (poorly named): # /tmp/.winbindd/pipe files_search_tmp($1) stream_connect_pattern($1, winbind_tmp_t, winbind_tmp_t, winbind_t) ') ') ######################################## ## ## Create a set of derived types for apache ## web content. ## ## ## ## The prefix to be used for deriving type names. ## ## # template(`samba_helper_template',` gen_require(` type smbd_t; role system_r; ') #This type is for samba helper scripts type samba_$1_script_t; domain_type(samba_$1_script_t) role system_r types samba_$1_script_t; # This type is used for executable scripts files type samba_$1_script_exec_t; corecmd_shell_entry_type(samba_$1_script_t) domain_entry_file(samba_$1_script_t, samba_$1_script_exec_t) domtrans_pattern(smbd_t, samba_$1_script_exec_t, samba_$1_script_t) allow smbd_t samba_$1_script_exec_t:file ioctl; ') ######################################## ## ## All of the rules required to administrate ## an samba environment ## ## ## ## Domain allowed access. ## ## ## ## ## The role to be allowed to manage the samba domain. ## ## ## # interface(`samba_admin',` gen_require(` type nmbd_t, nmbd_var_run_t, smbd_var_run_t; type smbd_t, smbd_tmp_t, smbd_spool_t; type samba_log_t, samba_var_t, samba_secrets_t; type samba_etc_t, samba_share_t, samba_initrc_exec_t; type swat_var_run_t, swat_tmp_t, winbind_log_t; type winbind_var_run_t, winbind_tmp_t; type smbd_keytab_t, samba_unit_file_t; type samba_unconfined_script_t; type samba_unconfined_script_exec_t; ') allow $1 smbd_t:process signal_perms; ps_process_pattern($1, smbd_t) tunable_policy(`deny_ptrace',`',` allow $1 smbd_t:process ptrace; allow $1 nmbd_t:process ptrace; allow $1 samba_unconfined_script_t:process ptrace; ') allow $1 nmbd_t:process signal_perms; ps_process_pattern($1, nmbd_t) allow $1 samba_unconfined_script_t:process signal_perms; ps_process_pattern($1, samba_unconfined_script_t) samba_run_smbcontrol($1, $2) samba_run_winbind_helper($1, $2) samba_run_smbmount($1, $2) samba_run_net($1, $2) init_labeled_script_domtrans($1, samba_initrc_exec_t) domain_system_change_exemption($1) role_transition $2 samba_initrc_exec_t system_r; allow $2 system_r; files_list_etc($1) admin_pattern($1, { samba_etc_t smbd_keytab_t }) admin_pattern($1, samba_log_t) logging_list_logs($1) admin_pattern($1, samba_secrets_t) admin_pattern($1, samba_share_t) admin_pattern($1, samba_var_t) files_list_var($1) admin_pattern($1, smbd_var_run_t) files_list_pids($1) admin_pattern($1, smbd_tmp_t) files_list_tmp($1) admin_pattern($1, swat_var_run_t) admin_pattern($1, swat_tmp_t) admin_pattern($1, winbind_log_t) admin_pattern($1, winbind_tmp_t) admin_pattern($1, winbind_var_run_t) admin_pattern($1, samba_unconfined_script_exec_t) samba_systemctl($1) admin_pattern($1, samba_unit_file_t) allow $1 samba_unit_file_t:service all_service_perms; ') ######################################## ## ## Execute winbind rpcd in the winbind_rpcd_t domain. ## ## ## ## Domain allowed to transition. ## ## # interface(`samba_domtrans_winbind_rpcd',` gen_require(` type winbind_rpcd_t, winbind_rpcd_exec_t; ') corecmd_search_bin($1) domtrans_pattern($1, winbind_rpcd_exec_t, winbind_rpcd_t) ')