domain.te 6.09 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
# Rules for all domains.

# Allow reaping by init.
allow domain init:process sigchld;

# Read access to properties mapping.
allow domain kernel:fd use;
allow domain tmpfs:file { read getattr };

# Search /storage/emulated tmpfs mount.
allow domain tmpfs:dir r_dir_perms;

# Intra-domain accesses.
14
allow domain self:process ~{ execmem execstack execheap ptrace };
15 16 17 18 19 20 21 22
allow domain self:fd use;
allow domain self:dir r_dir_perms;
allow domain self:lnk_file r_file_perms;
allow domain self:{ fifo_file file } rw_file_perms;
allow domain self:{ unix_dgram_socket unix_stream_socket } *;

# Inherit or receive open files from others.
allow domain init:fd use;
23
allow domain system_server:fd use;
24 25

# Connect to adbd and use a socket transferred from it.
26
# This is used for e.g. adb backup/restore.
27 28
allow domain adbd:unix_stream_socket connectto;
allow domain adbd:fd use;
29
allow domain adbd:unix_stream_socket { getattr getopt read write shutdown };
30

31 32 33
###
### Talk to debuggerd.
###
34 35
allow domain debuggerd:process sigchld;
allow domain debuggerd:unix_stream_socket connectto;
36 37 38
# b/9858255 - debuggerd sockets are not getting properly labeled.
# TODO: Remove this temporary workaround.
allow domain init:unix_stream_socket connectto;
39 40 41

# Root fs.
allow domain rootfs:dir r_dir_perms;
42
allow domain rootfs:file r_file_perms;
43
allow domain rootfs:lnk_file r_file_perms;
44 45 46

# Device accesses.
allow domain device:dir search;
47
allow domain dev_type:lnk_file r_file_perms;
48 49 50 51 52 53 54 55 56 57 58 59 60
allow domain devpts:dir search;
allow domain device:file read;
allow domain socket_device:dir search;
allow domain owntty_device:chr_file rw_file_perms;
allow domain null_device:chr_file rw_file_perms;
allow domain zero_device:chr_file r_file_perms;
allow domain ashmem_device:chr_file rw_file_perms;
allow domain binder_device:chr_file rw_file_perms;
allow domain ptmx_device:chr_file rw_file_perms;
allow domain powervr_device:chr_file rw_file_perms;
allow domain log_device:dir search;
allow domain log_device:chr_file rw_file_perms;
allow domain alarm_device:chr_file r_file_perms;
61 62
allow domain urandom_device:chr_file rw_file_perms;
allow domain random_device:chr_file rw_file_perms;
63 64 65 66 67 68 69 70 71 72
allow domain properties_device:file r_file_perms;

# Filesystem accesses.
allow domain fs_type:filesystem getattr;
allow domain fs_type:dir getattr;

# System file accesses.
allow domain system_file:dir r_dir_perms;
allow domain system_file:file r_file_perms;
allow domain system_file:file execute;
73
allow domain system_file:lnk_file r_file_perms;
74 75 76 77

# Read files already opened under /data.
allow domain system_data_file:dir { search getattr };
allow domain system_data_file:file { getattr read };
78
allow domain system_data_file:lnk_file r_file_perms;
79 80

# Read apk files under /data/app.
81
allow domain apk_data_file:dir { getattr search };
82 83 84 85 86 87 88 89 90
allow domain apk_data_file:file r_file_perms;

# Read /data/dalvik-cache.
allow domain dalvikcache_data_file:dir { search getattr };
allow domain dalvikcache_data_file:file r_file_perms;

# Read already opened /cache files.
allow domain cache_file:dir r_dir_perms;
allow domain cache_file:file { getattr read };
91
allow domain cache_file:lnk_file r_file_perms;
92

Nick Kralevich's avatar
Nick Kralevich committed
93 94 95
# Read timezone related information
r_dir_file(domain, zoneinfo_data_file)

96 97 98 99 100 101 102 103 104 105
# For /acct/uid/*/tasks.
allow domain cgroup:dir { search write };
allow domain cgroup:file w_file_perms;

#Allow access to ion memory allocation device
allow domain ion_device:chr_file rw_file_perms;

# Read access to pseudo filesystems.
r_dir_file(domain, proc)
r_dir_file(domain, sysfs)
106
r_dir_file(domain, sysfs_devices_system_cpu)
107 108 109 110 111
r_dir_file(domain, inotify)
r_dir_file(domain, cgroup)

# debugfs access
allow domain debugfs:dir r_dir_perms;
112
allow domain debugfs:file w_file_perms;
113

114 115 116
# Get SELinux enforcing status.
selinux_getenforce(domain)

117 118 119
# security files
allow domain security_file:dir { search getattr };
allow domain security_file:file getattr;
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134

######## Backwards compatibility - Unlabeled files ############

# Revert to DAC rules when looking at unlabeled files. Over time, the number
# of unlabeled files should decrease.
# TODO: delete these rules in the future.
#
# Note on relabelfrom: We allow any app relabelfrom, but without the relabelto
# capability, it's essentially useless. This is needed to allow an app with
# relabelto to relabel unlabeled files.
#
allow domain unlabeled:file { create_file_perms rwx_file_perms relabelfrom };
allow domain unlabeled:dir { create_dir_perms relabelfrom };
allow domain unlabeled:lnk_file { create_file_perms };
neverallow { domain -relabeltodomain } *:dir_file_class_set relabelto;
135 136 137 138 139

###
### neverallow rules
###

140 141 142 143 144 145 146 147 148 149 150
# Only init should be able to load SELinux policies.
# The first load technically occurs while still in the kernel domain,
# but this does not trigger a denial since there is no policy yet.
# Policy reload requires allowing this to the init domain.
neverallow { domain -init } kernel:security load_policy;

# Only init prior to switching context should be able to set enforcing mode.
# init starts in kernel domain and switches to init domain via setcon in
# the init.rc, so the setenforce occurs while still in kernel. After
# switching domains, there is never any need to setenforce again by init.
neverallow { domain -kernel } kernel:security setenforce;
151

William Roberts's avatar
William Roberts committed
152 153
# Only init, ueventd and system_server should be able to access HW RNG
neverallow { domain -init -system_server -ueventd -unconfineddomain } hw_random_device:chr_file *;
154

155 156
# Ensure that all entrypoint executables are in exec_type.
neverallow domain { file_type -exec_type }:file entrypoint;
157 158 159 160

# Ensure that nothing in userspace can access /dev/mem or /dev/kmem
neverallow { domain -kernel -ueventd -init } kmem_device:chr_file *;
neverallow domain kmem_device:chr_file ~{ create relabelto unlink setattr };
161 162 163 164 165

# Only init should be able to configure kernel usermodehelpers or
# security-sensitive proc settings.
neverallow { domain -init } usermodehelper:file { append write };
neverallow { domain -init } proc_security:file { append write };
166 167 168

# No domain should be allowed to ptrace init.
neverallow domain init:process ptrace;
169 170 171 172

# Init can't receive binder calls. If this neverallow rule is being
# triggered, it's probably due to a service with no SELinux domain.
neverallow domain init:binder call;