Az LXD konténer nem nyitja meg a /dev/net/tun fájlt? Ellenőrizze az unix-char bejegyzést
Az LXD-nek át kell adnia a gazdagép TUN eszközét a konténernek, mielőtt egy VPN kliens használhatja. Nézze meg, mit ad hozzá az unix-char, mit nem, és hogyan ellenőrizhető.
Az LXD eszközcsomópont hozzáadásával teszi elérhetővé a gazdagép egyik karakteres eszközét a konténer számára, nem pedig a vendég megtanításával, hogy létrehozzon egyet. Ha a konténerben nincs /dev/net/tun, az eszköz lehet a gazdagépen, és a vendég mégis képtelen lehet megnyitni. Az unix-char bejegyzés ennek az útnak a kezelői fele, és szándékosan szűkebb egy kiemelt jogosultságú konténernél. Ezért a gazdagép csomópontja és a konténer csomópontja külön ellenőrzést érdemel.
A mechanizmus elég rövid ahhoz, hogy szem előtt tartsuk: az LXD felold egy gazdagép-útvonalat, létrehoz egy megfelelő csomópontot a példányon belül, és hozzáadja az eszközt a konténer eszköz-cgroupjához. Utána a vendégfolyamatnak saját engedélyre és képességre van szüksége, hogy a csomópontot bármire használja.
Mit változtat meg valójában az unix-char bejegyzés
Az unix-char eszköz arra utasítja az LXD-t, hogy a gazdagép egyik karakteres eszközét a konténeren belül egy kiválasztott útvonalon tegye elérhetővé. A bejegyzésnek három fontos része van: a kezelő által használt eszközcímke, a gazdagépen lévő source útvonal és a path, amelyet a vendég lát. Csak az utóbbi kettő írja le magát az eszközt. Bármelyikben elkövetett elírás olyan helyen hoz létre csomópontot, amelyet a kliens soha nem nyit meg.
A gazdagépen az eszköz általában /dev/net/tun. A konténeren belül megtarthatja ugyanazt az útvonalat, vagy választhat másikat, de az útvonalnak meg kell felelnie annak, amit a VPN kliens vár. A /dev/net/tun megtartása elkerül egy második konfigurációs problémát, mert a legtöbb kliens kérdezés nélkül nyitja meg ezt az útvonalat.
A kezelő a bejegyzést a példány indulásakor vagy az eszköz meleg csatlakoztatásakor alkalmazza. Nem másol illesztőprogramot a vendégbe, és nem hoz létre alagút-interfészt. Láthatóvá teszi a csomópontot, és a konténer eszköz-vezérlőcsoportján keresztül engedélyezi a hozzáférést.
A példányon nyilatkozzon az eszközről, ne a vendégen belül
Adja hozzá a bejegyzést az LXD felügyeleti környezetéből, megnevezve a példányt és egy később felismerhető címkét. Egy vpnbox nevű konténer esetében a parancs:
lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox
A tun címke a példány konfigurációjára érvényes. Nem interfésznév, és nem kell semmihez illeszkednie a vendégben. Ha egy profil már biztosítja ugyanazt az eszközt, egy második bejegyzés ütközést hoz létre a redundancia helyett, ezért először vizsgálja meg a tényleges konfigurációt.
A fájlok szerkesztése a konténeren belül rossz réteg. Az indítószkriptben lévő mknod működni látszhat egy kiemelt jogosultságú konténeren, majd eltűnhet az újralétrehozásnál, vagy elbukhat egy kevésbé kiemelten. A kezelő birtokolja a példány eszközkészletét; hagyja, hogy a csomópontot is birtokolja.
Igazítsa a tulajdonjogot és a módot a vendégfolyamathoz
Az unix-char bejegyzés beállíthatja a uid, gid és mode értékét a konténeren belüli csomóponthoz. Ezekkel illeszkedjen a VPN klienst futtató fiókhoz, ahelyett hogy minden felhasználónak megnyitná az eszközt, vagy kiemelt módba kapcsolná a konténert.
A láthatóság nem ugyanaz, mint az engedély. A root tulajdonában lévő, 600 módú csomópont látható a nem kiemelt felhasználóként futó szolgáltatás számára, és mégsem nyitható meg általa. Először a vendégfiókot ellenőrizze, aztán állítsa a tulajdonjogot arra a fiókra, és a módot ne tartsa szélesebben, mint amire a kliensnek szüksége van.
A folyamatnak az alagút-interfész konfigurálásának képességére is szüksége van, jellemzően CAP_NET_ADMIN a konténer hálózati névterében. Az eszköz átadása nem adja meg ezt a képességet, és a képesség megadása nem biztosítja az eszközt; ezek független követelmények.
Tudja, mit nem ad meg a bejegyzés
A látható csomópont nem működő VPN. A klienscsomagot még telepíteni kell, a profilnak még érvényesnek kell lennie, és a szolgáltatásnak még el kell indulnia. A hitelesítés, az útvonalak és a DNS a kliens dolga marad, és az ottani hiba nem bizonyítja, hogy az eszközbejegyzés hibás.
A systemd további korlátozást adhat. Egy DeviceAllow beállítással vagy megerősített eszközszabályzattal rendelkező egység megtagadhatja a hozzáférést egy olyan csomóponthoz, amelyet a konténerkezelő biztosított. Ellenőrizze az egység eszközszabályzatát, amikor a csomópont létezik, de a szolgáltatás engedélyhibát jelez, és változtassa meg azt a szabályzatot ahelyett, hogy kiszélesítené a konténert.
A meleg csatlakoztatás opcionális és kifejezett. A required=false bejegyzéshez forrásútvonal kell, és megjelenhet vagy eltűnhet, ahogy a gazdagép eszköze változik. Ez az életciklus a jövő-menő hardverhez illik; egy TUN eszközhöz, amelyre a VPNnek indításkor szüksége van, az opcionális bejegyzés hagyhatja, hogy a szolgáltatás az előfeltétel létezése előtt induljon el.
Ellenőrizze a láthatóságot, a megnyitást és az interfészt ebben a sorrendben
Először igazolja a csomópontot a szándékolt konténeren belül. Az útvonalnak, a fő- és mellékszámnak, valamint a tulajdonjognak meg kell felelnie a gazdagép eszközének és a hozzáadott bejegyzésnek. A hiányzó csomópont azt jelenti, hogy a kezelő nem alkalmazta a bejegyzést, vagy egy másik példányra alkalmazta.
lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'
Ezután igazolja, hogy a szolgáltatásfiók meg tudja nyitni. Egy rövid teszt azzal a fiókkal elválasztja a tulajdonjogi problémát a szolgáltatási problémától. Végül indítsa el a klienst, és igazolja, hogy megjelenik egy alagút-interfész; csak ez a harmadik lépés bizonyítja a teljes utat, mert az első kettő átmehet, miközben a kliensprofil vagy a képesség még hibás.
Jegyezze fel a példányt, az eszközcímkét, a gazdagép forrását, a vendég útvonalát és a tulajdonos fiókot, amikor a módosítást jóváhagyják. Ez az öt érték az, amit egy későbbi újralétrehozásnak, áttelepítésnek vagy profilváltásnak meg kell őriznie, és sokkal könnyebb összevetni őket, mint egy kontextus nélküli engedélyhibát.