Refine xen policy

Various changes to the Xen userspace policy, including:
- Add gntdev and gntalloc device node labeling.
- Create separate domains for blktap and qemu-dm rather than leaving them in xend_t.
- No need to allow xen userspace to create its own device nodes anymore;
this is handled automatically by the kernel/udev.
- No need to allow xen userspace access to generic raw storage; even if
using dedicated partitions/LVs for disk images, you can just label them
with xen_image_t.

The blktap and qemu-dm domains are stubs and will likely need to be
further expanded, but they should definitely not be left in xend_t.  Not
sure if I should try to use qemu_domain_template() instead for qemu-dm,
but I don't see any current users of that template (qemu_t uses
virt_domain_template instead), and qemu-dm has specific interactions
with Xen.

Signed-off-by:  Stephen Smalley <sds@tycho.nsa.gov>
This commit is contained in:
Stephen Smalley 2011-02-10 11:17:33 -05:00 committed by Chris PeBenito
parent 9aa8e0f92e
commit 14d23ee979
3 changed files with 104 additions and 17 deletions

View File

@ -173,6 +173,8 @@ ifdef(`distro_suse', `
/dev/xen/blktap.* -c gen_context(system_u:object_r:xen_device_t,s0)
/dev/xen/evtchn -c gen_context(system_u:object_r:xen_device_t,s0)
/dev/xen/gntdev -c gen_context(system_u:object_r:xen_device_t,s0)
/dev/xen/gntalloc -c gen_context(system_u:object_r:xen_device_t,s0)
/etc/udev/devices -d gen_context(system_u:object_r:device_t,s0)

View File

@ -4,6 +4,11 @@
/usr/sbin/evtchnd -- gen_context(system_u:object_r:evtchnd_exec_t,s0)
/usr/sbin/blktapctrl -- gen_context(system_u:object_r:blktap_exec_t,s0)
/usr/sbin/tapdisk -- gen_context(system_u:object_r:blktap_exec_t,s0)
/usr/lib(64)?/xen/bin/qemu-dm -- gen_context(system_u:object_r:qemu_dm_exec_t,s0)
ifdef(`distro_debian',`
/usr/lib/xen-[^/]*/bin/xenconsoled -- gen_context(system_u:object_r:xenconsoled_exec_t,s0)
/usr/lib/xen-[^/]*/bin/xend -- gen_context(system_u:object_r:xend_exec_t,s0)

View File

@ -72,6 +72,7 @@ files_tmp_file(xenstored_tmp_t)
# var/lib files
type xenstored_var_lib_t;
files_type(xenstored_var_lib_t)
files_mountpoint(xenstored_var_lib_t)
# log files
type xenstored_var_log_t;
@ -94,6 +95,38 @@ type xm_exec_t;
domain_type(xm_t)
init_system_domain(xm_t, xm_exec_t)
## <desc>
## <p>
## Allow xend to run qemu-dm.
## Not required if using paravirt and no vfb.
## </p>
## </desc>
gen_tunable(xend_run_qemu, true)
type qemu_dm_t;
domain_type(qemu_dm_t)
type qemu_dm_exec_t;
files_type(qemu_dm_exec_t)
domain_entry_file(qemu_dm_t, qemu_dm_exec_t)
role system_r types qemu_dm_t;
## <desc>
## <p>
## Allow xend to run blktapctrl/tapdisk.
## Not required if using dedicated logical volumes for disk images.
## </p>
## </desc>
gen_tunable(xend_run_blktap, true)
type blktap_t;
domain_type(blktap_t)
role system_r types blktap_t;
type blktap_exec_t;
files_type(blktap_exec_t)
domain_entry_file(blktap_t, blktap_exec_t)
type blktap_var_run_t;
files_pid_file(blktap_var_run_t)
#######################################
#
# evtchnd local policy
@ -113,7 +146,7 @@ files_pid_filetrans(evtchnd_t, evtchnd_var_run_t, { file sock_file dir })
# xend local policy
#
allow xend_t self:capability { mknod dac_override ipc_lock net_admin setuid sys_nice sys_ptrace sys_tty_config net_raw };
allow xend_t self:capability { dac_override ipc_lock net_admin setuid sys_nice sys_tty_config net_raw };
dontaudit xend_t self:capability { sys_ptrace };
allow xend_t self:process { signal sigkill };
dontaudit xend_t self:process ptrace;
@ -161,6 +194,12 @@ files_var_lib_filetrans(xend_t, xend_var_lib_t, { file dir })
# transition to store
domtrans_pattern(xend_t, xenstored_exec_t, xenstored_t)
# manage xenstored pid file
manage_files_pattern(xend_t, xenstored_var_run_t, xenstored_var_run_t)
# mount tmpfs on /var/lib/xenstored
allow xend_t xenstored_var_lib_t:dir read;
# transition to console
domtrans_pattern(xend_t, xenconsoled_exec_t, xenconsoled_t)
@ -193,12 +232,10 @@ corenet_sendrecv_soundd_server_packets(xend_t)
corenet_rw_tun_tap_dev(xend_t)
dev_read_urand(xend_t)
dev_manage_xen(xend_t)
dev_filetrans_xen(xend_t)
dev_rw_sysfs(xend_t)
dev_rw_xen(xend_t)
domain_read_all_domains_state(xend_t)
domain_dontaudit_read_all_domains_state(xend_t)
domain_dontaudit_ptrace_all_domains(xend_t)
@ -210,10 +247,6 @@ files_etc_filetrans_etc_runtime(xend_t, file)
files_read_usr_files(xend_t)
files_read_default_symlinks(xend_t)
storage_raw_read_fixed_disk(xend_t)
storage_raw_write_fixed_disk(xend_t)
storage_raw_read_removable_device(xend_t)
term_getattr_all_ptys(xend_t)
term_use_generic_ptys(xend_t)
term_use_ptmx(xend_t)
@ -228,6 +261,7 @@ logging_send_syslog_msg(xend_t)
lvm_domtrans(xend_t)
miscfiles_read_localization(xend_t)
miscfiles_read_hwdata(xend_t)
mount_domtrans(xend_t)
@ -274,7 +308,7 @@ kernel_read_kernel_sysctls(xenconsoled_t)
kernel_write_xen_state(xenconsoled_t)
kernel_read_xen_state(xenconsoled_t)
dev_manage_xen(xenconsoled_t)
dev_rw_xen(xenconsoled_t)
dev_filetrans_xen(xenconsoled_t)
dev_rw_sysfs(xenconsoled_t)
@ -308,7 +342,7 @@ optional_policy(`
# Xen store local policy
#
allow xenstored_t self:capability { dac_override mknod ipc_lock sys_resource };
allow xenstored_t self:capability { dac_override ipc_lock sys_resource };
allow xenstored_t self:unix_stream_socket create_stream_socket_perms;
allow xenstored_t self:unix_dgram_socket create_socket_perms;
@ -338,20 +372,16 @@ stream_connect_pattern(xenstored_t, evtchnd_var_run_t, evtchnd_var_run_t, evtchn
kernel_write_xen_state(xenstored_t)
kernel_read_xen_state(xenstored_t)
dev_create_generic_dirs(xenstored_t)
dev_manage_xen(xenstored_t)
dev_filetrans_xen(xenstored_t)
dev_rw_xen(xenstored_t)
dev_read_sysfs(xenstored_t)
files_read_etc_files(xenstored_t)
files_read_usr_files(xenstored_t)
fs_manage_xenfs_files(xenstored_t)
storage_raw_read_fixed_disk(xenstored_t)
storage_raw_write_fixed_disk(xenstored_t)
storage_raw_read_removable_device(xenstored_t)
term_use_generic_ptys(xenstored_t)
init_use_fds(xenstored_t)
@ -411,8 +441,6 @@ fs_getattr_all_fs(xm_t)
fs_manage_xenfs_dirs(xm_t)
fs_manage_xenfs_files(xm_t)
storage_raw_read_fixed_disk(xm_t)
term_use_all_terms(xm_t)
init_stream_connect_script(xm_t)
@ -474,3 +502,55 @@ optional_policy(`
unconfined_domain(xend_t)
')
')
########################################
#
# qemu-dm local policy
#
# Do we need to allow execution of qemu-dm?
tunable_policy(`xend_run_qemu',`
# If yes, transition to its own domain.
domtrans_pattern(xend_t, qemu_dm_exec_t, qemu_dm_t)
allow qemu_dm_t self:capability sys_resource;
allow qemu_dm_t self:process setrlimit;
allow qemu_dm_t self:fifo_file { read write };
allow qemu_dm_t self:tcp_socket create_stream_socket_perms;
rw_fifo_files_pattern(qemu_dm_t, xend_var_run_t, xend_var_run_t)
append_files_pattern(qemu_dm_t, xend_var_log_t, xend_var_log_t)
libs_use_ld_so(qemu_dm_t)
libs_use_shared_libs(qemu_dm_t)
files_read_etc_files(qemu_dm_t)
files_read_usr_files(qemu_dm_t)
miscfiles_read_localization(qemu_dm_t)
corenet_tcp_bind_generic_node(qemu_dm_t)
corenet_tcp_bind_vnc_port(qemu_dm_t)
dev_rw_xen(qemu_dm_t)
xen_stream_connect_xenstore(qemu_dm_t)
fs_manage_xenfs_dirs(qemu_dm_t)
fs_manage_xenfs_files(qemu_dm_t)
',`
# If no, then silently refuse to run it.
dontaudit xend_t qemu_dm_exec_t:file { execute execute_no_trans };
')
########################################
#
# blktap local policy
#
# Do we need to allow execution of blktap?
tunable_policy(`xend_run_blktap',`
# If yes, transition to its own domain.
domtrans_pattern(xend_t, blktap_exec_t, blktap_t)
allow blktap_t self:fifo_file { read write };
libs_use_ld_so(blktap_t)
libs_use_shared_libs(blktap_t)
miscfiles_read_localization(blktap_t)
files_read_etc_files(blktap_t)
dev_read_sysfs(blktap_t)
logging_send_syslog_msg(blktap_t)
dev_rw_xen(blktap_t)
xen_stream_connect_xenstore(blktap_t)
',`
# If no, then silently refuse to run it.
dontaudit xend_t blktap_exec_t:file { execute execute_no_trans };
')