]> git.ipfire.org Git - people/stevee/selinux-policy.git/blame - policy/modules/apps/gpg.te
Bump module versions for release.
[people/stevee/selinux-policy.git] / policy / modules / apps / gpg.te
CommitLineData
b2b38c78 1
29af4c13 2policy_module(gpg, 2.3.0)
b2b38c78
CP
3
4########################################
5#
6# Declarations
7#
8
a42ce93a
CP
9## <desc>
10## <p>
11## Allow usage of the gpg-agent --write-env-file option.
12## This also allows gpg-agent to manage user files.
13## </p>
14## </desc>
15gen_tunable(gpg_agent_env_file, false)
16
296273a7 17type gpg_t;
b2b38c78 18type gpg_exec_t;
296273a7
CP
19typealias gpg_t alias { user_gpg_t staff_gpg_t sysadm_gpg_t };
20typealias gpg_t alias { auditadm_gpg_t secadm_gpg_t };
21application_domain(gpg_t, gpg_exec_t)
22ubac_constrained(gpg_t)
857d37e8 23role system_r types gpg_t;
b2b38c78 24
296273a7 25type gpg_agent_t;
b2b38c78 26type gpg_agent_exec_t;
296273a7
CP
27typealias gpg_agent_t alias { user_gpg_agent_t staff_gpg_agent_t sysadm_gpg_agent_t };
28typealias gpg_agent_t alias { auditadm_gpg_agent_t secadm_gpg_agent_t };
29application_domain(gpg_agent_t, gpg_agent_exec_t)
30ubac_constrained(gpg_agent_t)
31
32type gpg_agent_tmp_t;
33typealias gpg_agent_tmp_t alias { user_gpg_agent_tmp_t staff_gpg_agent_tmp_t sysadm_gpg_agent_tmp_t };
34typealias gpg_agent_tmp_t alias { auditadm_gpg_agent_tmp_t secadm_gpg_agent_tmp_t };
35files_tmp_file(gpg_agent_tmp_t)
36ubac_constrained(gpg_agent_tmp_t)
37
38type gpg_secret_t;
39typealias gpg_secret_t alias { user_gpg_secret_t staff_gpg_secret_t sysadm_gpg_secret_t };
40typealias gpg_secret_t alias { auditadm_gpg_secret_t secadm_gpg_secret_t };
41userdom_user_home_content(gpg_secret_t)
42
43type gpg_helper_t;
44type gpg_helper_exec_t;
45typealias gpg_helper_t alias { user_gpg_helper_t staff_gpg_helper_t sysadm_gpg_helper_t };
46typealias gpg_helper_t alias { auditadm_gpg_helper_t secadm_gpg_helper_t };
47application_domain(gpg_helper_t, gpg_helper_exec_t)
48ubac_constrained(gpg_helper_t)
857d37e8 49role system_r types gpg_helper_t;
b2b38c78 50
296273a7 51type gpg_pinentry_t;
b2b38c78 52type pinentry_exec_t;
296273a7
CP
53typealias gpg_pinentry_t alias { user_gpg_pinentry_t staff_gpg_pinentry_t sysadm_gpg_pinentry_t };
54typealias gpg_pinentry_t alias { auditadm_gpg_pinentry_t secadm_gpg_pinentry_t };
55application_domain(gpg_pinentry_t, pinentry_exec_t)
56ubac_constrained(gpg_pinentry_t)
57
857d37e8
CP
58type gpg_pinentry_tmp_t;
59files_tmp_file(gpg_pinentry_tmp_t)
60ubac_constrained(gpg_pinentry_tmp_t)
61
62type gpg_pinentry_tmpfs_t;
63files_tmpfs_file(gpg_pinentry_tmpfs_t)
64ubac_constrained(gpg_pinentry_tmpfs_t)
65
296273a7
CP
66########################################
67#
68# GPG local policy
69#
70
71allow gpg_t self:capability { ipc_lock setuid };
72# setrlimit is for ulimit -c 0
857d37e8 73allow gpg_t self:process { signal signull setrlimit getcap setcap setpgid };
296273a7
CP
74
75allow gpg_t self:fifo_file rw_fifo_file_perms;
76allow gpg_t self:tcp_socket create_stream_socket_perms;
77
e4f73afb
CP
78manage_dirs_pattern(gpg_t, gpg_agent_tmp_t, gpg_agent_tmp_t)
79manage_files_pattern(gpg_t, gpg_agent_tmp_t, gpg_agent_tmp_t)
80files_tmp_filetrans(gpg_t, gpg_agent_tmp_t, { dir file })
81
857d37e8
CP
82domtrans_pattern(gpg_t, gpg_agent_exec_t, gpg_agent_t)
83
296273a7
CP
84# transition from the gpg domain to the helper domain
85domtrans_pattern(gpg_t, gpg_helper_exec_t, gpg_helper_t)
86
87allow gpg_t gpg_secret_t:dir create_dir_perms;
88manage_files_pattern(gpg_t, gpg_secret_t, gpg_secret_t)
89manage_lnk_files_pattern(gpg_t, gpg_secret_t, gpg_secret_t)
90userdom_user_home_dir_filetrans(gpg_t, gpg_secret_t, dir)
91
e4f73afb
CP
92kernel_read_sysctl(gpg_t)
93
857d37e8
CP
94corecmd_exec_shell(gpg_t)
95corecmd_exec_bin(gpg_t)
96
296273a7
CP
97corenet_all_recvfrom_unlabeled(gpg_t)
98corenet_all_recvfrom_netlabel(gpg_t)
668b3093
CP
99corenet_tcp_sendrecv_generic_if(gpg_t)
100corenet_udp_sendrecv_generic_if(gpg_t)
c1262146
CP
101corenet_tcp_sendrecv_generic_node(gpg_t)
102corenet_udp_sendrecv_generic_node(gpg_t)
296273a7
CP
103corenet_tcp_sendrecv_all_ports(gpg_t)
104corenet_udp_sendrecv_all_ports(gpg_t)
105corenet_tcp_connect_all_ports(gpg_t)
106corenet_sendrecv_all_client_packets(gpg_t)
107
108dev_read_rand(gpg_t)
109dev_read_urand(gpg_t)
ca7fa520 110dev_read_generic_usb_dev(gpg_t)
296273a7
CP
111
112fs_getattr_xattr_fs(gpg_t)
857d37e8 113fs_list_inotifyfs(gpg_t)
296273a7
CP
114
115domain_use_interactive_fds(gpg_t)
116
117files_read_etc_files(gpg_t)
118files_read_usr_files(gpg_t)
119files_dontaudit_search_var(gpg_t)
120
e4f73afb
CP
121auth_use_nsswitch(gpg_t)
122
296273a7
CP
123logging_send_syslog_msg(gpg_t)
124
36ded4bd
CP
125miscfiles_read_localization(gpg_t)
126
296273a7 127userdom_use_user_terminals(gpg_t)
36ded4bd
CP
128# sign/encrypt user files
129userdom_manage_user_tmp_files(gpg_t)
130userdom_manage_user_home_content_files(gpg_t)
857d37e8 131userdom_user_home_dir_filetrans_user_home_content(gpg_t, file)
36ded4bd
CP
132
133mta_write_config(gpg_t)
134
135tunable_policy(`use_nfs_home_dirs',`
136 fs_manage_nfs_dirs(gpg_t)
137 fs_manage_nfs_files(gpg_t)
138')
139
140tunable_policy(`use_samba_home_dirs',`
141 fs_manage_cifs_dirs(gpg_t)
142 fs_manage_cifs_files(gpg_t)
143')
144
857d37e8
CP
145optional_policy(`
146 mozilla_read_user_home_files(gpg_t)
147 mozilla_write_user_home_files(gpg_t)
148')
149
36ded4bd
CP
150optional_policy(`
151 xserver_use_xdm_fds(gpg_t)
152 xserver_rw_xdm_pipes(gpg_t)
153')
154
155optional_policy(`
156 cron_system_entry(gpg_t, gpg_exec_t)
157 cron_read_system_job_tmp_files(gpg_t)
158')
296273a7 159
296273a7
CP
160########################################
161#
162# GPG helper local policy
163#
164
e4f73afb
CP
165allow gpg_helper_t self:process { getsched setsched };
166
296273a7 167# for helper programs (which automatically fetch keys)
857d37e8 168# Note: this is only tested with the hkp interface. If you use eg the
296273a7
CP
169# mail interface you will likely need additional permissions.
170
171allow gpg_helper_t self:unix_stream_socket create_stream_socket_perms;
172allow gpg_helper_t self:tcp_socket { connect connected_socket_perms };
173allow gpg_helper_t self:udp_socket { connect connected_socket_perms };
174
175dontaudit gpg_helper_t gpg_secret_t:file read;
176
177corenet_all_recvfrom_unlabeled(gpg_helper_t)
178corenet_all_recvfrom_netlabel(gpg_helper_t)
668b3093
CP
179corenet_tcp_sendrecv_generic_if(gpg_helper_t)
180corenet_raw_sendrecv_generic_if(gpg_helper_t)
181corenet_udp_sendrecv_generic_if(gpg_helper_t)
c1262146
CP
182corenet_tcp_sendrecv_generic_node(gpg_helper_t)
183corenet_udp_sendrecv_generic_node(gpg_helper_t)
184corenet_raw_sendrecv_generic_node(gpg_helper_t)
296273a7
CP
185corenet_tcp_sendrecv_all_ports(gpg_helper_t)
186corenet_udp_sendrecv_all_ports(gpg_helper_t)
c1262146
CP
187corenet_tcp_bind_generic_node(gpg_helper_t)
188corenet_udp_bind_generic_node(gpg_helper_t)
296273a7
CP
189corenet_tcp_connect_all_ports(gpg_helper_t)
190
296273a7 191files_read_etc_files(gpg_helper_t)
296273a7 192
e4f73afb
CP
193auth_use_nsswitch(gpg_helper_t)
194
195userdom_use_user_terminals(gpg_helper_t)
296273a7
CP
196
197tunable_policy(`use_nfs_home_dirs',`
36ded4bd 198 fs_dontaudit_rw_nfs_files(gpg_helper_t)
296273a7
CP
199')
200
201tunable_policy(`use_samba_home_dirs',`
36ded4bd 202 fs_dontaudit_rw_cifs_files(gpg_helper_t)
296273a7
CP
203')
204
205########################################
206#
207# GPG agent local policy
208#
209
210# rlimit: gpg-agent wants to prevent coredumps
211allow gpg_agent_t self:process setrlimit;
212
213allow gpg_agent_t self:unix_stream_socket create_stream_socket_perms ;
214allow gpg_agent_t self:fifo_file rw_fifo_file_perms;
215
216# read and write ~/.gnupg (gpg-agent stores secret keys in ~/.gnupg/private-keys-v1.d )
217manage_dirs_pattern(gpg_agent_t, gpg_secret_t, gpg_secret_t)
218manage_files_pattern(gpg_agent_t, gpg_secret_t, gpg_secret_t)
219manage_lnk_files_pattern(gpg_agent_t, gpg_secret_t, gpg_secret_t)
220
221# Allow the gpg-agent to manage its tmp files (socket)
222manage_dirs_pattern(gpg_agent_t, gpg_agent_tmp_t, gpg_agent_tmp_t)
223manage_files_pattern(gpg_agent_t, gpg_agent_tmp_t, gpg_agent_tmp_t)
224manage_sock_files_pattern(gpg_agent_t, gpg_agent_tmp_t, gpg_agent_tmp_t)
225files_tmp_filetrans(gpg_agent_t, gpg_agent_tmp_t, { file sock_file dir })
226
227# allow gpg to connect to the gpg agent
228stream_connect_pattern(gpg_t, gpg_agent_tmp_t, gpg_agent_tmp_t, gpg_agent_t)
229
230corecmd_search_bin(gpg_agent_t)
857d37e8 231corecmd_exec_shell(gpg_agent_t)
296273a7
CP
232
233domain_use_interactive_fds(gpg_agent_t)
234
235miscfiles_read_localization(gpg_agent_t)
236
237# Write to the user domain tty.
238userdom_use_user_terminals(gpg_agent_t)
239# read and write ~/.gnupg (gpg-agent stores secret keys in ~/.gnupg/private-keys-v1.d )
240userdom_search_user_home_dirs(gpg_agent_t)
241
242tunable_policy(`gpg_agent_env_file',`
243 # write ~/.gpg-agent-info or a similar to the users home dir
244 # or subdir (gpg-agent --write-env-file option)
245 #
246 userdom_user_home_dir_filetrans_user_home_content(gpg_agent_t, file)
247 userdom_manage_user_home_content_dirs(gpg_agent_t)
248 userdom_manage_user_home_content_files(gpg_agent_t)
249')
250
251tunable_policy(`use_nfs_home_dirs',`
252 fs_manage_nfs_dirs(gpg_agent_t)
253 fs_manage_nfs_files(gpg_agent_t)
254 fs_manage_nfs_symlinks(gpg_agent_t)
255')
256
257tunable_policy(`use_samba_home_dirs',`
258 fs_manage_cifs_dirs(gpg_agent_t)
259 fs_manage_cifs_files(gpg_agent_t)
260 fs_manage_cifs_symlinks(gpg_agent_t)
261')
262
263##############################
264#
265# Pinentry local policy
266#
267
857d37e8 268allow gpg_pinentry_t self:process { getcap getsched setsched signal };
296273a7 269allow gpg_pinentry_t self:fifo_file rw_fifo_file_perms;
857d37e8
CP
270allow gpg_pinentry_t self:netlink_route_socket create_netlink_socket_perms;
271allow gpg_pinentry_t self:shm create_shm_perms;
272allow gpg_pinentry_t self:tcp_socket create_stream_socket_perms;
273allow gpg_pinentry_t self:unix_dgram_socket sendto;
274allow gpg_pinentry_t self:unix_stream_socket { connect create getattr read shutdown write };
296273a7 275
857d37e8
CP
276can_exec(gpg_pinentry_t, pinentry_exec_t)
277
278# we need to allow gpg-agent to call pinentry so it can get the passphrase
296273a7
CP
279# from the user.
280domtrans_pattern(gpg_agent_t, pinentry_exec_t, gpg_pinentry_t)
281
857d37e8
CP
282manage_sock_files_pattern(gpg_pinentry_t, gpg_pinentry_tmp_t, gpg_pinentry_tmp_t)
283userdom_user_tmp_filetrans(gpg_pinentry_t, gpg_pinentry_tmp_t, sock_file)
284
285manage_dirs_pattern(gpg_pinentry_t, gpg_pinentry_tmpfs_t, gpg_pinentry_tmpfs_t)
286manage_files_pattern(gpg_pinentry_t, gpg_pinentry_tmpfs_t, gpg_pinentry_tmpfs_t)
287fs_tmpfs_filetrans(gpg_pinentry_t, gpg_pinentry_tmpfs_t, { file dir })
288fs_getattr_tmpfs(gpg_pinentry_t)
289
296273a7
CP
290# read /proc/meminfo
291kernel_read_system_state(gpg_pinentry_t)
292
857d37e8
CP
293corecmd_exec_bin(gpg_pinentry_t)
294
295corenet_all_recvfrom_netlabel(gpg_pinentry_t)
296corenet_all_recvfrom_unlabeled(gpg_pinentry_t)
297corenet_sendrecv_pulseaudio_client_packets(gpg_pinentry_t)
298corenet_tcp_bind_generic_node(gpg_pinentry_t)
299corenet_tcp_connect_pulseaudio_port(gpg_pinentry_t)
300corenet_tcp_sendrecv_generic_if(gpg_pinentry_t)
301corenet_tcp_sendrecv_generic_node(gpg_pinentry_t)
302corenet_tcp_sendrecv_generic_port(gpg_pinentry_t)
303
304dev_read_urand(gpg_pinentry_t)
305dev_read_rand(gpg_pinentry_t)
306
296273a7
CP
307files_read_usr_files(gpg_pinentry_t)
308# read /etc/X11/qtrc
309files_read_etc_files(gpg_pinentry_t)
310
857d37e8
CP
311logging_send_syslog_msg(gpg_pinentry_t)
312
296273a7
CP
313miscfiles_read_fonts(gpg_pinentry_t)
314miscfiles_read_localization(gpg_pinentry_t)
315
316# for .Xauthority
317userdom_read_user_home_content_files(gpg_pinentry_t)
857d37e8 318userdom_read_user_tmpfs_files(gpg_pinentry_t)
296273a7
CP
319
320tunable_policy(`use_nfs_home_dirs',`
321 fs_read_nfs_files(gpg_pinentry_t)
322')
323
324tunable_policy(`use_samba_home_dirs',`
325 fs_read_cifs_files(gpg_pinentry_t)
326')
327
328optional_policy(`
857d37e8
CP
329 dbus_session_bus_client(gpg_pinentry_t)
330 dbus_system_bus_client(gpg_pinentry_t)
331')
332
333optional_policy(`
334 pulseaudio_exec(gpg_pinentry_t)
335 pulseaudio_setattr_home_dir(gpg_pinentry_t)
336 pulseaudio_stream_connect(gpg_pinentry_t)
337')
338
339optional_policy(`
340 xserver_user_x_domain_template(gpg_pinentry, gpg_pinentry_t, gpg_pinentry_tmpfs_t)
296273a7 341')