Skip to content

Commit 24e5784

Browse files
committed
Rearange policy to allow other container types to be isolated
We want to run multiple podman instances on the same machine but with different isolated types, and allow them to use the same MCS Labels. Signed-off-by: Daniel J Walsh <[email protected]>
1 parent 735aaf4 commit 24e5784

File tree

3 files changed

+158
-45
lines changed

3 files changed

+158
-45
lines changed

container.if

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,11 @@ template(`container_runtime_domain_template',`
870870
## Prefix for the domain.
871871
## </summary>
872872
## </param>
873+
## <param name="prefix">
874+
## <summary>
875+
## Prefix for the file type.
876+
## </summary>
877+
## </param>
873878
#
874879
template(`container_domain_template',`
875880
gen_require(`
@@ -887,6 +892,23 @@ template(`container_domain_template',`
887892
role system_r types $1_t;
888893

889894
kernel_read_all_proc($1_t)
895+
896+
allow $1_t $2_file_t:dir_file_class_set { relabelfrom relabelto map };
897+
898+
manage_files_pattern($1_t, $2_file_t, $2_file_t)
899+
exec_files_pattern($1_t, $2_file_t, $2_file_t)
900+
manage_lnk_files_pattern($1_t, $2_file_t, $2_file_t)
901+
manage_dirs_pattern($1_t, $2_file_t, $2_file_t)
902+
manage_chr_files_pattern($1_t, $2_file_t, $2_file_t)
903+
allow $1_t $2_file_t:chr_file mmap_file_perms;
904+
manage_blk_files_pattern($1_t, $2_file_t, $2_file_t)
905+
manage_fifo_files_pattern($1_t, $2_file_t, $2_file_t)
906+
manage_sock_files_pattern($1_t, $2_file_t, $2_file_t)
907+
allow $1_t $2_file_t:{file dir} mounton;
908+
allow $1_t $2_file_t:filesystem { mount remount unmount };
909+
allow $1_t $2_file_t:dir_file_class_set { relabelfrom relabelto map };
910+
911+
fs_tmpfs_filetrans($1_t, $2_file_t, { dir file lnk_file })
890912
')
891913

892914
########################################
@@ -970,3 +992,23 @@ interface(`container_kubelet_stream_connect',`
970992
files_search_pids($1)
971993
stream_connect_pattern($1, container_var_run_t, container_var_run_t, kubelet_t)
972994
')
995+
996+
#######################################
997+
## <summary>
998+
## Create a file type used for container files.
999+
## </summary>
1000+
## <param name="script_file">
1001+
## <summary>
1002+
## Type to be used for an container file.
1003+
## </summary>
1004+
## </param>
1005+
#
1006+
interface(`container_file',`
1007+
gen_require(`
1008+
attribute container_file_type;
1009+
')
1010+
1011+
typeattribute $1 container_file_type;
1012+
files_type($1)
1013+
files_mountpoint($1)
1014+
')

container.te

Lines changed: 30 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
policy_module(container, 2.194.0)
1+
policy_module(container, 2.195.0)
22

33
gen_require(`
44
class passwd rootok;
@@ -48,6 +48,8 @@ can_exec(container_runtime_t,container_runtime_exec_t)
4848
attribute container_domain;
4949
attribute container_user_domain;
5050
attribute container_net_domain;
51+
attribute container_init_domain;
52+
attribute container_file_type;
5153
allow container_runtime_domain container_domain:process { dyntransition transition };
5254
allow container_domain container_runtime_domain:process sigchld;
5355
allow container_runtime_domain container_domain:process2 { nnp_transition nosuid_transition };
@@ -175,13 +177,13 @@ corenet_rw_tun_tap_dev(container_runtime_domain)
175177

176178
container_auth_stream_connect(container_runtime_domain)
177179

178-
manage_files_pattern(container_runtime_domain, container_file_t, container_file_t)
179-
manage_lnk_files_pattern(container_runtime_domain, container_file_t, container_file_t)
180-
manage_blk_files_pattern(container_runtime_domain, container_file_t, container_file_t)
180+
manage_files_pattern(container_runtime_domain, container_file_type, container_file_type)
181+
manage_lnk_files_pattern(container_runtime_domain, container_file_type, container_file_type)
182+
manage_blk_files_pattern(container_runtime_domain, container_file_type, container_file_type)
181183
allow container_runtime_domain container_domain:key manage_key_perms;
182-
manage_sock_files_pattern(container_runtime_domain, container_file_t, container_file_t)
183-
allow container_runtime_domain container_file_t:dir_file_class_set {relabelfrom relabelto execmod};
184-
allow container_runtime_domain container_file_t:dir_file_class_set mmap_file_perms;
184+
manage_sock_files_pattern(container_runtime_domain, container_file_type, container_file_type)
185+
allow container_runtime_domain container_file_type:dir_file_class_set {relabelfrom relabelto execmod};
186+
allow container_runtime_domain container_file_type:dir_file_class_set mmap_file_perms;
185187

186188
manage_files_pattern(container_runtime_domain, container_home_t, container_home_t)
187189
manage_dirs_pattern(container_runtime_domain, container_home_t, container_home_t)
@@ -377,7 +379,7 @@ optional_policy(`
377379
container_read_state(iptables_t)
378380
container_append_file(iptables_t)
379381
allow iptables_t container_runtime_domain:fifo_file rw_fifo_file_perms;
380-
allow iptables_t container_file_t:dir list_dir_perms;
382+
allow iptables_t container_file_type:dir list_dir_perms;
381383
')
382384

383385
optional_policy(`
@@ -564,7 +566,6 @@ optional_policy(`
564566
container_spc_stream_connect(container_domain)
565567
fs_dontaudit_remount_tmpfs(container_domain)
566568
dev_dontaudit_mounton_sysfs(container_domain)
567-
allow container_domain container_file_t:dir_file_class_set { relabelfrom relabelto map };
568569
')
569570

570571
optional_policy(`
@@ -776,7 +777,9 @@ sysnet_dns_name_resolve(container_auth_t)
776777
# typealias container_t alias svirt_lxc_net_t;
777778
gen_require(`
778779
type container_t;
780+
type container_file_t;
779781
')
782+
typeattribute container_file_t container_file_type;
780783
typeattribute container_t container_domain, container_net_domain, container_user_domain;
781784
allow container_user_domain self:process getattr;
782785
allow container_domain { container_var_lib_t container_ro_file_t container_file_t }:file entrypoint;
@@ -819,19 +822,7 @@ allow container_domain self:unix_stream_socket { sendto create_stream_socket_per
819822
fs_rw_onload_sockets(container_domain)
820823
fs_fusefs_entrypoint(container_domain)
821824

822-
manage_files_pattern(container_domain, container_file_t, container_file_t)
823-
exec_files_pattern(container_domain, container_file_t, container_file_t)
824-
manage_lnk_files_pattern(container_domain, container_file_t, container_file_t)
825-
manage_dirs_pattern(container_domain, container_file_t, container_file_t)
826-
manage_chr_files_pattern(container_domain, container_file_t, container_file_t)
827-
allow container_domain container_file_t:chr_file mmap_file_perms;
828-
manage_blk_files_pattern(container_domain, container_file_t, container_file_t)
829-
manage_fifo_files_pattern(container_domain, container_file_t, container_file_t)
830-
manage_sock_files_pattern(container_domain, container_file_t, container_file_t)
831-
allow container_domain container_file_t:{file dir} mounton;
832-
allow container_domain container_file_t:filesystem { mount remount unmount };
833-
fs_tmpfs_filetrans(container_domain, container_file_t, { dir file lnk_file })
834-
allow container_domain container_file_t:dir_file_class_set { relabelfrom relabelto map };
825+
835826
container_read_share_files(container_domain)
836827
container_exec_share_files(container_domain)
837828
container_use_ptys(container_domain)
@@ -1090,7 +1081,7 @@ optional_policy(`
10901081
#
10911082
# container_userns_t policy
10921083
#
1093-
container_domain_template(container_userns)
1084+
container_domain_template(container_userns, container)
10941085

10951086
typeattribute container_userns_t sandbox_net_domain, container_user_domain;
10961087
dev_mount_sysfs_fs(container_userns_t)
@@ -1136,7 +1127,7 @@ tunable_policy(`virt_sandbox_use_sys_admin',`
11361127
')
11371128

11381129
# Container Logreader
1139-
container_domain_template(container_logreader)
1130+
container_domain_template(container_logreader, container)
11401131
typeattribute container_logreader_t container_net_domain;
11411132
logging_read_all_logs(container_logreader_t)
11421133
# Remove once https://github.com/fedora-selinux/selinux-policy/pull/898 merges
@@ -1145,7 +1136,7 @@ logging_read_audit_log(container_logreader_t)
11451136
logging_list_logs(container_logreader_t)
11461137

11471138
# Container Logwriter
1148-
container_domain_template(container_logwriter)
1139+
container_domain_template(container_logwriter, container)
11491140
typeattribute container_logwriter_t container_net_domain;
11501141
logging_read_all_logs(container_logwriter_t)
11511142
manage_files_pattern(container_logwriter_t, logfile, logfile)
@@ -1207,7 +1198,7 @@ allow container_domain init_t:unix_stream_socket { accept ioctl read getattr loc
12071198
allow container_t proc_t:filesystem remount;
12081199

12091200
# Container kvm - Policy for running kata containers
1210-
container_domain_template(container_kvm)
1201+
container_domain_template(container_kvm, container)
12111202
typeattribute container_kvm_t container_net_domain, container_user_domain;
12121203

12131204
type container_kvm_var_run_t;
@@ -1260,21 +1251,21 @@ dev_rw_kvm(container_kvm_t)
12601251
sssd_read_public_files(container_kvm_t)
12611252

12621253
# Container init - Policy for running systemd based containers
1263-
container_domain_template(container_init)
1264-
typeattribute container_init_t container_net_domain, container_user_domain;
1254+
container_domain_template(container_init, container)
1255+
typeattribute container_init_t container_init_domain, container_net_domain, container_user_domain;
12651256

12661257
corenet_unconfined(container_init_t)
12671258

1268-
dev_mounton_sysfs(container_init_t)
1259+
dev_mounton_sysfs(container_init_domain)
12691260

1270-
fs_mounton_cgroup(container_init_t)
1271-
fs_unmount_cgroup(container_init_t)
1272-
fs_manage_cgroup_dirs(container_init_t)
1273-
fs_manage_cgroup_files(container_init_t)
1261+
fs_mounton_cgroup(container_init_domain)
1262+
fs_unmount_cgroup(container_init_domain)
1263+
fs_manage_cgroup_dirs(container_init_domain)
1264+
fs_manage_cgroup_files(container_init_domain)
12741265

12751266
logging_send_syslog_msg(container_init_t)
12761267

1277-
allow container_init_t proc_t:filesystem remount;
1268+
allow container_init_domain proc_t:filesystem remount;
12781269

12791270
optional_policy(`
12801271
virt_default_capabilities(container_init_t)
@@ -1290,11 +1281,11 @@ tunable_policy(`virt_sandbox_use_sys_admin',`
12901281
allow container_init_t self:cap_userns sys_admin;
12911282
')
12921283

1293-
allow container_init_t self:netlink_audit_socket nlmsg_relay;
1284+
allow container_init_domain self:netlink_audit_socket nlmsg_relay;
12941285

12951286
# container_engine_t is for running a container engine within a container
12961287
#
1297-
container_domain_template(container_engine)
1288+
container_domain_template(container_engine, container)
12981289
typeattribute container_engine_t container_net_domain;
12991290

13001291
fs_mounton_cgroup(container_engine_t)
@@ -1359,19 +1350,19 @@ optional_policy(`
13591350
')
13601351

13611352
# Standard container which needs to be allowed to use any device
1362-
container_domain_template(container_device)
1353+
container_domain_template(container_device, container)
13631354
allow container_device_t device_node:chr_file rw_chr_file_perms;
13641355

13651356
# Standard container which needs to be allowed to use any device and
13661357
# communicate with kubelet
1367-
container_domain_template(container_device_plugin)
1358+
container_domain_template(container_device_plugin, container)
13681359
allow container_device_plugin_t device_node:chr_file rw_chr_file_perms;
13691360
dev_rw_sysfs(container_device_plugin_t)
13701361
container_kubelet_stream_connect(container_device_plugin_t)
13711362

13721363
# Standard container which needs to be allowed to use any device and
13731364
# modify kubelet configuration
1374-
container_domain_template(container_device_plugin_init)
1365+
container_domain_template(container_device_plugin_init, container)
13751366
allow container_device_plugin_init_t device_node:chr_file rw_chr_file_perms;
13761367
dev_rw_sysfs(container_device_plugin_init_t)
13771368
manage_dirs_pattern(container_device_plugin_init_t, kubernetes_file_t, kubernetes_file_t)

0 commit comments

Comments
 (0)