selinux-refpolicy/policy/modules/apps/qemu.if
Paul Moore 9dc3cd1635 refpol: Policy for the new TUN driver access controls
Add policy for the new TUN driver access controls which allow policy to
control which domains have the ability to create and attach to TUN/TAP
devices.  The policy rules for creating and attaching to a device are as
shown below:

  # create a new device
  allow domain_t self:tun_socket { create };

  # attach to a persistent device (created by tunlbl_t)
  allow domain_t tunlbl_t:tun_socket { relabelfrom };
  allow domain_t self:tun_socket { relabelto };

Further discussion can be found on this thread:

 * http://marc.info/?t=125080850900002&r=1&w=2

Signed-off-by: Paul Moore <paul.moore@hp.com>
2009-08-31 08:36:06 -04:00

214 lines
4.1 KiB
Plaintext

## <summary>QEMU machine emulator and virtualizer</summary>
########################################
## <summary>
## Execute a domain transition to run qemu.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed to transition.
## </summary>
## </param>
#
interface(`qemu_domtrans',`
gen_require(`
type qemu_t, qemu_exec_t;
')
domtrans_pattern($1, qemu_exec_t, qemu_t)
')
########################################
## <summary>
## Execute qemu in the qemu domain.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
## <param name="role">
## <summary>
## The role to allow the qemu domain.
## </summary>
## </param>
#
interface(`qemu_run',`
gen_require(`
type qemu_t;
')
qemu_domtrans($1)
role $2 types qemu_t;
')
########################################
## <summary>
## Allow the domain to read state files in /proc.
## </summary>
## <param name="domain">
## <summary>
## Domain to allow access.
## </summary>
## </param>
#
interface(`qemu_read_state',`
gen_require(`
type qemu_t;
')
read_files_pattern($1, qemu_t, qemu_t)
')
########################################
## <summary>
## Send a signal to qemu.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`qemu_signal',`
gen_require(`
type qemu_t;
')
allow $1 qemu_t:process signal;
')
########################################
## <summary>
## Send a sigill to qemu
## </summary>
## <param name="domain">
## <summary>
## Domain allowed access.
## </summary>
## </param>
#
interface(`qemu_kill',`
gen_require(`
type qemu_t;
')
allow $1 qemu_t:process sigkill;
')
########################################
## <summary>
## Execute a domain transition to run qemu unconfined.
## </summary>
## <param name="domain">
## <summary>
## Domain allowed to transition.
## </summary>
## </param>
#
interface(`qemu_domtrans_unconfined',`
gen_require(`
type qemu_unconfined_t, qemu_exec_t;
')
domtrans_pattern($1, qemu_exec_t, qemu_unconfined_t)
')
########################################
## <summary>
## Creates types and rules for a basic
## qemu process domain.
## </summary>
## <param name="prefix">
## <summary>
## Prefix for the domain.
## </summary>
## </param>
#
template(`qemu_domain_template',`
##############################
#
# Local Policy
#
type $1_t;
domain_type($1_t)
type $1_tmp_t;
files_tmp_file($1_tmp_t)
##############################
#
# Local Policy
#
allow $1_t self:capability { dac_read_search dac_override };
allow $1_t self:process { execstack execmem signal getsched };
allow $1_t self:fifo_file rw_file_perms;
allow $1_t self:shm create_shm_perms;
allow $1_t self:unix_stream_socket create_stream_socket_perms;
allow $1_t self:tcp_socket create_stream_socket_perms;
allow $1_t self:tun_socket create;
manage_dirs_pattern($1_t, $1_tmp_t, $1_tmp_t)
manage_files_pattern($1_t, $1_tmp_t, $1_tmp_t)
files_tmp_filetrans($1_t, $1_tmp_t, { file dir })
kernel_read_system_state($1_t)
corenet_all_recvfrom_unlabeled($1_t)
corenet_all_recvfrom_netlabel($1_t)
corenet_tcp_sendrecv_generic_if($1_t)
corenet_tcp_sendrecv_generic_node($1_t)
corenet_tcp_sendrecv_all_ports($1_t)
corenet_tcp_bind_generic_node($1_t)
corenet_tcp_bind_vnc_port($1_t)
corenet_rw_tun_tap_dev($1_t)
# dev_rw_kvm($1_t)
domain_use_interactive_fds($1_t)
files_read_etc_files($1_t)
files_read_usr_files($1_t)
files_read_var_files($1_t)
files_search_all($1_t)
fs_list_inotifyfs($1_t)
fs_rw_anon_inodefs_files($1_t)
fs_rw_tmpfs_files($1_t)
storage_raw_write_removable_device($1_t)
storage_raw_read_removable_device($1_t)
term_use_ptmx($1_t)
term_getattr_pty_fs($1_t)
term_use_generic_ptys($1_t)
miscfiles_read_localization($1_t)
sysnet_read_config($1_t)
userdom_use_user_terminals($1_t)
userdom_attach_admin_tun_iface($1_t)
optional_policy(`
samba_domtrans_smbd($1_t)
')
optional_policy(`
virt_manage_images($1_t)
virt_read_config($1_t)
virt_read_lib_files($1_t)
virt_attach_tun_iface($1_t)
')
optional_policy(`
xserver_stream_connect($1_t)
xserver_read_xdm_tmp_files($1_t)
xserver_read_xdm_pid($1_t)
# xserver_xdm_rw_shm($1_t)
')
')