]> git.ipfire.org Git - people/stevee/selinux-policy.git/blame - refpolicy/policy/modules/admin/portage.te
add portage from gentoo
[people/stevee/selinux-policy.git] / refpolicy / policy / modules / admin / portage.te
CommitLineData
e1c41428
CP
1
2policy_module(portage,1.0.0)
3
4########################################
5#
6# Declarations
7#
8
9type portage_exec_t;
10files_type(portage_exec_t)
11
12portage_compile_domain(portage)
13domain_obj_id_change_exempt(portage_t)
14
15portage_compile_domain(portage_sandbox)
16# the shell is the entrypoint if regular sandbox is disabled
17# portage_exec_t is the entrypoint if regular sandbox is enabled
18corecmd_shell_entry_type(portage_sandbox_t)
19domain_entry_file(portage_sandbox_t,portage_exec_t)
20
21type portage_ebuild_t;
22files_type(portage_ebuild_t)
23
24type portage_fetch_t;
25domain_type(portage_fetch_t)
26
27type portage_fetch_tmp_t;
28files_tmp_file(portage_fetch_tmp_t)
29
30type portage_db_t;
31files_type(portage_db_t)
32
33type portage_conf_t;
34files_type(portage_conf_t)
35
36type portage_cache_t;
37files_type(portage_cache_t)
38
39type portage_log_t;
40logging_log_file(portage_log_t)
41
42########################################
43#
44# Portage Rules
45#
46
47# - setfscreate for merging to live fs
48# - setexec to run portage fetch
49allow portage_t self:process { setfscreate setexec };
50
51# transition for rsync and wget
52corecmd_shell_spec_domtrans(portage_t,portage_fetch_t)
53allow portage_fetch_t portage_t:fd use;
54allow portage_fetch_t portage_t:fifo_file rw_file_perms;
55allow portage_fetch_t portage_t:process sigchld;
56
57allow portage_t portage_log_t:file create_file_perms;
58logging_create_log(portage_t,portage_log_t)
59
60# transition to sandbox for compiling
61domain_trans(portage_t,portage_exec_t,portage_sandbox_t)
62corecmd_shell_spec_domtrans(portage_t,portage_sandbox_t)
63allow portage_sandbox_t portage_t:fd use;
64allow portage_sandbox_t portage_t:fifo_file rw_file_perms;
65allow portage_sandbox_t portage_t:process sigchld;
66
67# run scripts out of the build directory
68can_exec($1_t,portage_tmp_t)
69
70# merging baselayout will need this:
71kernel_write_proc_file(portage_t)
72
73domain_dontaudit_read_all_domains_state(portage_t)
74
75# modify any files in the system
76files_manage_all_files(portage_t)
77
78selinux_get_fs_mount(portage_t)
79
80# merging baselayout will need this:
81init_exec(portage_t)
82
83# run setfiles -r
84seutil_domtrans_setfiles(portage_t)
85
86optional_policy(`bootloader',`
87 bootloader_domtrans(portage_t)
88')
89
90optional_policy(`modutils',`
91 modutils_domtrans_depmod(portage_t)
92 modutils_domtrans_update_modules(portage_t)
93 #dontaudit update_modules_t portage_tmp_t:dir search_dir_perms;
94')
95
96optional_policy(`usermanage',`
97 usermanage_domtrans_groupadd(portage_t)
98 usermanage_domtrans_useradd(portage_t)
99')
100
101# seems to work ok without these
102dontaudit portage_t device_t:{ blk_file chr_file } getattr;
103dontaudit portage_t proc_t:dir setattr;
104dontaudit portage_t device_type:{ chr_file blk_file } r_file_perms;
105
106##########################################
107#
108# Portage fetch domain
109# - for rsync and distfile fetching
110#
111
112allow portage_fetch_t self:capability dac_override;
113dontaudit portage_fetch_t self:capability { fowner fsetid };
114allow portage_fetch_t self:unix_stream_socket create_socket_perms;
115allow portage_fetch_t self:tcp_socket create_stream_socket_perms;
116
117allow portage_fetch_t portage_conf_t:dir list_dir_perms;
118allow portage_fetch_t portage_conf_t:file r_file_perms;
119
120allow portage_fetch_t portage_ebuild_t:dir manage_dir_perms;
121allow portage_fetch_t portage_ebuild_t:file manage_file_perms;
122
123allow portage_fetch_t portage_fetch_tmp_t:dir create_dir_perms;
124allow portage_fetch_t portage_fetch_tmp_t:file create_file_perms;
125files_create_tmp_files(portage_fetch_t, portage_fetch_tmp_t, { file dir })
126
127# portage makes home dir the portage tmp dir, so
128# wget looks for .wgetrc there
129dontaudit portage_fetch_t portage_tmp_t:dir search_dir_perms;
130
131kernel_read_system_state(portage_fetch_t)
132kernel_read_kernel_sysctl(portage_fetch_t)
133
134corecmd_exec_bin(portage_fetch_t)
135corecmd_exec_sbin(portage_fetch_t)
136
137corenet_non_ipsec_sendrecv(portage_fetch_t)
138corenet_tcp_sendrecv_generic_if(portage_fetch_t)
139corenet_tcp_sendrecv_all_nodes(portage_fetch_t)
140corenet_tcp_sendrecv_all_ports(portage_fetch_t)
141# would rather not connect to unspecified ports, but
142# it occasionally comes up
143corenet_tcp_connect_all_reserved_ports(portage_fetch_t)
144corenet_tcp_connect_generic_port(portage_fetch_t)
145
146dev_search_ptys(portage_fetch_t)
147dev_dontaudit_read_rand(portage_fetch_t)
148
149domain_use_wide_inherit_fds(portage_fetch_t)
150
151files_read_etc_files(portage_fetch_t)
152files_read_etc_runtime_files(portage_fetch_t)
153files_search_var(portage_fetch_t)
154files_dontaudit_search_pids(portage_fetch_t)
155
156libs_use_ld_so(portage_fetch_t)
157libs_use_shared_libs(portage_fetch_t)
158
159miscfiles_read_localization(portage_fetch_t)
160
161sysnet_read_config(portage_fetch_t)
162sysnet_dns_name_resolve(portage_fetch_t)
163
164userdom_dontaudit_read_sysadm_home_files(portage_fetch_t)
165
166ifdef(`hide_broken_symptoms',`
167 dontaudit portage_fetch_t portage_cache_t:file read;
168')
169
170ifdef(`TODO',`
171domain_auto_trans(portage_t, rsyncd_exec_t, portage_fetch_t)
172')
173
174##########################################
175#
176# Portage sandbox domain
177# - SELinux-enforced sandbox
178#
179
180# seems ok w/o this
181dontaudit portage_sandbox_t portage_cache_t:dir { setattr };
182dontaudit portage_sandbox_t portage_cache_t:file { setattr write };
183
184allow portage_sandbox_t portage_tmp_t:dir manage_dir_perms;
185allow portage_sandbox_t portage_tmp_t:file manage_dir_perms;
186allow portage_sandbox_t portage_tmp_t:lnk_file create_lnk_perms;
187# run scripts out of the build directory
188can_exec(portage_sandbox_t,portage_tmp_t)