Mi teléfono es un Galaxy S3, no rooteado . Tengo instalados "ES File Explorer" y "Terminal Emulator".
Descargué una compilación de Android de 'wget', con la intención de ejecutarla desde la aplicación Terminal Emulator. El archivo existe actualmente /storage/sdcard0/Download
(que es una partición interna, no una tarjeta SD física) como:
-rw-rw-r-- root sdcard_rw 241974 2016-03-11 wget
./wget
da Permiso denegado. chmod o+x wget
da "modo malo"; esto aparentemente se debe a que Android chmod
solo acepta dígitos octales; chmod 665 wget
da "Operación no permitida". Puedo copiar el archivo con "cp", por lo que se puede escribir en el sistema de archivos.
Otras preguntas y respuestas aquí brindan varias razones posibles para chmod
fallar en Android. Una son las tarjetas SD formateadas con FAT que no admiten bits de permiso; pero como digo esto no es en realidad una tarjeta SD. Otro es el sistema de archivos que se monta con "noexec". Mi conocimiento de Android/Linux es demasiado escaso para verificar tales cosas.
¿Android me impide ejecutar wget por diseño? ¿Hay alguna manera de ejecutarlo sin rootear mi teléfono?
Sí, esto es por diseño. No puede ejecutar archivos binarios desde la tarjeta SD sin privilegios de sistema o superusuario (y volver a montarlos sin la noexec
opción) porque, de lo contrario, las aplicaciones podrían simplemente descargar y ejecutar código malicioso a voluntad. En versiones anteriores de Android, la tarjeta SD tampoco tenía permisos emulados, por lo chmod
que, naturalmente, fallaría.
Algunos dispositivos/versiones anteriores de Android pueden permitir la ejecución desde /data/local/tmp/
, por lo que podría intentar colocarlo allí. De lo contrario, probablemente necesitará root.
/local
nada, o al menos no puedo verlo. Creo que la estructura de los sistemas de archivos UN*X seguirá siendo un misterio para mí durante mucho tiempo.Android, al igual que Linux, impide que cualquier usuario, excepto root, cambie los bits de permiso de cualquier archivo que no sea propiedad de dicho usuario. Dicho esto, chmod no es efectivo, a menos que tenga privilegios de root.
Por cierto, incluso si tuviera tales privilegios, no habría podido cambiar los permisos, siempre que la ruta de destino sea /storage/sdcard0 o /storage/emulated/0 . Esto depende de una política de seguridad, que se implementa en la forma del sistema de archivos FUSE , y se puede eludir moviéndose a /data/media/0 o /data/media/ emulated/0 y modificando el archivo desde esta posición. Tenga en cuenta que este procedimiento le permitirá ejecutar un script solo si lo inicia desde una de las ubicaciones mencionadas anteriormente.
Por último, debe tenerse en cuenta que el puerto de Android de chmod no admite la edición simbólica de las banderas ( +rwx
y así sucesivamente), por lo que se verá obligado a editarlas a través de sus valores octales correspondientes. También necesitará privilegios de root para poder acceder a /data/media . Intentar acceder cd
a dicho directorio mediante el uso de privilegios de usuario da como resultado un error de Permiso denegado .
cp
en Terminal Emulator, la copia también es propiedad de root. Puedo borrar la copia. Pero el shell de Terminal Emulator no es un shell raíz. Hay mucho sobre esto que me confunde. Pero esa es otra pregunta...chmod 000
).chmod 775 wget
(y no 665)root
(y el grupo sdcard_rw
, como lo indica tu ls -l
), por lo que solo root
puedes cambiar los permisos. Como no es root (puede verificar con id
el comando, pero como dice que no tiene un dispositivo rooteado, por lo que no puede usarlo su
para convertirse en root), no puede cambiar sus permisos./storage/sdcard0/Download
sea FAT, que no lo admite (puede verificar el tipo de sistema de archivos con cat /proc/mounts
)Habiendo dicho todo eso, si el archivo fuera un script de shell, podría ejecutarlo incluso con el x
modo faltante con sh /storage/sdcard0/Download/script
.
Pero si es binario ELF (como es el caso con su wget
), probablemente no tenga suerte en Android (en el sistema GNU/Linux de escritorio, puede ejecutar binarios ELF indirectamente a través del enlazador dinámico /lib64/ld-linux-x86-64.so.2 /mnt/Download/wget
, pero no creo que Android permita lo mismo con su /system/bin/linker
- aunque podría estar equivocado en eso)
Aarón Gillion
sh
comando antes de invocar su script. Consulte aquí: Permisos de secuencias de comandos de Shell para entusiastas de Androidusuario2284570
Chungzuwalla
sh
pero como wget es un binario, solo da un error de sintaxis. Parece que lo que @MatijaNalis escribió a continuación sobre esto es correcto.TJJ