## Remote Procedure Call Daemon for managment of network based process communication
########################################
##
## RPC stub interface. No access allowed.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_stub',`
gen_require(`
type exports_t;
')
')
#######################################
##
## The template to define a rpc domain.
##
##
##
## This template creates a domain to be used for
## a new rpc daemon.
##
##
##
##
## The type of daemon to be used.
##
##
#
template(`rpc_domain_template',`
gen_require(`
attribute rpc_domain;
')
########################################
#
# Declarations
#
type $1_t, rpc_domain;
type $1_exec_t;
init_daemon_domain($1_t, $1_exec_t)
domain_use_interactive_fds($1_t)
####################################
#
# Local Policy
#
kernel_read_system_state($1_t)
corenet_all_recvfrom_unlabeled($1_t)
corenet_all_recvfrom_netlabel($1_t)
auth_use_nsswitch($1_t)
logging_send_syslog_msg($1_t)
')
########################################
##
## Send UDP network traffic to rpc and recieve UDP traffic from rpc. (Deprecated)
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_udp_send',`
refpolicywarn(`$0($*) has been deprecated.')
')
########################################
##
## Do not audit attempts to get the attributes
## of the NFS export file.
##
##
##
## Domain to not audit.
##
##
#
interface(`rpc_dontaudit_getattr_exports',`
gen_require(`
type exports_t;
')
dontaudit $1 exports_t:file getattr_file_perms;
')
########################################
##
## Allow read access to exports.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_read_exports',`
gen_require(`
type exports_t;
')
allow $1 exports_t:file read_file_perms;
')
########################################
##
## Allow write access to exports.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_write_exports',`
gen_require(`
type exports_t;
')
allow $1 exports_t:file write_file_perms;
')
########################################
##
## Manage nfs file exports
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_manage_exports',`
gen_require(`
type exports_t;
')
manage_files_pattern($1, exports_t, exports_t)
')
########################################
##
## Watch nfs file exports
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_watch_exports',`
gen_require(`
type exports_t;
')
files_search_etc($1)
allow $1 exports_t:file watch_file_perms;
')
########################################
##
## Execute domain in nfsd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_domtrans_nfsd',`
gen_require(`
type nfsd_t, nfsd_exec_t;
')
domtrans_pattern($1, nfsd_exec_t, nfsd_t)
')
#######################################
##
## Execute domain in nfsd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_initrc_domtrans_nfsd',`
gen_require(`
type nfsd_initrc_exec_t;
')
init_labeled_script_domtrans($1, nfsd_initrc_exec_t)
')
########################################
##
## Execute nfsd server in the nfsd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_systemctl_nfsd',`
gen_require(`
type nfsd_unit_file_t;
type nfsd_t;
')
systemd_exec_systemctl($1)
init_reload_services($1)
allow $1 nfsd_unit_file_t:file read_file_perms;
allow $1 nfsd_unit_file_t:service manage_service_perms;
ps_process_pattern($1, nfsd_t)
')
########################################
##
## Send kill signals to rpcd.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_kill_rpcd',`
gen_require(`
type rpcd_t;
')
allow $1 rpcd_t:process sigkill;
')
########################################
##
## Execute domain in rpcd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_domtrans_rpcd',`
gen_require(`
type rpcd_t, rpcd_exec_t;
')
domtrans_pattern($1, rpcd_exec_t, rpcd_t)
allow rpcd_t $1:process signal;
')
########################################
##
## Execute rpcd in the rcpd domain, and
## allow the specified role the rpcd domain.
##
##
##
## Domain allowed to transition.
##
##
##
##
## Role allowed access.
##
##
##
#
interface(`rpc_run_rpcd',`
gen_require(`
type rpcd_t;
')
rpc_domtrans_rpcd($1)
role $2 types rpcd_t;
')
#######################################
##
## Execute domain in rpcd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_initrc_domtrans_rpcd',`
gen_require(`
type rpcd_initrc_exec_t;
')
init_labeled_script_domtrans($1, rpcd_initrc_exec_t)
')
########################################
##
## Execute rpcd server in the rpcd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_systemctl_rpcd',`
gen_require(`
type rpcd_unit_file_t;
type rpcd_t;
')
systemd_exec_systemctl($1)
init_reload_services($1)
allow $1 rpcd_unit_file_t:file read_file_perms;
allow $1 rpcd_unit_file_t:service manage_service_perms;
ps_process_pattern($1, rpcd_t)
')
########################################
##
## Allow domain to read and write to an NFS UDP socket.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_udp_rw_nfs_sockets',`
gen_require(`
type nfsd_t;
')
allow $1 nfsd_t:udp_socket rw_socket_perms;
')
########################################
##
## Send UDP traffic to NFSd. (Deprecated)
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_udp_send_nfs',`
refpolicywarn(`$0($*) has been deprecated.')
')
########################################
##
## Search NFS state data in /var/lib/nfs.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_search_nfs_state_data',`
gen_require(`
type var_lib_nfs_t;
')
files_search_var_lib($1)
allow $1 var_lib_nfs_t:dir search_dir_perms;
')
########################################
##
## List NFS state data in /var/lib/nfs.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_list_nfs_state_data',`
gen_require(`
type var_lib_nfs_t;
')
files_search_var_lib($1)
allow $1 var_lib_nfs_t:dir list_dir_perms;
')
########################################
##
## Manage NFS state data in /var/lib/nfs.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_manage_nfs_state_data_dir',`
gen_require(`
type var_lib_nfs_t;
')
files_search_var_lib($1)
allow $1 var_lib_nfs_t:dir manage_dir_perms;
')
########################################
##
## Read NFS state data in /var/lib/nfs.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_read_nfs_state_data',`
gen_require(`
type var_lib_nfs_t;
')
files_search_var_lib($1)
read_files_pattern($1, var_lib_nfs_t, var_lib_nfs_t)
read_lnk_files_pattern($1, var_lib_nfs_t, var_lib_nfs_t)
')
########################################
##
## Manage NFS state data in /var/lib/nfs.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_manage_nfs_state_data',`
gen_require(`
type var_lib_nfs_t;
')
files_search_var_lib($1)
manage_files_pattern($1, var_lib_nfs_t, var_lib_nfs_t)
allow $1 var_lib_nfs_t:file relabel_file_perms;
')
########################################
##
## Execute domain in gssd domain.
##
##
##
## Domain allowed to transition.
##
##
#
interface(`rpc_domtrans_gssd',`
gen_require(`
type gssd_t, gssd_exec_t;
')
domtrans_pattern($1, gssd_exec_t, gssd_t)
')
########################################
##
## Write keys for all user domains.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_rw_gssd_keys',`
gen_require(`
type gssd_t;
')
allow $1 gssd_t:key { read search setattr view write };
')
########################################
##
## Transition to alsa named content
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_filetrans_var_lib_nfs_content',`
gen_require(`
type var_lib_nfs_t;
')
files_var_lib_filetrans($1, var_lib_nfs_t, lnk_file, "nfs")
')
#######################################
##
## All of the rules required to
## administrate an rpc environment.
##
##
##
## Domain allowed access.
##
##
##
##
## Role allowed access.
##
##
##
#
interface(`rpc_admin',`
gen_require(`
attribute rpc_domain;
type nfsd_initrc_exec_t, rpcd_initrc_exec_t, exports_t;
type var_lib_nfs_t, rpcd_var_run_t, gssd_tmp_t;
type nfsd_rw_t, gssd_keytab_t;
')
allow $1 rpc_domain:process { ptrace signal_perms };
ps_process_pattern($1, rpc_domain)
init_labeled_script_domtrans($1, { nfsd_initrc_exec_t rpcd_initrc_exec_t })
domain_system_change_exemption($1)
role_transition $2 { nfsd_initrc_exec_t rpcd_initrc_exec_t } system_r;
allow $2 system_r;
files_list_etc($1)
admin_pattern($1, { gssd_keytab_t exports_t })
files_list_var_lib($1)
admin_pattern($1, var_lib_nfs_t)
files_list_pids($1)
admin_pattern($1, rpcd_var_run_t)
files_list_all($1)
admin_pattern($1, nfsd_rw_t )
files_list_tmp($1)
admin_pattern($1, gssd_tmp_t)
fs_search_nfsd_fs($1)
')
########################################
##
## Read gssd process state files.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_read_gssd_state',`
gen_require(`
type gssd_t;
')
ps_process_pattern($1, gssd_t)
')
########################################
##
## Read and write to svirt_image devices.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_gssd_noatsecure',`
gen_require(`
type gssd_t;
')
allow $1 gssd_t:process { noatsecure rlimitinh };
')
########################################
##
## Send and receive messages from
## ganesha over dbus.
##
##
##
## Domain allowed access.
##
##
#
interface(`rpc_dbus_chat_nfsd',`
gen_require(`
type nfsd_t;
class dbus send_msg;
')
allow $1 nfsd_t:dbus send_msg;
allow nfsd_t $1:dbus send_msg;
')