2014-11-26 22:34:15 +01:00
|
|
|
type superuser_device, file_type;
|
|
|
|
|
|
|
|
## Perms for the daemon
|
|
|
|
|
|
|
|
type sudaemon, domain;
|
|
|
|
|
|
|
|
userdebug_or_eng(`
|
|
|
|
domain_trans(init, su_exec, sudaemon)
|
2014-12-16 20:27:32 +01:00
|
|
|
|
|
|
|
type_transition sudaemon socket_device:sock_file superuser_device;
|
2014-11-26 22:34:15 +01:00
|
|
|
# The userspace app uses /dev sockets to control per-app access
|
|
|
|
allow sudaemon superuser_device:dir { create rw_dir_perms setattr unlink };
|
|
|
|
allow sudaemon superuser_device:sock_file { create setattr unlink write };
|
|
|
|
|
|
|
|
# sudaemon is also permissive to permit setenforce.
|
|
|
|
permissive sudaemon;
|
|
|
|
|
|
|
|
# Add sudaemon to various domains
|
|
|
|
net_domain(sudaemon)
|
|
|
|
app_domain(sudaemon)
|
|
|
|
|
|
|
|
dontaudit sudaemon self:capability_class_set *;
|
|
|
|
dontaudit sudaemon kernel:security *;
|
|
|
|
dontaudit sudaemon kernel:system *;
|
|
|
|
dontaudit sudaemon self:memprotect *;
|
|
|
|
dontaudit sudaemon domain:process *;
|
|
|
|
dontaudit sudaemon domain:fd *;
|
|
|
|
dontaudit sudaemon domain:dir *;
|
|
|
|
dontaudit sudaemon domain:lnk_file *;
|
|
|
|
dontaudit sudaemon domain:{ fifo_file file } *;
|
|
|
|
dontaudit sudaemon domain:socket_class_set *;
|
|
|
|
dontaudit sudaemon domain:ipc_class_set *;
|
|
|
|
dontaudit sudaemon domain:key *;
|
|
|
|
dontaudit sudaemon fs_type:filesystem *;
|
|
|
|
dontaudit sudaemon {fs_type dev_type file_type}:dir_file_class_set *;
|
|
|
|
dontaudit sudaemon node_type:node *;
|
|
|
|
dontaudit sudaemon node_type:{ tcp_socket udp_socket rawip_socket } *;
|
|
|
|
dontaudit sudaemon netif_type:netif *;
|
|
|
|
dontaudit sudaemon port_type:socket_class_set *;
|
|
|
|
dontaudit sudaemon port_type:{ tcp_socket dccp_socket } *;
|
|
|
|
dontaudit sudaemon domain:peer *;
|
|
|
|
dontaudit sudaemon domain:binder *;
|
|
|
|
dontaudit sudaemon property_type:property_service *;
|
|
|
|
')
|
|
|
|
|
|
|
|
## Perms for the app
|
|
|
|
|
|
|
|
userdebug_or_eng(`
|
2014-12-10 18:17:18 +01:00
|
|
|
# Translate user apps to the shell domain when using su
|
2014-12-10 21:28:57 +01:00
|
|
|
#
|
|
|
|
# PR_SET_NO_NEW_PRIVS blocks this :(
|
|
|
|
# we need to find a way to narrow this down to the actual exec.
|
|
|
|
# typealias shell alias suclient;
|
|
|
|
# domain_auto_trans(untrusted_app, su_exec, suclient)
|
|
|
|
|
|
|
|
allow untrusted_app su_exec:file { execute_no_trans getattr open read execute };
|
|
|
|
allow untrusted_app sudaemon:unix_stream_socket { connectto read write setopt ioctl };
|
|
|
|
allow untrusted_app superuser_device:dir { r_dir_perms };
|
|
|
|
allow untrusted_app superuser_device:sock_file { write };
|
2014-11-26 22:34:15 +01:00
|
|
|
|
|
|
|
|
2014-11-27 16:30:01 +01:00
|
|
|
# For Settings control of access
|
2014-11-26 22:34:15 +01:00
|
|
|
allow system_app superuser_device:sock_file { read write create setattr unlink getattr };
|
|
|
|
allow system_app sudaemon:unix_stream_socket { connectto read write setopt ioctl };
|
|
|
|
allow system_app superuser_device:dir { create rw_dir_perms setattr unlink };
|
|
|
|
')
|