VPN-taustaohjelma tarvitsee etuoikeutettuja verkkotoimintoja, vaikka tavalliset sovellukset avaavat lähteviä pistokkeita ilman mitään etuoikeuksia. Juuri tästä aukosta useimmat kyvykkyysvirheet alkavat: joku näkee oikeusvirheen, antaa koko joukon, ja palvelu toimii syistä, joita kukaan ei osaa myöhemmin selittää. Alla oleva läpikäynti alkaa epäonnistuneesta toiminnosta, yhdistää sen yhteen valtuuteen ja tarkistaa sitten ympäristön, jossa prosessi todella toimii. Rajoittamattomana rootina ajaminen on joillekin käyttöönotoille kelvollinen vastaus, mutta sen pitäisi olla päätös eikä oletus.

Aloita toiminnosta, joka epäonnistui

Lue virhe ennen kuin luet opasta. „Toiminto ei ole sallittu“ liitännän muutoksessa, kieltäytyminen laitesolmun avaamisesta ja sidonnan epäonnistuminen matalalla portilla ovat kolme eri ongelmaa kolmella eri oikeudella. Jos prosessi käynnistyy ja epäonnistuu vasta ensimmäisessä reittimuutoksessa, se kertoo myös, että liitännän luonti on jo onnistunut, mikä kaventaa vastausta huomattavasti.

Toista virhe palvelun ollessa pysäytettynä ja käynnistä se sitten etualalla saman käyttäjän alla, jos toteutus sallii sen. Näkyvä virhe on parempi kuin logirivi, jota täytyy arvailla, ja se tekee eron kyvykkyysongelman ja SELinuxin tai AppArmorin hylkäyksen välillä selväksi.

Yhdistä jokainen toiminto yhteen valtuuteen

Taulukko on lähtökartta, ei korvike toteutuksen dokumentaatiolle:

OperationUsual authorityWatch for
Create or configure tun/tapCAP_NET_ADMIN in the relevant namespaceCreating the device and opening it are separate steps
Add routes, rules, firewall entriesCAP_NET_ADMINSame capability, different namespace than you think
Open /dev/net/tunDevice permissions, not a capabilityGroup membership or a udev rule may be enough
Raw socketsCAP_NET_RAWNeeded by some user-space tunnel implementations
Bind a port below 1024CAP_NET_BIND_SERVICEIrrelevant for most modern tunnel ports

Taulukon kaksi riviä ovat ne, jotka ihmiset sekoittavat. /dev/net/tun avaaminen on tiedosto-oikeuskysymys; pyyntö ytimelle määrittää se, minkä avasit, on kyvykkyyskysymys. CAP_NET_ADMINin antaminen ei korjaa laitesolmua, jota palvelusi käyttäjä ei voi lukea, eikä solmun korjaaminen anna sinulle reittivaltuutta. Tarkista molemmat ennen kuin muutat kumpaakaan.

Ytimen WireGuardilla ja käyttäjäavaruuden tunneliohjelmilla ei myöskään ole samat vaatimukset. Ydinmoduulin polku määrittää olemassa olevan liitännän netlinkin kautta, kun taas käyttäjäavaruuden toteutus voi tarvita myös laitteen ja joillekin kuljetuksille raakoja pistokkeita.

Lue ympäristö: palvelu, kontti vai kuori

Kyvykkyys isäntäkoneen verkkonimiavaruudessa voi vaikuttaa paljon enempään kuin sama toiminto tarkoituksella eristetyssä pinossa. Konttien ajonaikainen ympäristö alkaa yleensä pienennetyllä rajoitusjoukolla; NET_ADMIN:n lisääminen konttiin, joka jakaa isännän verkon, on paljon suurempi oikeus kuin sen lisääminen konttiin, jolla on oma verkkonimiavaruus eikä isännän liitoksia.

Systemd-yksiköissä lue, mitä todella sovelletaan, ei sitä, mitä yksikkötiedosto näyttää sanovan: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities raportoi tehokkaat arvot, jotka unohtamasi drop-in on saattanut asettaa. Kysy tehokasta arvoa, älä koskaan aiottua. Ambient-kyvykkyydet ovat tärkeitä, koska ei-root-palvelu menettää kyvykkyydet exec:n yli ilman niitä.

Käytä paketin tai imagen tuettua määritystä lähtökohtana. Älä lisää raakojen pistokkeiden oikeuksia tai etuoikeutettua tilaa siksi, että toinen opas luetteli ne toiselle työkalulle; se päättely ei siirrä mitään ja maksaa sinulle eristyksen, josta maksoit. Kun olet epävarma, älä myönnä mitään ja lue toteutuksen huomautukset täsmälleen siitä toiminnosta, jonka tarvitset.

Katso, mitä tapahtuu kun etuoikeudet laskevat

Monet taustaohjelmat käynnistyvät etuoikeutettuina, määrittävät liitännän, siirtyvät sitten ei-etuoikeutettuun käyttäjään ja pitävät tunnelin. Siitä pisteestä prosessi ei enää voi lisätä reittiä, kirjoittaa palomuurisääntöä uudelleen tai avata uutta etuoikeutettua laitetta, mikä on kunnossa kunnes uudelleenyhdistäminen tarvitsee juuri sitä. Myöhemmät tiedostoluvut ja koukkujen suoritus voivat epäonnistua samasta syystä.

Testaa koko elinkaari eikä ensimmäistä sekuntia: käynnistys, uusinta tai uudelleenyhdistäminen ja siivous pysäytettäessä. Ensimmäinen onnistunut liitännän luonti ei todista, että jokainen myöhempi etuoikeutettu toiminto toimii edelleen, ja vika ilmenee yleensä tunteja myöhemmin tuotannossa.

Toteutukset, jotka pitävät tunnelin auki käyttäjänvaihdon yli, yhdistävät sen yleensä vaihtoehtoihin säilyttää tunneli ja avaimet. Systemdin puolella vastaava kysymys on, kestääkö yksikön kyvykkyysjoukko määrittämäsi käyttäjänvaihdon.

Kirjaa myönnetty oikeus ja sen syy

Kirjoita ylös täsmällinen oikeus, toiminto, jonka se mahdollistaa, ja virhe, jonka se korjasi. Yksi rivi käyttöönoton muistiinpanoissa — „CAP_NET_ADMIN yksikön verkkonimiavaruudessa, tarpeen reittimuutoksille uudelleenyhdistämisen jälkeen“ — riittää estämään seuraavaa henkilöä laajentamasta oikeutta uudelleen.

Lue sitten tehokas joukko uudelleen jokaisen päivityksen jälkeen. Valmistajat lisäävät ominaisuuksia, imaget muuttavat oletuksia, ja viime vuonna tarpeeton kyvykkyys voi muuttua kantavaksi kenenkään huomaamatta.

Aiheeseen liittyvät artikkelit