blob: b0c61cfed7864165042071fb971e783f06fc28fc [file] [log] [blame]
Nick Kralevich4be31902014-07-01 13:59:50 -07001# Input selectors:
Stephen Smalley2dd4e512012-01-04 12:33:27 -05002# isSystemServer (boolean)
Stephen Smalleyff4db912014-09-15 15:16:06 -04003# isOwner (boolean)
Stephen Smalley2dd4e512012-01-04 12:33:27 -05004# user (string)
5# seinfo (string)
6# name (string)
Stephen Smalley6139de52014-02-19 10:54:41 -05007# path (string)
Stephen Smalley2dd4e512012-01-04 12:33:27 -05008# isSystemServer=true can only be used once.
Stephen Smalleydd31ddf2012-07-27 17:08:21 -04009# An unspecified isSystemServer defaults to false.
Stephen Smalleyff4db912014-09-15 15:16:06 -040010# isOwner=true will only match for the owner/primary user.
11# isOwner=false will only match for secondary users.
12# If unspecified, the entry can match either case.
Stephen Smalley2dd4e512012-01-04 12:33:27 -050013# An unspecified string selector will match any value.
14# A user string selector that ends in * will perform a prefix match.
Stephen Smalley3ac1d262012-09-24 10:16:03 -040015# user=_app will match any regular app UID.
16# user=_isolated will match any isolated service UID.
Stephen Smalley2dd4e512012-01-04 12:33:27 -050017# All specified input selectors in an entry must match (i.e. logical AND).
18# Matching is case-insensitive.
Nick Kralevich4be31902014-07-01 13:59:50 -070019#
Stephen Smalley2dd4e512012-01-04 12:33:27 -050020# Precedence rules:
21# (1) isSystemServer=true before isSystemServer=false.
Stephen Smalleyff4db912014-09-15 15:16:06 -040022# (2) Specified isOwner= before unspecified isOwner= boolean.
23# (3) Specified user= string before unspecified user= string.
24# (4) Fixed user= string before user= prefix (i.e. ending in *).
25# (5) Longer user= prefix before shorter user= prefix.
26# (6) Specified seinfo= string before unspecified seinfo= string.
27# (7) Specified name= string before unspecified name= string.
28# (8) Specified path= string before unspecified path= string.
Stephen Smalley2dd4e512012-01-04 12:33:27 -050029#
30# Outputs:
31# domain (string)
32# type (string)
Stephen Smalley38084142012-11-28 10:46:18 -050033# levelFrom (string; one of none, all, app, or user)
Stephen Smalley2dd4e512012-01-04 12:33:27 -050034# level (string)
35# Only entries that specify domain= will be used for app process labeling.
36# Only entries that specify type= will be used for app directory labeling.
Stephen Smalley38084142012-11-28 10:46:18 -050037# levelFrom=user is only supported for _app or _isolated UIDs.
38# levelFrom=app or levelFrom=all is only supported for _app UIDs.
Nick Kralevich4be31902014-07-01 13:59:50 -070039# level may be used to specify a fixed level for any UID.
Stephen Smalley2dd4e512012-01-04 12:33:27 -050040#
William Roberts81e1f902015-06-03 21:57:47 -070041#
42# Neverallow Assertions
43# Additional compile time assertion checks can be added as well. The assertion
44# rules are lines beginning with the keyword neverallow. Full support for PCRE
45# regular expressions exists on all input and output selectors. Neverallow
46# rules are never output to the built seapp_contexts file. Like all keywords,
47# neverallows are case-insensitive. A neverallow is asserted when all key value
48# inputs are matched on a key value rule line.
49#
50
51# only the system server can be in system_server domain
52neverallow isSystemServer=false domain=system_server
53neverallow isSystemServer="" domain=system_server
54
55# system domains should never be assigned outside of system uid
56neverallow user=((?!system).)* domain=system_app
57neverallow user=((?!system).)* type=system_app_data_file
58
59# anything with a non-known uid with a specified name should have a specified seinfo
60neverallow user=_app name=.* seinfo=""
61neverallow user=_app name=.* seinfo=default
62
63# neverallow shared relro to any other domain
64# and neverallow any other uid into shared_relro
65neverallow user=shared_relro domain=((?!shared_relro).)*
66neverallow user=((?!shared_relro).)* domain=shared_relro
67
68# neverallow non-isolated uids into isolated_app domain
69# and vice versa
70neverallow user=_isolated domain=((?!isolated_app).)*
71neverallow user=((?!_isolated).)* domain=isolated_app
72
73# uid shell should always be in shell domain, however non-shell
74# uid's can be in shell domain
75neverallow user=shell domain=((?!shell).)*
76
Alex Klyubin1fdee112013-09-13 15:59:04 -070077isSystemServer=true domain=system_server
William Roberts92dfa312014-09-29 10:29:48 -070078user=system seinfo=platform domain=system_app type=system_app_data_file
79user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file
80user=nfc seinfo=platform domain=nfc type=nfc_data_file
81user=radio seinfo=platform domain=radio type=radio_data_file
Nick Kralevichb5ffbb72015-01-07 13:52:43 -080082user=shared_relro domain=shared_relro
William Roberts92dfa312014-09-29 10:29:48 -070083user=shell seinfo=platform domain=shell type=shell_data_file
Stephen Smalleya8337632014-09-11 14:07:28 -040084user=_isolated domain=isolated_app levelFrom=user
85user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user
86user=_app domain=untrusted_app type=app_data_file levelFrom=user