Selinux: Как получить другой системный сервис внутри системного сервиса - PullRequest
0 голосов
/ 06 мая 2019

У меня есть системный сервис KioskService.Внутри этой системной службы я называю другую системную службу DpcService так:

public class KioskService extends IKioskService.Stub{

    private Context mContext;
    private IDpcService dpcService;

    public KioskService(Context context) {
        mContext = context;
    }

    @Override
    public void exitKiosk()  {
        try{
            String[] emptyArray = {""};
            dpcService = IDpcService.Stub.asInterface(getBinder("dpc"));
            dpcService.setLockTaskPackages(emptyArray);
        }
        catch(Exception e){
            Log.e("TAG","Exit Kiosk Exception",e);
        }
    }

    private IBinder getBinder(String serviceName) {
        IBinder serviceBinder;
        serviceBinder = ServiceManager.getService(serviceName);

        if (serviceBinder == null) {
            return null;
        }

        return serviceBinder;
    }
}

Однако я получаю эту ошибку:

05-06 06: 40: 00.088 604 604 E SELinux:avc: отказано {найти} для службы = msi_dpc pid = 5375 uid = 1000 scontext = u: r: kiosk_app: s0 tcontext = u: object_r: dpc_service: s0 tclass = service_manager permissive = 0

Iдумаю, причина в том, что, используя политику Selinux, я должен разрешить моей службе киоска использовать мою службу dpc.Если это так, как мне это сделать?

1 Ответ

0 голосов
/ 14 мая 2019

Да, вы правы. Вы пытаетесь найти другой сервис с помощью вызова метода ServiceManager.getService. Таким образом, ваша система произвела отказ в доступе для этой операции поиска. Там могут быть различные решения. Для моего совета у вас должна быть библиотека aud2allow. (Вы можете легко гуглить и загружать) Но самый простой: Сначала извлеките файл текущей системной политики;

adb pull /sys/fs/selinux/policy SEPOLICY_FILE

затем выполните эту команду с этим файлом SEPOLICY;

cat /logs/logfile.log | audit2allow -p SEPOLICY_FILE

это дает вам некоторые рекомендации. В файле журнала указываются полные сообщения об отказе в доступе.

Я надеюсь, что это работает для вас.

...