Android Chroot-Netzwerkprobleme

Android Chroot-Netzwerkprobleme

Ich versuche, das Ubuntu 16.04-Image, das Nvidia für die Entwicklung auf dem Shield hat, zu chrooten. Ich habe es auf einer SD-Karte platziert und es unter /mnt/chroots gemountet. Ich kann apt-get update nicht ohne Fehler zum Laufen bringen, Ping schlägt auch fehl. Hilfe wäre willkommen.

cd rootfs
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -o bind /dev/pts dev/pts/
chroot . /bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH

Außerdem habe ich Root zu den Gruppen hinzugefügt:

groupadd -g 3001 aid_net_bt_admin
groupadd -g 3002 aid_net_bt
groupadd -g 3003 aid_inet
groupadd -g 3004 aid_inet_raw
groupadd -g 3005 aid_inet_admin

gpasswd -a root aid_net_bt_admin
gpasswd -a root aid_net_bt
gpasswd -a root aid_inet
gpasswd -a root aid_inet_raw
gpasswd -a root aid_inet_admin

/etc/resolv.conf
nameserver 8.8.8.8

mit /etc/init.d/networking starten

root@localhost:/# apt-get update
Err:1 http://ports.ubuntu.com/ubuntu-ports xenial InRelease
Temporary failure resolving 'ports.ubuntu.com'
Err:2 http://ports.ubuntu.com/ubuntu-ports xenial-updates InRelease
Temporary failure resolving 'ports.ubuntu.com'
Err:3 http://ports.ubuntu.com/ubuntu-ports xenial-security InRelease
Temporary failure resolving 'ports.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...nial/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...ates/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Failed to fetch http://ports.ubuntu.com/ubuntu-ports...rity/InRelease Temporary failure resolving 'ports.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

Antwort1

Sie haben hier 2 verschiedene Probleme

  • apt löst DNS nicht auf
  • Ping funktioniert nicht

-


APT LÖST DNS NICHT AUF:

Das Problem ist, dass APT _apt als unseren nicht privilegierten Benutzer verwendet. Unter Android mit paranoidem Netzwerk können nur Benutzer in der Gruppe 3003 aid_inet oder 3004 aid_inet_raw Netzwerk-Sockets öffnen. Bei der Installation von apt wird der Benutzer _apt erstellt.

    # add unprivileged user for the apt methods
     adduser --force-badname --system --home /nonexistent  \
       --no-create-home --quiet _apt || true

Der Benutzer sieht in /etc/passwd folgendermaßen aus

    root@localhost:~
    # grep -E "_apt" /etc/passwd
    _apt:x:103:65534::/nonexistent:/bin/false

Das Passwd-Format ist

Benutzername: Verschlüsseltes Passwort: Benutzer-ID-Nummer (UID): Gruppen-ID-Nummer des Benutzers (GID): Vollständiger Name des Benutzers (GECOS): Benutzer-Home-Verzeichnis: Login-Shell

Beim Betrachten des _apt-Benutzers ist die GID auf 65534 eingestellt, was bedeutet, dass keine Gruppe vorhanden ist. Auf normalen Linux-Systemen ist das in Ordnung. Auf Android kann diese GID niemals Netzwerkverbindungen herstellen. Sie müssen die GID auf 3003 ändern.

# usermod -g 3003 _apt wird GID ändern

    root@localhost:~
    # grep -E "_apt" /etc/passwd
    _apt:x:103:3003::/nonexistent:/bin/false

Jetzt funktioniert APT auf Android-Chroot

PING FUNKTIONIERT NICHT


Mir ist aufgefallen, dass ich beim Chrooten mit diesem Befehlsbeispiel

# chroot /linux /bin/bash -l

In Android werden Gruppen für Apps verwendet, gewissermaßen. Root-Aufrufe von Bash sind also nur in der Root-Gruppe möglich. Dies können Sie überprüfen, indem Sie

    # groups
     root

Gruppen, die ohne Benutzernamen ausgeführt werden, geben aktuelle Prozessgruppen aus

Versuchen Sie nun Folgendes

# su - root

Der Befehl su bedeutet Benutzer wechseln

    # groups
    root sdcard-rw aid_bt aid_bt-net aid_inet aid_net-raw aid_net_admin

Jetzt funktioniert Ping

Ich benutze jetzt

# chroot /linux /bin/su - root

die sich als Root von Linux anmelden, nicht als Root von Android

verwandte Informationen