4 votos

¿Cómo puedo establecer la política correcta de SELinux / SEAndroid para una aplicación?

Estoy utilizando el programa gratuito SSHelper servidor SSH en mi teléfono para obtener acceso SSH. Sin embargo, la aplicación no se comporta correctamente bajo SELinux cuando se ajusta a Enforcing pero parece estar bien cuando se usa Permissive modo. Esto no es sorprendente ya que fue desarrollado bajo CyanogenMod , lo que hace que el autor no esté al tanto de estos problemas para los AOS de stock de SELinux posteriores.

El problema se produce cuando la aplicación intenta asignar un /dev/pts/N pseudo-terminal, durante la conexión SSH. Esto falla y el shell resultante es esencialmente inútil para el desarrollo. Después de haber pasado un tiempo considerable tratando de rastrear este problema como se documenta AQUÍ . Donde encontré los siguientes "errores" en el /data/misc/audit/audit.log archivo:

audit(1401291488.480:203): avc:  denied  { setattr } for  pid=11441 comm="sshelper_sshd" name="0" dev="devpts" ino=3 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:untrusted_app_devpts:s0 tclass=chr_file VE=SEPF_GT-I9195_4.2.2_0022_M
audit(1401291488.480:203): arch=40000028 syscall=15 per=840000 success=no exit=-13 a0=beffd438 a1=190 a2=27da a3=c0000000 items=1 ppid=8499 pid=11441 auid=4294967295 uid=10202 gid=10202 euid=10202 suid=10202 fsuid=10202 egid=10202 sgid=10202 fsgid=10202 tty=(none) ses=4294967295 comm="sshelper_sshd" exe="/data/data/com.arachnoid.sshelper/bin/sshelper_sshd" subj=u:r:untrusted_app:s0 key=(null)
audit(1401291488.480:203):  cwd="/"
audit(1401291488.480:203): item=0 name="/dev/pts/0" inode=3 dev=00:09 mode=020600 ouid=10202 ogid=10202 rdev=88:00 obj=u:object_r:untrusted_app_devpts:s0

Sin embargo, ya que no tengo experiencia previa en SELinux y sus misteriosos mecanismos de protección, y realmente podría usar algo de ayuda. Ni siquiera sé si éste es el verdadero problema, sólo lo supongo. Comprobando los permisos del archivo anterior da:

# ls -alZ /data/data/com.arachnoid.sshelper/bin/sshelper_sshd
-rwxr-xr-x u0_a202  u0_a202           u:object_r:app_data_file:s0 sshelper_sshd

Pero este context no parece corresponder en absoluto a lo mostrado en el Registro .

¿Cómo puedo arreglar estos permisos para jugar bien con SELinux cuando en Aplicación de ¿modo?

(Además, ¿qué herramientas y archivos están disponibles en Android para solucionar esto?)

2voto

Priyank Bolia Puntos 3825

Creo que el problema podría ser el "dominio no confinado" por defecto con el que se ejecuta el binario cuando no se especifica ninguna política.

Un intento que yo haría sería mover el sshelper_sshd (¿creo que es el servidor sshd?) en algún lugar del /system partición ( /system/sbin/ ?)

Creo que el mejor y más actualizado documento a leer para tratar la implementación de SELinux en Android (SEAndroid) es Cómo hacer una SU .

Aquí un extracto del capítulo 5.4.4. Android 4.4.3

Un buen ejemplo de que el dominio no confinado no es todopoderoso, es la ejecución de archivos desde /data. A partir de Android 4.4.3, esto ya no será posible desde el dominio no confinado (ver #74082 y #78801).

La práctica establecida de incluir binarios y scripts en tu APK, extrayéndolos a /data/data/[paquete]/files/ o colocándolos en /data/data/[paquete]/lib/ y ejecutándolos desde allí a través de una llamada su ya no funcionará out-of-the-box. Aunque hay otras soluciones posibles (como copiar y ejecutar desde rootfs), una solución es cambiar los contextos a un contexto que no esté en el dominio no confinado (como u:r:untrusted_app:s0, el contexto en el que probablemente se ejecute el resto de su aplicación). Sin embargo, tendrás que hacer pruebas exhaustivas para ver si todas las llamadas que quieres hacer siguen ejecutándose en el contexto que elijas, y puede que tengas que probar algunos diferentes para conseguir las capacidades que quieres.

Tenga en cuenta que la ejecución de archivos en /data seguirá funcionando como se espera de su aplicación si no está tratando de ejecutarla como Root.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X