blob: c3292459125fda3a43c8a8be544ded6370e79e60 [file] [log] [blame]
Nick Kralevichdbd28d92013-06-27 15:11:02 -07001# Rules for all domains.
2
3# Allow reaping by init.
4allow domain init:process sigchld;
5
6# Read access to properties mapping.
7allow domain kernel:fd use;
8allow domain tmpfs:file { read getattr };
9
10# Search /storage/emulated tmpfs mount.
11allow domain tmpfs:dir r_dir_perms;
12
Nick Kralevichdbd28d92013-06-27 15:11:02 -070013# Intra-domain accesses.
Stephen Smalleyad7df7b2013-12-20 08:24:12 -050014allow domain self:process ~{ execmem execstack execheap ptrace };
Nick Kralevichdbd28d92013-06-27 15:11:02 -070015allow domain self:fd use;
16allow domain self:dir r_dir_perms;
17allow domain self:lnk_file r_file_perms;
18allow domain self:{ fifo_file file } rw_file_perms;
Stephen Smalley16011322014-02-24 15:06:11 -050019allow domain self:unix_dgram_socket { create_socket_perms sendto };
20allow domain self:unix_stream_socket { create_stream_socket_perms connectto };
Nick Kralevichdbd28d92013-06-27 15:11:02 -070021
22# Inherit or receive open files from others.
23allow domain init:fd use;
Alex Klyubin1fdee112013-09-13 15:59:04 -070024allow domain system_server:fd use;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070025
26# Connect to adbd and use a socket transferred from it.
Stephen Smalleyc4021ce2014-01-03 14:38:41 -050027# This is used for e.g. adb backup/restore.
Nick Kralevichdbd28d92013-06-27 15:11:02 -070028allow domain adbd:unix_stream_socket connectto;
29allow domain adbd:fd use;
Stephen Smalleyc4021ce2014-01-03 14:38:41 -050030allow domain adbd:unix_stream_socket { getattr getopt read write shutdown };
Nick Kralevichdbd28d92013-06-27 15:11:02 -070031
Nick Kralevich7d0f9552014-01-18 18:07:06 -080032userdebug_or_eng(`
33 # Same as adbd rules above, except allow su to do the same thing
34 allow domain su:unix_stream_socket connectto;
35 allow domain su:fd use;
36 allow domain su:unix_stream_socket { getattr getopt read write shutdown };
37
Stephen Smalley3dad7b62014-03-05 09:50:08 -050038 binder_call(domain, su)
39
Nick Kralevich7d0f9552014-01-18 18:07:06 -080040 # Running something like "pm dump com.android.bluetooth" requires
41 # fifo writes
42 allow domain su:fifo_file { write getattr };
43
44 # allow "gdbserver --attach" to work for su.
45 allow domain su:process sigchld;
46')
47
Nick Kralevich5919d1c2013-07-15 11:41:24 -070048###
49### Talk to debuggerd.
50###
Nick Kralevichdbd28d92013-06-27 15:11:02 -070051allow domain debuggerd:process sigchld;
52allow domain debuggerd:unix_stream_socket connectto;
53
54# Root fs.
55allow domain rootfs:dir r_dir_perms;
Nick Kralevich6634a102013-07-12 18:45:56 -070056allow domain rootfs:file r_file_perms;
Stephen Smalley712ca0a2013-10-23 13:25:53 -040057allow domain rootfs:lnk_file r_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070058
59# Device accesses.
60allow domain device:dir search;
Stephen Smalley712ca0a2013-10-23 13:25:53 -040061allow domain dev_type:lnk_file r_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070062allow domain devpts:dir search;
63allow domain device:file read;
Robert Craig20feb752014-03-06 10:16:53 -050064allow domain socket_device:dir r_dir_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070065allow domain owntty_device:chr_file rw_file_perms;
66allow domain null_device:chr_file rw_file_perms;
67allow domain zero_device:chr_file r_file_perms;
68allow domain ashmem_device:chr_file rw_file_perms;
69allow domain binder_device:chr_file rw_file_perms;
70allow domain ptmx_device:chr_file rw_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070071allow domain log_device:dir search;
72allow domain log_device:chr_file rw_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070073allow domain alarm_device:chr_file r_file_perms;
Alex Klyubina2477052013-09-10 11:13:15 -070074allow domain urandom_device:chr_file rw_file_perms;
75allow domain random_device:chr_file rw_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070076allow domain properties_device:file r_file_perms;
77
Mark Salyzyn8ed750e2013-11-12 15:34:52 -080078# logd access
79write_logd(domain)
80
Nick Kralevichdbd28d92013-06-27 15:11:02 -070081# Filesystem accesses.
82allow domain fs_type:filesystem getattr;
83allow domain fs_type:dir getattr;
84
85# System file accesses.
86allow domain system_file:dir r_dir_perms;
87allow domain system_file:file r_file_perms;
88allow domain system_file:file execute;
Stephen Smalley712ca0a2013-10-23 13:25:53 -040089allow domain system_file:lnk_file r_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070090
91# Read files already opened under /data.
92allow domain system_data_file:dir { search getattr };
93allow domain system_data_file:file { getattr read };
Stephen Smalley712ca0a2013-10-23 13:25:53 -040094allow domain system_data_file:lnk_file r_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -070095
96# Read apk files under /data/app.
Geremy Condra81560732013-08-30 13:02:30 -070097allow domain apk_data_file:dir { getattr search };
Nick Kralevichdbd28d92013-06-27 15:11:02 -070098allow domain apk_data_file:file r_file_perms;
99
100# Read /data/dalvik-cache.
101allow domain dalvikcache_data_file:dir { search getattr };
102allow domain dalvikcache_data_file:file r_file_perms;
103
104# Read already opened /cache files.
105allow domain cache_file:dir r_dir_perms;
106allow domain cache_file:file { getattr read };
Stephen Smalley712ca0a2013-10-23 13:25:53 -0400107allow domain cache_file:lnk_file r_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700108
Nick Kralevich7466f9b2013-12-12 15:32:42 -0800109# Read timezone related information
110r_dir_file(domain, zoneinfo_data_file)
111
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700112# For /acct/uid/*/tasks.
113allow domain cgroup:dir { search write };
114allow domain cgroup:file w_file_perms;
115
116#Allow access to ion memory allocation device
117allow domain ion_device:chr_file rw_file_perms;
118
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700119# Read access to pseudo filesystems.
120r_dir_file(domain, proc)
121r_dir_file(domain, sysfs)
Nick Kralevich967f39a2013-10-30 14:12:21 -0700122r_dir_file(domain, sysfs_devices_system_cpu)
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700123r_dir_file(domain, inotify)
124r_dir_file(domain, cgroup)
Robert Craig529fcbe2014-01-07 13:46:56 -0500125r_dir_file(domain, proc_net)
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700126
127# debugfs access
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700128allow domain debugfs:dir r_dir_perms;
Nick Kralevich8758cc52013-07-11 11:30:20 -0700129allow domain debugfs:file w_file_perms;
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700130
Stephen Smalley712ca0a2013-10-23 13:25:53 -0400131# Get SELinux enforcing status.
132selinux_getenforce(domain)
133
Stephen Smalleyf9268172014-02-24 11:35:39 -0500134# /data/security files
Nick Kralevichdbd28d92013-06-27 15:11:02 -0700135allow domain security_file:dir { search getattr };
136allow domain security_file:file getattr;
Stephen Smalleyf9268172014-02-24 11:35:39 -0500137allow domain security_file:lnk_file r_file_perms;
Nick Kralevich0c9708b2013-07-10 14:46:05 -0700138
Robert Craig48b18832014-02-04 11:36:41 -0500139# World readable asec image contents
140allow domain asec_public_file:file r_file_perms;
141allow domain { asec_public_file asec_apk_file }:dir r_dir_perms;
142
Nick Kralevich0c9708b2013-07-10 14:46:05 -0700143######## Backwards compatibility - Unlabeled files ############
144
145# Revert to DAC rules when looking at unlabeled files. Over time, the number
146# of unlabeled files should decrease.
147# TODO: delete these rules in the future.
148#
149# Note on relabelfrom: We allow any app relabelfrom, but without the relabelto
150# capability, it's essentially useless. This is needed to allow an app with
151# relabelto to relabel unlabeled files.
152#
Stephen Smalley91c290b2014-01-09 13:34:46 -0500153allow domain unlabeled:notdevfile_class_set { create_file_perms relabelfrom };
Nick Kralevich0c9708b2013-07-10 14:46:05 -0700154allow domain unlabeled:dir { create_dir_perms relabelfrom };
Nick Kralevich0c9708b2013-07-10 14:46:05 -0700155neverallow { domain -relabeltodomain } *:dir_file_class_set relabelto;
Nick Kralevich26371982013-07-15 17:10:35 -0700156
157###
158### neverallow rules
159###
160
Stephen Smalley5487ca02014-02-10 16:31:04 -0500161# Limit ability to ptrace or read sensitive /proc/pid files of processes
162# with other UIDs to these whitelisted domains.
163neverallow { domain -debuggerd -vold -dumpstate -system_server } self:capability sys_ptrace;
164
165# Limit device node creation and raw I/O to these whitelisted domains.
Nick Kralevich96eeb1e2014-02-19 13:33:32 -0800166neverallow { domain -kernel -init -recovery -ueventd -watchdogd -healthd -vold -uncrypt } self:capability { sys_rawio mknod };
Stephen Smalley5487ca02014-02-10 16:31:04 -0500167
168# No domain needs mac_override as it is unused by SELinux.
Stephen Smalley04ee5df2014-01-30 13:23:08 -0500169neverallow domain self:capability2 mac_override;
Stephen Smalley5487ca02014-02-10 16:31:04 -0500170
171# Only recovery needs mac_admin to set contexts not defined in current policy.
Stephen Smalley04ee5df2014-01-30 13:23:08 -0500172neverallow { domain -recovery } self:capability2 mac_admin;
173
Stephen Smalleyfea6e662013-12-06 08:05:53 -0500174# Only init should be able to load SELinux policies.
175# The first load technically occurs while still in the kernel domain,
176# but this does not trigger a denial since there is no policy yet.
177# Policy reload requires allowing this to the init domain.
178neverallow { domain -init } kernel:security load_policy;
179
180# Only init prior to switching context should be able to set enforcing mode.
181# init starts in kernel domain and switches to init domain via setcon in
182# the init.rc, so the setenforce occurs while still in kernel. After
183# switching domains, there is never any need to setenforce again by init.
Stephen Smalley8b516742014-01-08 09:29:30 -0500184neverallow { domain -kernel } kernel:security { setenforce setcheckreqprot };
Stephen Smalley01301542013-09-27 10:38:14 -0400185
Stephen Smalley853ffaa2014-03-06 13:02:50 -0500186# No booleans in AOSP policy, so no need to ever set them.
187neverallow domain kernel:security setbool;
188
189# Adjusting the AVC cache threshold.
190# Not presently allowed to anything in policy, but possibly something
191# that could be set from init.rc.
192neverallow { domain -init } kernel:security setsecparam;
193
William Roberts85c5fc22013-10-06 15:36:11 -0400194# Only init, ueventd and system_server should be able to access HW RNG
195neverallow { domain -init -system_server -ueventd -unconfineddomain } hw_random_device:chr_file *;
Alex Klyubin8d688312013-10-03 13:35:56 -0700196
Stephen Smalley01301542013-09-27 10:38:14 -0400197# Ensure that all entrypoint executables are in exec_type.
198neverallow domain { file_type -exec_type }:file entrypoint;
Geremy Condraddf98fa2013-10-31 11:17:23 -0700199
200# Ensure that nothing in userspace can access /dev/mem or /dev/kmem
201neverallow { domain -kernel -ueventd -init } kmem_device:chr_file *;
202neverallow domain kmem_device:chr_file ~{ create relabelto unlink setattr };
Stephen Smalley7adb9992013-12-06 09:31:40 -0500203
204# Only init should be able to configure kernel usermodehelpers or
205# security-sensitive proc settings.
206neverallow { domain -init } usermodehelper:file { append write };
207neverallow { domain -init } proc_security:file { append write };
Stephen Smalley95e08422013-12-09 12:49:47 -0500208
209# No domain should be allowed to ptrace init.
210neverallow domain init:process ptrace;
Nick Kralevicha730e502014-01-03 20:44:07 -0800211
212# Init can't receive binder calls. If this neverallow rule is being
213# triggered, it's probably due to a service with no SELinux domain.
214neverallow domain init:binder call;
William Robertsd0919ec2014-01-30 09:10:28 -0800215
216# Don't allow raw read/write/open access to block_device
217# Rather force a relabel to a more specific type
Nick Kralevich96eeb1e2014-02-19 13:33:32 -0800218neverallow { domain -kernel -init -recovery -vold -uncrypt } block_device:blk_file { open read write };
William Robertsa637b2f2014-01-30 09:15:45 -0800219
220# Don't allow raw read/write/open access to generic devices.
221# Rather force a relabel to a more specific type.
222# ueventd is exempt from this, as its managing these devices.
223neverallow { domain -unconfineddomain -ueventd } device:chr_file { open read write };
Stephen Smalleyb081cc12014-02-10 13:29:38 -0500224
225# Limit what domains can mount filesystems or change their mount flags.
226# sdcard_type / vfat is exempt as a larger set of domains need
227# this capability, including device-specific domains.
228neverallow { domain -kernel -init -recovery -vold -zygote } { fs_type -sdcard_type }:filesystem { mount remount relabelfrom relabelto };