¿Se ha producido algún cambio entre las dos versiones de Lineage que pueda causar este problema?
No tengo ninguna experiencia con nmap
y no puede estar seguro de por qué funcionó con Android N, pero Android siempre ha sido restrictivo en lo que respecta al acceso al socket. He estado enfrentando los mismos problemas al menos desde Marshmallow y en adelante. ping
es el ejemplo común.
No parece que esta versión de LineageOS tenga tampoco groupadd
o usermod
Android's usuarios y permisos La gestión es muy diferente a la de Linux. Bionic libc
no admite muchas de las llamadas sicológicas proporcionadas por el estándar glibc
En particular, en lo que se refiere a NSS . Además, los archivos relacionados /etc/passwd
, /etc/group
, /etc/shadow
y otros no existen en Android como existen en Linux. Por lo tanto, las utilidades estándar de Linux groupadd
y useradd
etc. no pueden utilizarse en Android a menos que se modifique la fuente y el entorno en consecuencia.
¿cómo puedo hacer que nmap vuelva a funcionar?
Si desea utilizar un program
compilado para Linux estándar que necesita capacidades CAP_NET_BIND_SERVICE
, CAP_NET_ADMIN
, CAP_NET_RAW
etc., el programa debe ser ejecutado por un usuario que sea miembro de los grupos de Android aid_inet
, aid_admin
y aid_net_raw
. Aunque el root
usuario tiene aparentemente CAP_NET_*
capacidades, Llamada al sistema de sockets falla si no se añade a estos grupos explícitamente. La mayoría de las veces sólo aid_inet
es suficiente.
Por ejemplo, veamos las capacidades de wpa_supplicant
(proceso responsable de realizar las conexiones wi-fi) en Android:
~$ su -c "getpcaps $(pidof wpa_supplicant)"
Capabilities for `21224': = cap_net_admin,cap_net_raw+ep
Así que, nmap
no funcionará si no se ejecuta con sus capacidades requeridas. Una capacidad es un subconjunto de permisos Root.
Las aplicaciones de terminal suelen ser ya miembros de aid_net
grupo ( android.permission.INTERNET
). Sin embargo, si no es el caso o quieres crear un usuario tipo Linux en Android, sigue adelante.
AÑADIR USUARIO LINUX EN Android
NOTA: El dispositivo debe estar rooteado.
En Linux, capacidades se asignan a un usuario (un usuario es un identificador de proceso de hecho, normalmente un shell) por algún mecanismo de inicio de sesión, PAM
siendo los módulos los más comunes. Pero no hay inicio de sesión de usuario en Android, así que tenemos que replicar eso de alguna manera. Vamos a crear un usuario de Linux, digamos "irfan" en Android.
Lo mejor es utilizar el UID de la aplicación terminal asignado en el momento de la instalación de la aplicación o puede utilizar cualquier UID no utilizado como el 6000.
Modifique o cree los archivos como se indica a continuación:
# /etc/passwd
irfan:x:10129:10129::/sdcard:/system/bin/sh
root:x:0:0::/data/local/tmp:/system/bin/sh
# /etc/group
aid_inet:x:3003:irfan,root
Para iniciar sesión como usuario "irfan" con aid_inet
como grupo secundario, utilice un Conocedor de Linux busybox su binary
que se refiere a /etc/passwd
y /etc/group
:
~$ id
uid=10129(u0_a129) gid=10129(u0_a129) groups=10129(u0_a129),9997(everybody)
~$ su -c 'busybox su - irfan'
~$ busybox id
uid=10129(irfan) gid=10129(irfan) groups=10129(irfan),3003(aid_inet)
Tenga en cuenta el uso de su
dos veces. Primero su
es el que obtienes cuando rooteas tu dispositivo. Es porque su
debe ejecutarse con CAP_SETUID
capacidad. Pero las aplicaciones normales de Android se ejecutan sin ninguna capacidad:
~$ capsh --print | grep Bounding
Bounding set =
La primera su
nos otorga esa capacidad (y todas las demás) y nos evita la necesidad de setuid
en busybox su
binario.
Del mismo modo, puedes añadirte a tantos grupos como quieras, everybody
, sdcard_rw
y así sucesivamente.
FUENTE: