|
|
1ec3d1a |
policy_module(nova, 1.0.0)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
########################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# Declarations
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova-stack daemons contain security issue with using sudo in the code
|
|
|
1ec3d1a |
# we make this policy as unconfined until this issue is fixed
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
attribute nova_domain;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
nova_domain_template(ajax)
|
|
|
1ec3d1a |
nova_domain_template(api)
|
|
|
1ec3d1a |
nova_domain_template(cert)
|
|
|
1ec3d1a |
nova_domain_template(compute)
|
|
|
1ec3d1a |
nova_domain_template(console)
|
|
|
1ec3d1a |
nova_domain_template(direct)
|
|
|
1ec3d1a |
nova_domain_template(network)
|
|
|
1ec3d1a |
nova_domain_template(objectstore)
|
|
|
1ec3d1a |
nova_domain_template(scheduler)
|
|
|
1ec3d1a |
nova_domain_template(vncproxy)
|
|
|
1ec3d1a |
nova_domain_template(volume)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
type nova_log_t;
|
|
|
1ec3d1a |
logging_log_file(nova_log_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
type nova_var_lib_t;
|
|
|
1ec3d1a |
files_type(nova_var_lib_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
type nova_var_run_t;
|
|
|
1ec3d1a |
files_pid_file(nova_var_run_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova general domain local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_domain self:fifo_file rw_fifo_file_perms;
|
|
|
1ec3d1a |
allow nova_domain self:tcp_socket create_stream_socket_perms;
|
|
|
1ec3d1a |
allow nova_domain self:unix_stream_socket create_stream_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
manage_dirs_pattern(nova_domain, nova_log_t, nova_log_t)
|
|
|
1ec3d1a |
manage_files_pattern(nova_domain, nova_log_t, nova_log_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
manage_dirs_pattern(nova_domain, nova_var_lib_t, nova_var_lib_t)
|
|
|
1ec3d1a |
manage_files_pattern(nova_domain, nova_var_lib_t, nova_var_lib_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
manage_dirs_pattern(nova_domain, nova_var_run_t, nova_var_run_t)
|
|
|
1ec3d1a |
manage_files_pattern(nova_domain, nova_var_run_t, nova_var_run_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
corenet_tcp_connect_amqp_port(nova_domain)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
corecmd_exec_bin(nova_domain)
|
|
|
1ec3d1a |
corecmd_exec_shell(nova_domain)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
dev_read_urand(nova_domain)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
fs_getattr_xattr_fs(nova_domain)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
libs_exec_ldconfig(nova_domain)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
sysnet_read_config(nova_domain)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova ajax local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_ajax_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova api local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_api_t self:process setfscreate;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_api_t self:key write;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_api_t self:netlink_route_socket r_netlink_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_api_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
kernel_read_kernel_sysctls(nova_api_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
corenet_tcp_bind_generic_node(nova_api_t)
|
|
|
1ec3d1a |
corenet_udp_bind_generic_node(nova_api_t)
|
|
|
1ec3d1a |
# should be add to booleans
|
|
|
1ec3d1a |
corenet_tcp_connect_all_ports(nova_api_t)
|
|
|
1ec3d1a |
corenet_tcp_bind_all_unreserved_ports(nova_api_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
auth_read_passwd(nova_api_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
logging_send_syslog_msg(nova_api_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
miscfiles_read_certs(nova_api_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
ifdef(`hide_broken_symptoms',`
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
sudo_exec(nova_api_t)
|
|
|
1ec3d1a |
allow nova_api_t self:capability { setuid sys_resource setgid };
|
|
|
1ec3d1a |
allow nova_api_t self:process { setsched setrlimit };
|
|
|
1ec3d1a |
logging_send_audit_msgs(nova_api_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
iptables_domtrans(nova_api_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
ssh_exec_keygen(nova_api_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_api_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova cert local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_cert_t self:process setfscreate;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_cert_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
5302425 |
auth_use_nsswitch(nova_cert_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
miscfiles_read_certs(nova_cert_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
mysql_stream_connect(nova_cert_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova compute local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
# needs to be re-write since now runs as virtd_t
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_compute_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
kernel_read_network_state(nova_compute_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
dev_read_rand(nova_compute_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
dev_read_sysfs(nova_compute_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
virt_getattr_exec(nova_compute_t)
|
|
|
1ec3d1a |
virt_stream_connect(nova_compute_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova console local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_console_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
auth_use_nsswitch(nova_console_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova direct local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_direct_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova network local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_network_t self:capability { dac_override net_admin net_bind_service };
|
|
|
1ec3d1a |
allow nova_network_t self:process { getcap setcap };
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_network_t self:netlink_route_socket r_netlink_socket_perms;
|
|
|
1ec3d1a |
allow nova_network_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
kernel_read_network_state(nova_network_t)
|
|
|
1ec3d1a |
kernel_read_kernel_sysctls(nova_network_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
# should be added to boolean or fixed in the code
|
|
|
1ec3d1a |
# dnsmasq domtrans does not work since then dnsmasq_t wants
|
|
|
1ec3d1a |
# to do some stuff with nova_lib, nova_tmp
|
|
|
1ec3d1a |
# nova-dhcpbridge runs in dnsmasq domain
|
|
|
1ec3d1a |
corenet_all_recvfrom_netlabel(nova_network_t)
|
|
|
1ec3d1a |
corenet_tcp_sendrecv_generic_if(nova_network_t)
|
|
|
1ec3d1a |
corenet_udp_sendrecv_generic_if(nova_network_t)
|
|
|
1ec3d1a |
corenet_raw_sendrecv_generic_if(nova_network_t)
|
|
|
1ec3d1a |
corenet_tcp_sendrecv_generic_node(nova_network_t)
|
|
|
1ec3d1a |
corenet_udp_sendrecv_generic_node(nova_network_t)
|
|
|
1ec3d1a |
corenet_raw_sendrecv_generic_node(nova_network_t)
|
|
|
1ec3d1a |
corenet_tcp_sendrecv_all_ports(nova_network_t)
|
|
|
1ec3d1a |
corenet_udp_sendrecv_all_ports(nova_network_t)
|
|
|
1ec3d1a |
corenet_tcp_bind_generic_node(nova_network_t)
|
|
|
1ec3d1a |
corenet_udp_bind_generic_node(nova_network_t)
|
|
|
1ec3d1a |
corenet_tcp_bind_dns_port(nova_network_t)
|
|
|
1ec3d1a |
corenet_udp_bind_all_ports(nova_network_t)
|
|
|
1ec3d1a |
corenet_sendrecv_dns_server_packets(nova_network_t)
|
|
|
1ec3d1a |
corenet_sendrecv_dhcpd_server_packets(nova_network_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
libs_exec_ldconfig(nova_network_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
logging_send_syslog_msg(nova_network_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
ifdef(`hide_broken_symptoms',`
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
sudo_exec(nova_network_t)
|
|
|
1ec3d1a |
allow nova_network_t self:capability { setuid sys_resource setgid };
|
|
|
1ec3d1a |
allow nova_network_t self:process { setsched setrlimit };
|
|
|
1ec3d1a |
logging_send_audit_msgs(nova_network_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
brctl_domtrans(nova_network_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
dnsmasq_exec(nova_network_t)
|
|
|
1ec3d1a |
# dnsmasq_domtrans(nova_network_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
iptables_domtrans(nova_network_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
sysnet_domtrans_ifconfig(nova_network_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_network_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova object store local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_objectstore_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
corenet_tcp_bind_generic_node(nova_objectstore_t)
|
|
|
1ec3d1a |
corenet_udp_bind_generic_node(nova_objectstore_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_objectstore_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova scheduler local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_scheduler_t self:netlink_route_socket r_netlink_socket_perms;
|
|
|
1ec3d1a |
allow nova_scheduler_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_scheduler_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova vncproxy local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_vncproxy_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
#######################################
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
# nova volume local policy
|
|
|
1ec3d1a |
#
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_volume_t self:netlink_route_socket r_netlink_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_volume_t self:udp_socket create_socket_perms;
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
kernel_read_kernel_sysctls(nova_volume_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
logging_send_syslog_msg(nova_volume_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
lvm_domtrans(nova_volume_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
ifdef(`hide_broken_symptoms',`
|
|
|
1ec3d1a |
require {
|
|
|
1ec3d1a |
type sudo_exec_t;
|
|
|
1ec3d1a |
}
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_volume_t sudo_exec_t:file { read execute open execute_no_trans };
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
allow nova_volume_t self:capability { setuid sys_resource setgid audit_write };
|
|
|
1ec3d1a |
allow nova_volume_t self:process { setsched setrlimit };
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
logging_send_audit_msgs(nova_volume_t)
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|
|
|
1ec3d1a |
optional_policy(`
|
|
|
1ec3d1a |
unconfined_domain(nova_volume_t)
|
|
|
1ec3d1a |
')
|
|
|
1ec3d1a |
|