]> git.ipfire.org Git - people/stevee/selinux-policy.git/blame - policy/modules/admin/portage.te
Bump module versions for release.
[people/stevee/selinux-policy.git] / policy / modules / admin / portage.te
CommitLineData
e1c41428 1
29af4c13 2policy_module(portage, 1.10.0)
e1c41428
CP
3
4########################################
5#
6# Declarations
7#
8
5afdf0bc
CP
9type gcc_config_t;
10type gcc_config_exec_t;
0bfccda4 11application_domain(gcc_config_t, gcc_config_exec_t)
5afdf0bc 12
82f1dfb5 13# constraining type
02f9b21e 14type portage_t;
e1c41428 15type portage_exec_t;
0bfccda4 16application_domain(portage_t, portage_exec_t)
aea3f28e 17domain_obj_id_change_exemption(portage_t)
02f9b21e
CP
18rsync_entry_type(portage_t)
19corecmd_shell_entry_type(portage_t)
02f9b21e 20
02f9b21e 21# portage compile sandbox domain
aea3f28e
CP
22type portage_sandbox_t;
23application_domain(portage_sandbox_t, portage_exec_t)
e1c41428
CP
24# the shell is the entrypoint if regular sandbox is disabled
25# portage_exec_t is the entrypoint if regular sandbox is enabled
aea3f28e 26corecmd_shell_entry_type(portage_sandbox_t)
02f9b21e
CP
27
28# portage package fetching domain
aea3f28e
CP
29type portage_fetch_t;
30application_type(portage_fetch_t)
31corecmd_shell_entry_type(portage_fetch_t)
32rsync_entry_type(portage_fetch_t)
02f9b21e
CP
33
34type portage_devpts_t;
35term_pty(portage_devpts_t)
e1c41428
CP
36
37type portage_ebuild_t;
38files_type(portage_ebuild_t)
39
e1c41428
CP
40type portage_fetch_tmp_t;
41files_tmp_file(portage_fetch_tmp_t)
42
43type portage_db_t;
44files_type(portage_db_t)
45
46type portage_conf_t;
47files_type(portage_conf_t)
48
49type portage_cache_t;
50files_type(portage_cache_t)
51
52type portage_log_t;
53logging_log_file(portage_log_t)
54
02f9b21e
CP
55type portage_tmp_t;
56files_tmp_file(portage_tmp_t)
57
58type portage_tmpfs_t;
59files_tmpfs_file(portage_tmpfs_t)
60
5afdf0bc
CP
61########################################
62#
63# gcc-config policy
64#
65
66allow gcc_config_t self:capability { chown fsetid };
67allow gcc_config_t self:fifo_file rw_file_perms;
68
0bfccda4 69manage_files_pattern(gcc_config_t, portage_cache_t, portage_cache_t)
5afdf0bc 70
0bfccda4 71read_files_pattern(gcc_config_t, portage_conf_t, portage_conf_t)
5afdf0bc
CP
72
73allow gcc_config_t portage_ebuild_t:dir list_dir_perms;
0bfccda4 74read_files_pattern(gcc_config_t, portage_ebuild_t, portage_ebuild_t)
5afdf0bc 75
0b36a214 76allow gcc_config_t portage_exec_t:file mmap_file_perms;
5afdf0bc
CP
77
78kernel_read_system_state(gcc_config_t)
79kernel_read_kernel_sysctls(gcc_config_t)
80
81corecmd_exec_shell(gcc_config_t)
5afdf0bc 82corecmd_exec_bin(gcc_config_t)
5afdf0bc 83corecmd_manage_bin_files(gcc_config_t)
5afdf0bc 84
15d80e36
CP
85domain_use_interactive_fds(gcc_config_t)
86
5afdf0bc
CP
87files_manage_etc_files(gcc_config_t)
88files_rw_etc_runtime_files(gcc_config_t)
15d80e36 89files_read_usr_files(gcc_config_t)
5afdf0bc
CP
90files_search_var_lib(gcc_config_t)
91files_search_pids(gcc_config_t)
92# complains loudly about not being able to list
93# the directory it is being run from
94files_list_all(gcc_config_t)
95
5afdf0bc
CP
96# seems to be ok without this
97init_dontaudit_read_script_status_files(gcc_config_t)
98
5afdf0bc
CP
99libs_read_lib_files(gcc_config_t)
100libs_domtrans_ldconfig(gcc_config_t)
101libs_manage_shared_libs(gcc_config_t)
5afdf0bc
CP
102# gcc-config creates a temp dir for the libs
103libs_manage_lib_dirs(gcc_config_t)
104
105logging_send_syslog_msg(gcc_config_t)
106
107miscfiles_read_localization(gcc_config_t)
108
296273a7
CP
109userdom_use_user_terminals(gcc_config_t)
110
5afdf0bc
CP
111consoletype_exec(gcc_config_t)
112
113optional_policy(`
114 seutil_use_newrole_fds(gcc_config_t)
115')
116
e1c41428
CP
117########################################
118#
aea3f28e 119# Portage Merging Rules
e1c41428
CP
120#
121
aea3f28e
CP
122# - setfscreate for merging to live fs
123# - setexec to run portage fetch
124allow portage_t self:process { setfscreate setexec };
15d80e36
CP
125# - kill for mysql merging, at least
126allow portage_t self:capability { sys_nice kill };
127
128# user post-sync scripts
129can_exec(portage_t, portage_conf_t)
6d14093b 130
aea3f28e
CP
131allow portage_t portage_log_t:file manage_file_perms;
132logging_log_filetrans(portage_t, portage_log_t, file)
e1c41428 133
aea3f28e
CP
134allow portage_t { portage_fetch_t portage_sandbox_t }:process signal;
135
136# transition for rsync and wget
137corecmd_shell_spec_domtrans(portage_t, portage_fetch_t)
138rsync_entry_domtrans(portage_t, portage_fetch_t)
139allow portage_fetch_t portage_t:fd use;
140allow portage_fetch_t portage_t:fifo_file rw_file_perms;
141allow portage_fetch_t portage_t:process sigchld;
142
143# transition to sandbox for compiling
144domain_trans(portage_t, portage_exec_t, portage_sandbox_t)
145corecmd_shell_spec_domtrans(portage_t, portage_sandbox_t)
146allow portage_sandbox_t portage_t:fd use;
147allow portage_sandbox_t portage_t:fifo_file rw_file_perms;
148allow portage_sandbox_t portage_t:process sigchld;
149
150# run scripts out of the build directory
151can_exec(portage_t, portage_tmp_t)
e1c41428 152
aea3f28e
CP
153# merging baselayout will need this:
154kernel_write_proc_files(portage_t)
e1c41428 155
aea3f28e
CP
156domain_dontaudit_read_all_domains_state(portage_t)
157
158# modify any files in the system
159files_manage_all_files(portage_t)
160
161selinux_get_fs_mount(portage_t)
162
163auth_manage_shadow(portage_t)
164
165# merging baselayout will need this:
166init_exec(portage_t)
167
168# run setfiles -r
169seutil_domtrans_setfiles(portage_t)
170# run semodule
171seutil_domtrans_semanage(portage_t)
172
173portage_domtrans_gcc_config(portage_t)
02f9b21e 174# if sesandbox is disabled, compiling is performed in this domain
aea3f28e 175portage_compile_domain(portage_t)
e1c41428 176
aea3f28e
CP
177optional_policy(`
178 bootloader_domtrans(portage_t)
179')
82f1dfb5 180
aea3f28e
CP
181optional_policy(`
182 modutils_domtrans_depmod(portage_t)
183 modutils_domtrans_update_mods(portage_t)
184 #dontaudit update_modules_t portage_tmp_t:dir search_dir_perms;
185')
e1c41428 186
aea3f28e
CP
187optional_policy(`
188 usermanage_domtrans_groupadd(portage_t)
189 usermanage_domtrans_useradd(portage_t)
190')
191
192ifdef(`TODO',`
193# seems to work ok without these
194dontaudit portage_t device_t:{ blk_file chr_file } getattr;
195dontaudit portage_t proc_t:dir setattr;
196dontaudit portage_t device_type:chr_file read_chr_file_perms;
197dontaudit portage_t device_type:blk_file read_blk_file_perms;
198')
e1c41428
CP
199
200##########################################
201#
202# Portage fetch domain
203# - for rsync and distfile fetching
204#
205
aea3f28e
CP
206allow portage_fetch_t self:capability { dac_override fowner fsetid };
207allow portage_fetch_t self:process signal;
208allow portage_fetch_t self:unix_stream_socket create_socket_perms;
209allow portage_fetch_t self:tcp_socket create_stream_socket_perms;
210
211allow portage_fetch_t portage_conf_t:dir list_dir_perms;
212read_files_pattern(portage_fetch_t, portage_conf_t, portage_conf_t)
213
214manage_dirs_pattern(portage_fetch_t, portage_ebuild_t, portage_ebuild_t)
215manage_files_pattern(portage_fetch_t, portage_ebuild_t, portage_ebuild_t)
216
217manage_dirs_pattern(portage_fetch_t, portage_fetch_tmp_t, portage_fetch_tmp_t)
218manage_files_pattern(portage_fetch_t, portage_fetch_tmp_t, portage_fetch_tmp_t)
219files_tmp_filetrans(portage_fetch_t, portage_fetch_tmp_t, { file dir })
220
221# portage makes home dir the portage tmp dir, so
222# wget looks for .wgetrc there
223dontaudit portage_fetch_t portage_tmp_t:dir search_dir_perms;
15d80e36
CP
224# rsync server timestamp check
225allow portage_fetch_t portage_tmp_t:file { read_file_perms delete_file_perms };
aea3f28e
CP
226
227kernel_read_system_state(portage_fetch_t)
228kernel_read_kernel_sysctls(portage_fetch_t)
229
230corecmd_exec_bin(portage_fetch_t)
e1c41428 231
aea3f28e
CP
232corenet_all_recvfrom_unlabeled(portage_fetch_t)
233corenet_all_recvfrom_netlabel(portage_fetch_t)
234corenet_tcp_sendrecv_generic_if(portage_fetch_t)
c1262146 235corenet_tcp_sendrecv_generic_node(portage_fetch_t)
aea3f28e
CP
236corenet_tcp_sendrecv_all_ports(portage_fetch_t)
237# would rather not connect to unspecified ports, but
238# it occasionally comes up
239corenet_tcp_connect_all_reserved_ports(portage_fetch_t)
240corenet_tcp_connect_generic_port(portage_fetch_t)
241
242dev_dontaudit_read_rand(portage_fetch_t)
243
244domain_use_interactive_fds(portage_fetch_t)
245
246files_read_etc_files(portage_fetch_t)
247files_read_etc_runtime_files(portage_fetch_t)
248files_search_var(portage_fetch_t)
249files_dontaudit_search_pids(portage_fetch_t)
250
251term_search_ptys(portage_fetch_t)
252
aea3f28e
CP
253miscfiles_read_localization(portage_fetch_t)
254
255sysnet_read_config(portage_fetch_t)
256sysnet_dns_name_resolve(portage_fetch_t)
257
296273a7
CP
258userdom_use_user_terminals(portage_fetch_t)
259userdom_dontaudit_read_user_home_content_files(portage_fetch_t)
aea3f28e
CP
260
261ifdef(`hide_broken_symptoms',`
262 dontaudit portage_fetch_t portage_cache_t:file read;
263')
e1c41428
CP
264
265##########################################
266#
267# Portage sandbox domain
268# - SELinux-enforced sandbox
269#
270
aea3f28e 271portage_compile_domain(portage_sandbox_t)
e1c41428 272
02f9b21e
CP
273ifdef(`hide_broken_symptoms',`
274 # leaked descriptors
aea3f28e
CP
275 dontaudit portage_sandbox_t portage_cache_t:dir { setattr };
276 dontaudit portage_sandbox_t portage_cache_t:file { setattr write };
02f9b21e 277')