2013-10-06 27 views
14

Sono lo sviluppatore su una radice -app per Android.Disabilitare o modificare temporaneamente SELinux su Android

Purtroppo ora su alcuni dispositivi/ROM c'è SELinux in far rispettare -mode e previene alcune azioni della mia app.

Poiché si tratta di un'app radice, gli utenti mi concedono l'accesso root!

Ora SELinux sta bloccando alcune delle mie azioni e ho bisogno di trovare una soluzione per questo.

Ho provato a disabilitare temporaneamente SELinux

setenforce permissive -> no failure, but getenforce still returns "Enforcing" 
cat 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing" 

io gioco con l'idea di modificare il sepolicy -file in fase di esecuzione per consentire i comandi bloccati e innescare una ricarica di esso, ma io non sono né sure se & come questo potrebbe funzionare, né non è una buona idea.

Chi ha altri consigli o risorse per me?

+0

Ho pensato che il demone su si aggirava attorno a SELinux, oltre a nosuid, correndo interamente in un contesto diverso, no? Quali azioni in particolare vengono bloccate? – Delyan

+0

Non so come abbia fatto Chainfire con la SU. Ma nel mio caso è eg. 'avc: negato {execstack} per pid = 10971' e forse più cose dopo:/ –

+0

Stai spedendo' execstack' da solo? Ti rendi conto che chiunque abbia impostato la modalità Enforcing potrebbe aver bloccato il demone/programma 'su' fino a quando non è indifeso in questo caso, giusto? – Delyan

risposta

2

Ho cercato di disabilitare SELinux su Android 4.3 per un po 'di tempo e questo è quello che mi è venuto in mente.

Su Samsung S4 Android 4.3, setenforce 0 passerà alla modalità Permissive.

Su Samsung Note 3 Android 4.3, setenforce 0 NON cambierà lo stato di SELinux.

ho cercato Nexus 4 Android 4.3, ma per impostazione predefinita è Permissive modalità

+0

In realtà non rispondi alla domanda ... –

+2

@MatthiasUrlichs non l'ha fatto? Ha dato modo di modificare attivamente l'applicazione di SELinux in fase di runtime. Il PO ha suggerito che il suo problema era direttamente legato a questo. Posso confermare che lo stato di SELinux cambierà quando 'setenforce' viene eseguito come root in CyanogenMod 11. –

0

Se avete accesso root, eseguire su 0 setenforce 0 per passare alla modalità Permissive:

// Set SELinux to permissive 
private static final String COMMAND = "su 0 setenforce 0"; 
try { 
    Runtime.getRuntime().exec(COMMAND); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Ciao t1mz0r, grazie per il feedback. Questo è quello che ho già fatto e menzionato nella mia richiesta iniziale. user1546570 ha sottolineato, che a volte funziona e talvolta no. Nel frattempo so che non funziona su alcuni dispositivi Samsung. Ho risolto questo problema modificando in modo programmatico le policy in fase di esecuzione e costringendole a ricaricarle, invece di disattivare l'intero SELinux tramite setenforce. Ora che Android 5 è sulle strade, questo potrebbe in generale cambiare - setenforce funziona almeno per i dispositivi Nexus. Saluti e cordiali saluti –

0

È possibile scaricare il nome dell'applicazione selinux mod changer. Non è su Play Store, quindi è possibile scaricarlo da Chrome o da qualsiasi altro browser di tua scelta. L'app richiede solo il permesso di root quindi provalo.

7

È possibile utilizzare supolicy dall'app SuperSU, vedere il collegamento per una descrizione dettagliata di quando e come può essere chiamato.

In breve:

  • Scopri perché qualcosa è bloccato da SELinux controllando i messaggi di controllo, per esempio dmesg | grep "audit"
  • Creare una regola allow ... che consente l'operazione bloccata. Sono simili (identici?) Alle regole 'permetti' nei file SELinux * .te.
  • Eseguire supolicy --live "allow ..." in una shell di root e verificare se l'operazione ha esito positivo. In caso contrario, estendi le tue regole 'permetti'. È possibile specificare più regole "Consenti" in una singola chiamata supolicy.

Nota che supolicy è un'operazione costosa, quindi assicurati di chiamarla solo una volta.

Se non si vuole dipendere dalla SuperSU di Chainfire, si può provare sepolicy-inject. Non l'ho provato da solo.

+1

Ciao e benvenuto. Ti consiglierei di ampliare la tua risposta per essere più utile e attirare più voti. – Wtower

+1

Grazie per il suggerimento. Ho aggiunto una descrizione approssimativa su come usare 'supolicy'. –

+1

Preferisco non fidarmi di root con un binario closed source, quindi non ho SuperSU. Mi piacerebbe vedere che API sta chiamando quell'app. Proverò 'setpolicy-inject' però. – Wyatt8740

1

Modifica build.prop file nella cartella di sistema sulla prima directory, utilizzando una ricerca editor di testo "selinux"
Se vedete qualcosa di simile enable_selinux = 1, modificarlo a 0, se si vuole disabilitare farlo viceversa, le modifiche verranno applicate dopo un riavvio o un avvio.

Nel mio caso hanno disabilitato già, ma era in una riga di commento

# ro.boot.selinux = disable

linea che inizia con # è un commento, che ha vinto' t cambiare nulla. Allo stesso modo è possibile attivare/disattivare account multiutente, aggiornamenti di sistema.

Il produttore del mio dispositivo ha disattivato Aggiornamenti di Sistema.

Problemi correlati