Þú færð Linux dreifingu til að keyra undir chroot í símanum, setur VPN biðlara inn í hana, og skelin tilkynnir að göngin séu tilbúin. Svo ferðu í vafra og umferðin fer út um farsímagögn eins og ekkert hafi gerst. Eða hið gagnstæða: hvert forrit í símanum missir tengingu vegna þess að biðlarinn bætti sjálfgefinni leið í netheimið sem Android notar í raun. Þessi tvö einkenni koma frá sama vanti hlutnum, og hvorugt er villa í VPN biðlaranum.

Skelin segir tengt, forritin eru ósammála

Fyrsta niðurstaðan er algeng. Göng í notendarými sem opnuð eru úr chroot geta klárað handabandið, prentað tölfræðina og flutt umferð sem sama skel framleiðir, á meðan forrit Android halda áfram að nota sjálfgefna net símans. Ekkert grípur þau, því ekkert sagði Android að VPN væri til.

Önnur niðurstaðan er hættulega. Ef chroot deilir netheimi Android, sem er sjálfgefið, getur ferli með næg réttindi bætt við leiðum og TUN viðmóti sem hafa áhrif á allan símann. Þá virka göngin fyrir hvert forrit, þar á meðal þau sem þú ætlaðir ekki að beina, og nettenging símans er nú háð púki án lífsferilsstjórnunar, án tengimerkis og án stefnu um alltaf á.

Hvora niðurstöðuna þú fékkst er hægt að svara með einni skipun. Berðu saman ip route inni í chroot við sömu skipun úr Android skel fyrir utan. Eins úttak þýðir að chroot er í netheimi hýsisins: sérhver netbreyting sem það gerir gildir fyrir allan símann. Ólíkt úttak þýðir að ræsirinn bjó til netheim fyrir það, og göngin þess eru ósýnileg Android vegna uppbyggingarinnar.

Hvað chroot breytti og hvað ekki

ObjectEffect of a chroot
Pathname resolutionChanged: lookups start at the new root
Kernel and driversUnchanged: the phone's kernel, its TUN driver, its limits
Network namespaceUnchanged unless the launcher creates one
Android VPN registrationUnchanged: no app consented, no VPN is selected

Kerfiskallið chroot gerir einn hlut: það breytir möppunni sem notuð er við slóðaupplausn. Man síðan segir skýrt að það sé ekki öryggismörk og segir ekkert um viðmót, leiðir eða VPN stöðu. Allt sem fólk væntir af Linux gámi — einkanetstafla, síað skráarkerfi, takmörk á auðlindum — kemur frá öðrum aðferðum sem ræsirinn kann að hafa notað eða ekki.

Þess vegna svara fullyrðingar um að chroot einangri VPN yfirleitt rangri spurningu. Viðeigandi spurning er í hvaða netheimi ferlið keyrir og í hvaða SELinux léni það er bundið, og hvort tveggja eru eiginleikar þess hvernig það var ræst, ekki orðsins chroot.

TUN þarf þrjá hluti, og tækjanóða er aðeins einn

Hefðbundið göng í notendarými þarf TUN tæki sem það getur opnað, kjarnastuðning við það tæki og leyfi til að stilla viðmótið og leiðirnar. Þetta eru aðskilin skilyrði, og að búa til slóðarnafn undir /dev uppfyllir ekkert þeirra eitt og sér:

ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun

Á Android er TUN stuðningur venjulega saminn inn í kjarnann, því VPN þjónusta kerfisins notar hann, en það þýðir ekki að ferlið þitt megi nota hann. Stilling viðmótsins þarf netstjórnunarhæfileika, og SELinux ákveður hvort ferlið nái tækjanóðunni yfirleitt. Synjun lítur út eins og heimildarvilla án augljósrar orsakar, og svarið er í endurskoðunarrakningunni:

dmesg | grep avc
logcat -d | grep "avc: denied"

