]> git.ipfire.org Git - people/stevee/selinux-policy.git/blame - policy/modules/services/postgresql.te
trunk: 7 patches from dan.
[people/stevee/selinux-policy.git] / policy / modules / services / postgresql.te
CommitLineData
a1fcff33 1
996779df 2policy_module(postgresql, 1.8.7)
e8cb08ae
CP
3
4gen_require(`
5 class db_database all_db_database_perms;
6 class db_table all_db_table_perms;
7 class db_procedure all_db_procedure_perms;
8 class db_column all_db_column_perms;
9 class db_tuple all_db_tuple_perms;
10 class db_blob all_db_blob_perms;
11')
a1fcff33
CP
12
13#################################
14#
15# Declarations
16#
e8cb08ae
CP
17
18## <desc>
19## <p>
20## Allow unprived users to execute DDL statement
21## </p>
22## </desc>
23gen_tunable(sepgsql_enable_users_ddl, true)
24
a1fcff33
CP
25type postgresql_t;
26type postgresql_exec_t;
0bfccda4 27init_daemon_domain(postgresql_t, postgresql_exec_t)
a1fcff33
CP
28
29type postgresql_db_t;
30files_type(postgresql_db_t)
31
9bbc757a
CP
32type postgresql_etc_t;
33files_config_file(postgresql_etc_t)
a1fcff33
CP
34
35type postgresql_lock_t;
36files_lock_file(postgresql_lock_t)
37
38type postgresql_log_t;
39logging_log_file(postgresql_log_t)
40
41type postgresql_tmp_t;
42files_tmp_file(postgresql_tmp_t)
43
44type postgresql_var_run_t;
45files_pid_file(postgresql_var_run_t)
46
e8cb08ae
CP
47# database clients attribute
48attribute sepgsql_client_type;
49attribute sepgsql_unconfined_type;
50
51# database objects attribute
52attribute sepgsql_database_type;
53attribute sepgsql_table_type;
54attribute sepgsql_sysobj_table_type;
55attribute sepgsql_procedure_type;
56attribute sepgsql_blob_type;
57attribute sepgsql_module_type;
58
59# database object types
60type sepgsql_blob_t;
61postgresql_blob_object(sepgsql_blob_t)
62
63type sepgsql_db_t;
64postgresql_database_object(sepgsql_db_t)
65
66type sepgsql_fixed_table_t;
67postgresql_table_object(sepgsql_fixed_table_t)
68
350ed891
CP
69type sepgsql_proc_exec_t;
70typealias sepgsql_proc_exec_t alias sepgsql_proc_t;
71postgresql_procedure_object(sepgsql_proc_exec_t)
e8cb08ae
CP
72
73type sepgsql_ro_blob_t;
74postgresql_blob_object(sepgsql_ro_blob_t)
75
76type sepgsql_ro_table_t;
77postgresql_table_object(sepgsql_ro_table_t)
78
79type sepgsql_secret_blob_t;
80postgresql_blob_object(sepgsql_secret_blob_t)
81
82type sepgsql_secret_table_t;
83postgresql_table_object(sepgsql_secret_table_t)
84
85type sepgsql_sysobj_t;
86postgresql_system_table_object(sepgsql_sysobj_t)
87
88type sepgsql_table_t;
89postgresql_table_object(sepgsql_table_t)
90
7f4005e3
CP
91type sepgsql_trusted_proc_exec_t;
92postgresql_procedure_object(sepgsql_trusted_proc_exec_t)
e8cb08ae
CP
93
94# Trusted Procedure Domain
7f4005e3
CP
95type sepgsql_trusted_proc_t;
96domain_type(sepgsql_trusted_proc_t)
97postgresql_unconfined(sepgsql_trusted_proc_t)
98role system_r types sepgsql_trusted_proc_t;
e8cb08ae 99
a01a4a71
CP
100# Types for unprivileged client
101type unpriv_sepgsql_blob_t;
102postgresql_blob_object(unpriv_sepgsql_blob_t)
103
104type unpriv_sepgsql_proc_exec_t;
105postgresql_procedure_object(unpriv_sepgsql_proc_exec_t)
106
107type unpriv_sepgsql_sysobj_t;
108postgresql_system_table_object(unpriv_sepgsql_sysobj_t)
109
110type unpriv_sepgsql_table_t;
111postgresql_table_object(unpriv_sepgsql_table_t)
112
113# Types for UBAC
296273a7
CP
114type user_sepgsql_blob_t;
115typealias user_sepgsql_blob_t alias { staff_sepgsql_blob_t sysadm_sepgsql_blob_t };
116typealias user_sepgsql_blob_t alias { auditadm_sepgsql_blob_t secadm_sepgsql_blob_t };
117postgresql_blob_object(user_sepgsql_blob_t)
118
119type user_sepgsql_proc_exec_t;
120typealias user_sepgsql_proc_exec_t alias { staff_sepgsql_proc_exec_t sysadm_sepgsql_proc_exec_t };
121typealias user_sepgsql_proc_exec_t alias { auditadm_sepgsql_proc_exec_t secadm_sepgsql_proc_exec_t };
122postgresql_procedure_object(user_sepgsql_proc_exec_t)
123
124type user_sepgsql_sysobj_t;
125typealias user_sepgsql_sysobj_t alias { staff_sepgsql_sysobj_t sysadm_sepgsql_sysobj_t };
126typealias user_sepgsql_sysobj_t alias { auditadm_sepgsql_sysobj_t secadm_sepgsql_sysobj_t };
127postgresql_system_table_object(user_sepgsql_sysobj_t)
128
129type user_sepgsql_table_t;
130typealias user_sepgsql_table_t alias { staff_sepgsql_table_t sysadm_sepgsql_table_t };
131typealias user_sepgsql_table_t alias { auditadm_sepgsql_table_t secadm_sepgsql_table_t };
132postgresql_table_object(user_sepgsql_table_t)
133
a1fcff33
CP
134########################################
135#
136# postgresql Local policy
137#
138allow postgresql_t self:capability { kill dac_override dac_read_search chown fowner fsetid setuid setgid sys_nice sys_tty_config sys_admin };
165b42d2 139dontaudit postgresql_t self:capability { sys_tty_config sys_admin };
57d8e6c7 140allow postgresql_t self:process signal_perms;
0b36a214 141allow postgresql_t self:fifo_file rw_fifo_file_perms;
a1fcff33
CP
142allow postgresql_t self:sem create_sem_perms;
143allow postgresql_t self:shm create_shm_perms;
144allow postgresql_t self:tcp_socket create_stream_socket_perms;
145allow postgresql_t self:udp_socket create_stream_socket_perms;
146allow postgresql_t self:unix_dgram_socket create_socket_perms;
147allow postgresql_t self:unix_stream_socket create_stream_socket_perms;
e8cb08ae
CP
148allow postgresql_t self:netlink_selinux_socket create_socket_perms;
149
150allow postgresql_t sepgsql_database_type:db_database *;
151type_transition postgresql_t postgresql_t:db_database sepgsql_db_t;
152
153allow postgresql_t sepgsql_module_type:db_database install_module;
154# Database/Loadable module
155allow sepgsql_database_type sepgsql_module_type:db_database load_module;
156
157allow postgresql_t sepgsql_table_type:{ db_table db_column db_tuple } *;
158type_transition postgresql_t sepgsql_database_type:db_table sepgsql_sysobj_t;
159
160allow postgresql_t sepgsql_procedure_type:db_procedure *;
350ed891 161type_transition postgresql_t sepgsql_database_type:db_procedure sepgsql_proc_exec_t;
e8cb08ae
CP
162
163allow postgresql_t sepgsql_blob_type:db_blob *;
164type_transition postgresql_t sepgsql_database_type:db_blob sepgsql_blob_t;
a1fcff33 165
0bfccda4
CP
166manage_dirs_pattern(postgresql_t, postgresql_db_t, postgresql_db_t)
167manage_files_pattern(postgresql_t, postgresql_db_t, postgresql_db_t)
168manage_lnk_files_pattern(postgresql_t, postgresql_db_t, postgresql_db_t)
169manage_fifo_files_pattern(postgresql_t, postgresql_db_t, postgresql_db_t)
170manage_sock_files_pattern(postgresql_t, postgresql_db_t, postgresql_db_t)
103fe280 171files_var_lib_filetrans(postgresql_t, postgresql_db_t, { dir file lnk_file sock_file fifo_file })
a1fcff33 172
c0868a7a 173allow postgresql_t postgresql_etc_t:dir list_dir_perms;
0bfccda4
CP
174read_files_pattern(postgresql_t, postgresql_etc_t, postgresql_etc_t)
175read_lnk_files_pattern(postgresql_t, postgresql_etc_t, postgresql_etc_t)
a1fcff33
CP
176
177allow postgresql_t postgresql_exec_t:lnk_file { getattr read };
178can_exec(postgresql_t, postgresql_exec_t )
179
c0868a7a 180allow postgresql_t postgresql_lock_t:file manage_file_perms;
1c1ac67f 181files_lock_filetrans(postgresql_t,postgresql_lock_t,file)
a1fcff33 182
0bfccda4
CP
183manage_files_pattern(postgresql_t, postgresql_log_t, postgresql_log_t)
184logging_log_filetrans(postgresql_t, postgresql_log_t, { file dir })
a1fcff33 185
0bfccda4
CP
186manage_dirs_pattern(postgresql_t, postgresql_tmp_t, postgresql_tmp_t)
187manage_files_pattern(postgresql_t, postgresql_tmp_t, postgresql_tmp_t)
188manage_lnk_files_pattern(postgresql_t, postgresql_tmp_t, postgresql_tmp_t)
189manage_fifo_files_pattern(postgresql_t, postgresql_tmp_t, postgresql_tmp_t)
190manage_sock_files_pattern(postgresql_t, postgresql_tmp_t, postgresql_tmp_t)
103fe280
CP
191files_tmp_filetrans(postgresql_t, postgresql_tmp_t, { dir file sock_file })
192fs_tmpfs_filetrans(postgresql_t, postgresql_tmp_t, { dir file lnk_file sock_file fifo_file })
a1fcff33 193
0bfccda4
CP
194manage_files_pattern(postgresql_t, postgresql_var_run_t, postgresql_var_run_t)
195manage_sock_files_pattern(postgresql_t, postgresql_var_run_t, postgresql_var_run_t)
196files_pid_filetrans(postgresql_t, postgresql_var_run_t, file)
a1fcff33 197
445522dc 198kernel_read_kernel_sysctls(postgresql_t)
a1fcff33
CP
199kernel_read_system_state(postgresql_t)
200kernel_list_proc(postgresql_t)
445522dc 201kernel_read_all_sysctls(postgresql_t)
a1fcff33 202kernel_read_proc_symlinks(postgresql_t)
a1fcff33 203
19006686
CP
204corenet_all_recvfrom_unlabeled(postgresql_t)
205corenet_all_recvfrom_netlabel(postgresql_t)
668b3093
CP
206corenet_tcp_sendrecv_generic_if(postgresql_t)
207corenet_udp_sendrecv_generic_if(postgresql_t)
c1262146
CP
208corenet_tcp_sendrecv_generic_node(postgresql_t)
209corenet_udp_sendrecv_generic_node(postgresql_t)
a1fcff33
CP
210corenet_tcp_sendrecv_all_ports(postgresql_t)
211corenet_udp_sendrecv_all_ports(postgresql_t)
c1262146 212corenet_tcp_bind_generic_node(postgresql_t)
a1fcff33
CP
213corenet_tcp_bind_postgresql_port(postgresql_t)
214corenet_tcp_connect_auth_port(postgresql_t)
141cffdd
CP
215corenet_sendrecv_postgresql_server_packets(postgresql_t)
216corenet_sendrecv_auth_client_packets(postgresql_t)
a1fcff33
CP
217
218dev_read_sysfs(postgresql_t)
219dev_read_urand(postgresql_t)
220
221fs_getattr_all_fs(postgresql_t)
222fs_search_auto_mountpoints(postgresql_t)
770c015f 223fs_rw_hugetlbfs_files(postgresql_t)
a1fcff33 224
e8cb08ae
CP
225selinux_get_enforce_mode(postgresql_t)
226selinux_validate_context(postgresql_t)
227selinux_compute_access_vector(postgresql_t)
228selinux_compute_create_context(postgresql_t)
229selinux_compute_relabel_context(postgresql_t)
230
a1fcff33 231term_use_controlling_term(postgresql_t)
a1fcff33
CP
232
233corecmd_exec_bin(postgresql_t)
a1fcff33
CP
234corecmd_exec_shell(postgresql_t)
235
1815bad1 236domain_dontaudit_list_all_domains_state(postgresql_t)
15722ec9 237domain_use_interactive_fds(postgresql_t)
a1fcff33
CP
238
239files_dontaudit_search_home(postgresql_t)
240files_manage_etc_files(postgresql_t)
241files_search_etc(postgresql_t)
242files_read_etc_runtime_files(postgresql_t)
243files_read_usr_files(postgresql_t)
244
09e21686
CP
245auth_use_nsswitch(postgresql_t)
246
68228b33 247init_read_utmp(postgresql_t)
a1fcff33 248
a1fcff33
CP
249logging_send_syslog_msg(postgresql_t)
250
251miscfiles_read_localization(postgresql_t)
252
e8cb08ae 253seutil_libselinux_linked(postgresql_t)
a1fcff33 254
15722ec9 255userdom_dontaudit_use_unpriv_user_fds(postgresql_t)
296273a7
CP
256userdom_dontaudit_search_user_home_dirs(postgresql_t)
257userdom_dontaudit_use_user_terminals(postgresql_t)
a1fcff33
CP
258
259mta_getattr_spool(postgresql_t)
260
a1fcff33
CP
261tunable_policy(`allow_execmem',`
262 allow postgresql_t self:process execmem;
263')
264
bb7170f6 265optional_policy(`
a1fcff33
CP
266 consoletype_exec(postgresql_t)
267')
268
bb7170f6 269optional_policy(`
a1fcff33
CP
270 cron_search_spool(postgresql_t)
271 cron_system_entry(postgresql_t,postgresql_exec_t)
272')
273
bb7170f6 274optional_policy(`
a1fcff33
CP
275 hostname_exec(postgresql_t)
276')
277
0b6acad1
CP
278optional_policy(`
279 ipsec_match_default_spd(postgresql_t)
280')
281
bb7170f6 282optional_policy(`
a1fcff33
CP
283 kerberos_use(postgresql_t)
284')
285
bb7170f6 286optional_policy(`
a1fcff33
CP
287 seutil_sigchld_newrole(postgresql_t)
288')
289
bb7170f6 290optional_policy(`
a1fcff33
CP
291 udev_read_db(postgresql_t)
292')
e8cb08ae
CP
293
294########################################
295#
296# Rules common to all clients
297#
298
299allow sepgsql_client_type sepgsql_db_t:db_database { getattr access get_param set_param };
300type_transition sepgsql_client_type sepgsql_client_type:db_database sepgsql_db_t;
301
350ed891 302allow sepgsql_client_type sepgsql_fixed_table_t:db_table { getattr use select insert lock };
e8cb08ae
CP
303allow sepgsql_client_type sepgsql_fixed_table_t:db_column { getattr use select insert };
304allow sepgsql_client_type sepgsql_fixed_table_t:db_tuple { use select insert };
305
350ed891 306allow sepgsql_client_type sepgsql_table_t:db_table { getattr use select update insert delete lock };
e8cb08ae
CP
307allow sepgsql_client_type sepgsql_table_t:db_column { getattr use select update insert };
308allow sepgsql_client_type sepgsql_table_t:db_tuple { use select update insert delete };
309
350ed891 310allow sepgsql_client_type sepgsql_ro_table_t:db_table { getattr use select lock };
e8cb08ae
CP
311allow sepgsql_client_type sepgsql_ro_table_t:db_column { getattr use select };
312allow sepgsql_client_type sepgsql_ro_table_t:db_tuple { use select };
313
314allow sepgsql_client_type sepgsql_secret_table_t:db_table getattr;
315allow sepgsql_client_type sepgsql_secret_table_t:db_column getattr;
316
350ed891 317allow sepgsql_client_type sepgsql_sysobj_t:db_table { getattr use select lock };
e8cb08ae
CP
318allow sepgsql_client_type sepgsql_sysobj_t:db_column { getattr use select };
319allow sepgsql_client_type sepgsql_sysobj_t:db_tuple { use select };
320
350ed891
CP
321allow sepgsql_client_type sepgsql_proc_exec_t:db_procedure { getattr execute install };
322allow sepgsql_client_type sepgsql_trusted_proc_exec_t:db_procedure { getattr execute entrypoint };
e8cb08ae
CP
323
324allow sepgsql_client_type sepgsql_blob_t:db_blob { create drop getattr setattr read write };
325allow sepgsql_client_type sepgsql_ro_blob_t:db_blob { getattr read };
326allow sepgsql_client_type sepgsql_secret_blob_t:db_blob getattr;
327
328# The purpose of the dontaudit rule in row-level access control is to prevent a flood of logs.
329# If a client tries to SELECT a table including violated tuples, these are filtered from
330# the result set as if not exist, but its access denied longs can be recorded within log files.
331# In generally, the number of tuples are much larger than the number of columns, tables and so on.
332# So, it makes a flood of logs when many tuples are violated.
333#
334# The default policy does not prevent anything for sepgsql_client_type sepgsql_unconfined_type,
335# so we don't need "dontaudit" rules in Type-Enforcement. However, MLS/MCS can prevent them
336# to access classified tuples and can make a audit record.
337#
338# Therefore, the following rule is applied for any domains which can connect SE-PostgreSQL.
339dontaudit { postgresql_t sepgsql_client_type sepgsql_unconfined_type } { sepgsql_table_type -sepgsql_sysobj_table_type }:db_tuple { use select update insert delete };
340
e8cb08ae
CP
341########################################
342#
343# Unconfined access to this module
344#
345
346allow sepgsql_unconfined_type sepgsql_database_type:db_database *;
347type_transition sepgsql_unconfined_type sepgsql_unconfined_type:db_database sepgsql_db_t;
348
349type_transition sepgsql_unconfined_type sepgsql_database_type:db_table sepgsql_table_t;
350ed891 350type_transition sepgsql_unconfined_type sepgsql_database_type:db_procedure sepgsql_proc_exec_t;
e8cb08ae
CP
351type_transition sepgsql_unconfined_type sepgsql_database_type:db_blob sepgsql_blob_t;
352
353allow sepgsql_unconfined_type sepgsql_table_type:{ db_table db_column db_tuple } *;
354
355# unconfined domain is not allowed to invoke user defined procedure directly.
356# They have to confirm and relabel it at first.
350ed891
CP
357allow sepgsql_unconfined_type sepgsql_proc_exec_t:db_procedure *;
358allow sepgsql_unconfined_type sepgsql_trusted_proc_exec_t:db_procedure ~install;
359allow sepgsql_unconfined_type sepgsql_procedure_type:db_procedure ~{ execute install };
e8cb08ae
CP
360
361allow sepgsql_unconfined_type sepgsql_blob_type:db_blob *;
362
363allow sepgsql_unconfined_type sepgsql_module_type:db_database install_module;
364
365kernel_relabelfrom_unlabeled_database(sepgsql_unconfined_type)