Skip to content

Commit ea191fb

Browse files
committed
Introduce SELinux policy for libvirt drivers
New SELinux policy for libvirt drivers: Hypervisor drivers: - virtqemud (QEMU/KVM) - virtlxcd (LXC) - virtvboxd (VirtualBox) Secondary drivers: - virtstoraged (host storage mgmt) - virtnetworkd (virtual network mgmt) - virtinterface (network interface mgmt) - virtnodedevd (physical device mgmt) - virtsecretd (security credential mgmt) - virtnwfilterd (ip[6]tables/ebtables mgmt) - virtproxyd (proxy daemon) SELinux policy for virtvxz and virtxend has not been created yet.
1 parent 27225b9 commit ea191fb

File tree

3 files changed

+353
-20
lines changed

3 files changed

+353
-20
lines changed

virt.fc

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ HOME_DIR/\.local/share/libvirt/boot(/.*)? gen_context(system_u:object_r:svirt_
2828
/usr/libexec/libvirt_lxc -- gen_context(system_u:object_r:virtd_lxc_exec_t,s0)
2929
/usr/libexec/qemu-bridge-helper gen_context(system_u:object_r:virt_bridgehelper_exec_t,s0)
3030

31+
/usr/sbin/libvirt-qmf -- gen_context(system_u:object_r:virt_qmf_exec_t,s0)
3132
/usr/sbin/libvirtd -- gen_context(system_u:object_r:virtd_exec_t,s0)
3233
/usr/sbin/virtlockd -- gen_context(system_u:object_r:virtlogd_exec_t,s0)
3334
/usr/sbin/virtlogd -- gen_context(system_u:object_r:virtlogd_exec_t,s0)
@@ -38,17 +39,18 @@ HOME_DIR/\.local/share/libvirt/boot(/.*)? gen_context(system_u:object_r:svirt_
3839
/usr/sbin/xl -- gen_context(system_u:object_r:virsh_exec_t,s0)
3940
/usr/sbin/xm -- gen_context(system_u:object_r:virsh_exec_t,s0)
4041

41-
/usr/sbin/virtinterfaced -- gen_context(system_u:object_r:virtd_exec_t,s0)
42-
/usr/sbin/virtlxcd -- gen_context(system_u:object_r:virtd_exec_t,s0)
43-
/usr/sbin/virtnetworkd -- gen_context(system_u:object_r:virtd_exec_t,s0)
44-
/usr/sbin/virtnodedevd -- gen_context(system_u:object_r:virtd_exec_t,s0)
45-
/usr/sbin/virtnwfilterd -- gen_context(system_u:object_r:virtd_exec_t,s0)
46-
/usr/sbin/virtqemud -- gen_context(system_u:object_r:virtd_exec_t,s0)
47-
/usr/sbin/virtsecretd -- gen_context(system_u:object_r:virtd_exec_t,s0)
48-
/usr/sbin/virtstoraged -- gen_context(system_u:object_r:virtd_exec_t,s0)
49-
/usr/sbin/virtvboxd -- gen_context(system_u:object_r:virtd_exec_t,s0)
50-
/usr/sbin/virtvzd -- gen_context(system_u:object_r:virtd_exec_t,s0)
51-
/usr/sbin/virtxend -- gen_context(system_u:object_r:virtd_exec_t,s0)
42+
/usr/sbin/virtinterfaced -- gen_context(system_u:object_r:virtinterfaced_exec_t,s0)
43+
/usr/sbin/virtlxcd -- gen_context(system_u:object_r:virtd_lxc_exec_t,s0)
44+
/usr/sbin/virtnetworkd -- gen_context(system_u:object_r:virtnetworkd_exec_t,s0)
45+
/usr/sbin/virtnodedevd -- gen_context(system_u:object_r:virtnodedevd_exec_t,s0)
46+
/usr/sbin/virtnwfilterd -- gen_context(system_u:object_r:virtnwfilterd_exec_t,s0)
47+
/usr/sbin/virtproxyd -- gen_context(system_u:object_r:virtproxyd_exec_t,s0)
48+
/usr/sbin/virtqemud -- gen_context(system_u:object_r:virtqemud_exec_t,s0)
49+
/usr/sbin/virtsecretd -- gen_context(system_u:object_r:virtsecretd_exec_t,s0)
50+
/usr/sbin/virtstoraged -- gen_context(system_u:object_r:virtstoraged_exec_t,s0)
51+
/usr/sbin/virtvboxd -- gen_context(system_u:object_r:virtvboxd_exec_t,s0)
52+
/usr/sbin/virtvzd -- gen_context(system_u:object_r:virtvzd_exec_t,s0)
53+
/usr/sbin/virtxend -- gen_context(system_u:object_r:virtxend_exec_t,s0)
5254

5355
/var/cache/libvirt(/.*)? gen_context(system_u:object_r:virt_cache_t,s0-mls_systemhigh)
5456

@@ -58,19 +60,60 @@ HOME_DIR/\.local/share/libvirt/boot(/.*)? gen_context(system_u:object_r:svirt_
5860
/var/lib/libvirt/isos(/.*)? gen_context(system_u:object_r:virt_content_t,s0)
5961
/var/lib/libvirt/qemu(/.*)? gen_context(system_u:object_r:qemu_var_run_t,s0-mls_systemhigh)
6062

61-
/var/lock/xl -- gen_context(system_u:object_r:virt_log_t,s0)
62-
/var/log/log(/.*)? gen_context(system_u:object_r:virt_log_t,s0)
63-
/var/log/libvirt(/.*)? gen_context(system_u:object_r:virt_log_t,s0)
64-
/var/log/vdsm(/.*)? gen_context(system_u:object_r:virt_log_t,s0)
65-
/var/run/libvirtd\.pid -- gen_context(system_u:object_r:virt_var_run_t,s0)
66-
/var/run/virtlogd\.pid -- gen_context(system_u:object_r:virtlogd_var_run_t,s0)
63+
/var/lock/xl -- gen_context(system_u:object_r:virt_log_t,s0)
64+
/var/log/log(/.*)? gen_context(system_u:object_r:virt_log_t,s0)
65+
/var/log/libvirt(/.*)? gen_context(system_u:object_r:virt_log_t,s0)
66+
/var/log/vdsm(/.*)? gen_context(system_u:object_r:virt_log_t,s0)
67+
/var/run/libvirtd\.pid -- gen_context(system_u:object_r:virt_var_run_t,s0)
68+
/var/run/virtlogd\.pid -- gen_context(system_u:object_r:virtlogd_var_run_t,s0)
69+
/var/run/virtlxcd\.pid -- gen_context(system_u:object_r:virt_lxc_var_run_t,s0)
70+
/var/run/virtqemud\.pid -- gen_context(system_u:object_r:qemu_var_run_t,s0)
71+
/var/run/virtvboxd\.pid -- gen_context(system_u:object_r:virtvboxd_var_run_t,s0)
72+
/var/run/virtproxyd\.pid -- gen_context(system_u:object_r:virtproxyd_var_run_t,s0)
73+
/var/run/virtinterfaced\.pid -- gen_context(system_u:object_r:virtinterfaced_var_run_t,s0)
74+
/var/run/virtnetworkd\.pid -- gen_context(system_u:object_r:virtnetworkd_var_run_t,s0)
75+
/var/run/virtnodedevd\.pid -- gen_context(system_u:object_r:virtnodedevd_var_run_t,s0)
76+
/var/run/virtnwfilterd\.pid -- gen_context(system_u:object_r:virtnwfilterd_var_run_t,s0)
77+
/var/run/virtsecretd\.pid -- gen_context(system_u:object_r:virtsecretd_var_run_t,s0)
78+
/var/run/virtstoraged\.pid -- gen_context(system_u:object_r:virtstoraged_var_run_t,s0)
79+
6780
/var/run/libvirt(/.*)? gen_context(system_u:object_r:virt_var_run_t,s0)
6881
/var/run/libvirt/qemu(/.*)? gen_context(system_u:object_r:qemu_var_run_t,s0-mls_systemhigh)
6982
/var/run/libvirt/lxc(/.*)? gen_context(system_u:object_r:virt_lxc_var_run_t,s0)
70-
/var/run/libvirt/virtlogd-sock -s gen_context(system_u:object_r:virtlogd_var_run_t,s0)
83+
/var/run/libvirt/virtlogd-sock -s gen_context(system_u:object_r:virtlogd_var_run_t,s0)
84+
/var/run/libvirt/virtinterfaced-admin-sock -s gen_context(system_u:object_r:virtinterfaced_var_run_t,s0)
85+
/var/run/libvirt/virtinterfaced-sock -s gen_context(system_u:object_r:virtinterfaced_var_run_t,s0)
86+
/var/run/libvirt/virtinterfaced-sock-ro -s gen_context(system_u:object_r:virtinterfaced_var_run_t,s0)
87+
/var/run/libvirt/virtlxcd-admin-sock -s gen_context(system_u:object_r:virt_lxc_var_run_t,s0)
88+
/var/run/libvirt/virtlxcd-sock -s gen_context(system_u:object_r:virt_lxc_var_run_t,s0)
89+
/var/run/libvirt/virtlxcd-sock-ro -s gen_context(system_u:object_r:virt_lxc_var_run_t,s0)
90+
/var/run/libvirt/virtnetworkd-admin-sock -s gen_context(system_u:object_r:virtnetworkd_var_run_t,s0)
91+
/var/run/libvirt/virtnetworkd-sock -s gen_context(system_u:object_r:virtnetworkd_var_run_t,s0)
92+
/var/run/libvirt/virtnetworkd-sock-ro -s gen_context(system_u:object_r:virtnetworkd_var_run_t,s0)
93+
/var/run/libvirt/virtnodedevd-admin-sock -s gen_context(system_u:object_r:virtnodedevd_var_run_t,s0)
94+
/var/run/libvirt/virtnodedevd-sock -s gen_context(system_u:object_r:virtnodedevd_var_run_t,s0)
95+
/var/run/libvirt/virtnodedevd-sock-ro -s gen_context(system_u:object_r:virtnodedevd_var_run_t,s0)
96+
/var/run/libvirt/virtnwfilterd-admin-sock -s gen_context(system_u:object_r:virtnwfilterd_var_run_t,s0)
97+
/var/run/libvirt/virtnwfilterd-sock -s gen_context(system_u:object_r:virtnwfilterd_var_run_t,s0)
98+
/var/run/libvirt/virtnwfilterd-sock-ro -s gen_context(system_u:object_r:virtnwfilterd_var_run_t,s0)
99+
/var/run/libvirt/virtproxyd-admin-sock -s gen_context(system_u:object_r:virtproxyd_var_run_t,s0)
100+
/var/run/libvirt/virtproxyd-sock -s gen_context(system_u:object_r:virtproxyd_var_run_t,s0)
101+
/var/run/libvirt/virtproxyd-sock-ro -s gen_context(system_u:object_r:virtproxyd_var_run_t,s0)
102+
/var/run/libvirt/virtqemud-admin-sock -s gen_context(system_u:object_r:qemu_var_run_t,s0)
103+
/var/run/libvirt/virtqemud-sock -s gen_context(system_u:object_r:qemu_var_run_t,s0)
104+
/var/run/libvirt/virtqemud-sock-ro -s gen_context(system_u:object_r:qemu_var_run_t,s0)
105+
/var/run/libvirt/virtsecretd-admin-sock -s gen_context(system_u:object_r:virtsecretd_var_run_t,s0)
106+
/var/run/libvirt/virtsecretd-sock -s gen_context(system_u:object_r:virtsecretd_var_run_t,s0)
107+
/var/run/libvirt/virtsecretd-sock-ro -s gen_context(system_u:object_r:virtsecretd_var_run_t,s0)
108+
/var/run/libvirt/virtstoraged-admin-sock -s gen_context(system_u:object_r:virtstoraged_var_run_t,s0)
109+
/var/run/libvirt/virtstoraged-sock -s gen_context(system_u:object_r:virtstoraged_var_run_t,s0)
110+
/var/run/libvirt/virtstoraged-sock-ro -s gen_context(system_u:object_r:virtstoraged_var_run_t,s0)
111+
/var/run/libvirt/virtvboxd-admin-sock -s gen_context(system_u:object_r:virtvboxd_var_run_t,s0)
112+
/var/run/libvirt/virtvboxd-sock -s gen_context(system_u:object_r:virtvboxd_var_run_t,s0)
113+
/var/run/libvirt/virtvboxd-sock-ro -s gen_context(system_u:object_r:virtvboxd_var_run_t,s0)
71114
/var/run/libvirt-sandbox(/.*)? gen_context(system_u:object_r:virt_lxc_var_run_t,s0)
72115
/var/run/vdsm(/.*)? gen_context(system_u:object_r:virt_var_run_t,s0)
73-
/var/run/qemu-pr-helper\.sock -s gen_context(system_u:object_r:virt_var_run_t,s0)
116+
/var/run/qemu-pr-helper\.sock -s gen_context(system_u:object_r:virt_var_run_t,s0)
74117

75118
/var/vdsm(/.*)? gen_context(system_u:object_r:virt_var_run_t,s0)
76119

virt.if

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,70 @@ template(`virt_domain_template',`
9999
allow $1_t virtlogd_t:fifo_file rw_inherited_fifo_file_perms;
100100
')
101101

102+
######################################
103+
## <summary>
104+
## Creates types and rules for a basic
105+
## virt driver domain.
106+
## </summary>
107+
## <param name="prefix">
108+
## <summary>
109+
## Prefix for the domain.
110+
## </summary>
111+
## </param>
112+
#
113+
template(`virt_driver_template',`
114+
gen_require(`
115+
attribute virt_driver_domain;
116+
')
117+
118+
type $1_t, virt_driver_domain;
119+
type $1_exec_t;
120+
init_daemon_domain($1_t, $1_exec_t)
121+
122+
type $1_var_run_t;
123+
files_pid_file($1_var_run_t)
124+
125+
##################################
126+
#
127+
# Local policy
128+
#
129+
130+
allow $1_t self:netlink_audit_socket create;
131+
allow $1_t self:netlink_kobject_uevent_socket create_socket_perms;
132+
allow $1_t self:netlink_route_socket create_netlink_socket_perms;
133+
allow $1_t self:rawip_socket create_socket_perms;
134+
allow $1_t self:unix_dgram_socket create_socket_perms;
135+
136+
allow $1_t virt_var_run_t:dir { create search_dir_perms };
137+
manage_dirs_pattern($1_t, $1_var_run_t, $1_var_run_t)
138+
manage_files_pattern($1_t, $1_var_run_t, $1_var_run_t)
139+
files_pid_filetrans($1_t, $1_var_run_t, { dir file } )
140+
filetrans_pattern($1_t, virt_var_run_t, $1_var_run_t, { dir file } )
141+
142+
read_files_pattern($1_t, virt_etc_t, virt_etc_t)
143+
manage_dirs_pattern($1_t, virt_etc_rw_t, virt_etc_rw_t)
144+
manage_files_pattern($1_t, virt_etc_rw_t, virt_etc_rw_t)
145+
146+
kernel_dgram_send($1_t)
147+
148+
auth_read_passwd($1_t)
149+
150+
dbus_read_pid_files($1_t)
151+
dbus_stream_connect_system_dbusd($1_t)
152+
153+
dev_read_sysfs($1_t)
154+
155+
init_read_utmp($1_t)
156+
157+
logging_send_syslog_msg($1_t)
158+
159+
miscfiles_read_generic_certs($1_t)
160+
161+
optional_policy(`
162+
systemd_write_inhibit_pipes($1_t)
163+
')
164+
')
165+
102166
########################################
103167
## <summary>
104168
## Make the specified type usable as a virt image
@@ -175,6 +239,25 @@ interface(`virt_exec',`
175239
can_exec($1, virtd_exec_t)
176240
')
177241

242+
########################################
243+
## <summary>
244+
## Transition to virt_qmf.
245+
## </summary>
246+
## <param name="domain">
247+
## <summary>
248+
## Domain allowed to transition.
249+
## </summary>
250+
## </param>
251+
#
252+
interface(`virt_domtrans_qmf',`
253+
gen_require(`
254+
type virt_qmf_t, virt_qmf_exec_t;
255+
')
256+
257+
corecmd_search_bin($1)
258+
domtrans_pattern($1, virt_qmf_exec_t, virt_qmf_t)
259+
')
260+
178261
########################################
179262
## <summary>
180263
## Transition to virt_bridgehelper.

0 commit comments

Comments
 (0)