Root leysir þetta ekki. SELinux takmarkar ferli undir uid 0 alveg eins og önnur, svo chroot ræst úr root skel getur samt fengið synjun fyrir tæki sem það sér. Að slökkva á framfylgd til að koma gömlum uppsetningaraðila í gang er ákvörðun fyrir allan símann með afleiðingum langt út fyrir göngin, og er ekki lagfæring á úreldu tvíundarforriti.

Hvers vegna forrit Android hunsa göngin þín

Stuðlað líkan Android er VPN forrit sem skráir sig í gegnum VPN þjónustu kerfisins, biður notandann um samþykki einu sinni og fær skráarlýsingu fyrir göngin sín. Kerfið beinir þá umferð inn í þá lýsingu og framfylgir forritasviðinu sem notandinn eða stjórnandinn valdi, þess vegna getur sama aðferðin verið fyrir hvert forrit, hvert snið og sameinuð stillingum um alltaf á og blokkun án VPN. Þróunarhandbók Android um VPN lýsir þessu handabandi, og lykilatriðið er að þetta er skráning, ekki beiningarbragð.

Púki inni í chroot skráir sig aldrei. Enginn samþykkisgluggi, ekkert lyklatákn í stöðustikunni, enginn listi yfir að taka inn eða útiloka fyrir hvert forrit, og engin þátttaka í stefnunni um alltaf á. Þess vegna halda forrit áfram að nota sjálfgefna netið, og göngin flytja aðeins það sem skelin sjálf sendir.

Hin áttin hjálpar ekki heldur. Að þrýsta leiðum inn í netheim hýsisins grípur allt, þar á meðal umferð sem kerfið ætlaði að halda staðbundinni, og gerir það án stjórnunar fyrir hvert forrit og án leiðar fyrir notandann að sjá eða afturkalla. Engin millistilling er þar sem púki í chroot beinir umferð fyrir aðeins eitt forrit.

Tvíundarsamhæfi er sérstakur múr

Jafnvel þegar nethliðin er áhugaverð hefur keyrsluskráin sín eigin skilyrði: örgjörvabyggingu, hlaðarann, C safnið og kjarnahæfileikana sem hún væntir. Android notar bionic í stað glibc, og gömul tvíundarforrit byggt fyrir skrifborðsdreifingu getur þurft söfn sem ekki eru lengur í tækinu.

Að tengja safnskráarnafn við nýrri útgáfu skapar ekki ABI samhæfi, og geymt dulritunarsafn úr tíu ára gamalli pakkningu er ekki viðhaldið íhlutur. Ef áætlunin hvílir á því er áætlunin að keyra óviðhaldinn kóða með netréttindum í síma.

Sannaðu það í samhengi Android og rýstu svo til

Prófaðu það sem þér er raunverulega mikilvægt, frá þeirri hlið sem skiptir máli: opnaðu tiltekið forrit, náðu tilteknum einkastað, staðfestu hvaða leysir svaraði, rofaðu svo göngin og staðfestu skráða hegðun. Niðurstaða úr skjáhermi inni í chroot er sönnun um keyrslusamhengi þess skjáhermis og ekkert meira.

Ef þú breyttir leiðum hýsisins í tilrauninni skaltu setja þær aftur og skrá hvað þú breyttir. Athugaðu svo hvort síminn hafi VPN sem er alltaf á, því gömul tilraun sem skildi eftir reglu getur litist út eins og bilun í kerfinu mánuðum síðar.

Fyrir raunverulega þörf fyrir fjartengingu skaltu nota studdan biðlara þjónustunnar eða samþykkta hönnun gáttar. Spurningin sem er þess virði að spyrja er ekki hvort hægt sé að koma root uppsetningaraðila í gang, heldur hvort studd útfærsla flytji forritin sem þú þarft yfir mörkin sem þú ætlaðir, án þess að skilja eftir réttindabreytingar án eiganda í tækinu.

Tengdir greinar