LXD e ekspozon një pajisje karakteresh të strehuesit te një konteiner duke shtuar një nyje pajisjeje, jo duke i mësuar mysafirit të krijojë një të tillë. Nëse konteineri nuk ka /dev/net/tun, pajisja mund të jetë në strehues dhe mysafiri prapëseprapë nuk mund ta hapë. Zëri unix-char është gjysma e kësaj rruge në anën e menaxherit, dhe është qëllimisht më i ngushtë se një konteiner i privilegjuar. Prandaj nyja e strehuesit dhe nyja e konteinerit meritojnë kontrolla të veçanta.

Mekanizmi është mjaft i shkurtër për t'u mbajtur në sy: LXD zgjidh një rrugë të strehuesit, krijon një nyje përkatëse brenda instancës dhe shton pajisjen në cgroup-in e pajisjeve të konteinerit. Më pas procesi i mysafirit ka nevojë për lejen dhe aftësinë e vet për ta përdorur nyjen për çdo gjë.

Çfarë ndryshon në të vërtetë zëri unix-char

Një pajisje unix-char i thotë LXD-së të ekspozojë një pajisje karakteresh të strehuesit në një rrugë të zgjedhur brenda konteinerit. Zëri ka tri pjesë të rëndësishme: etiketën e pajisjes që përdor menaxheri, rrugën source në strehues dhe path që sheh mysafiri. Vetëm dy të fundit përshkruajnë vetë pajisjen. Një gabim shtypi në cilën do prej tyre prodhon një nyje në një vend që klienti nuk e hap kurrë.

Në strehues pajisja është zakonisht /dev/net/tun. Brenda konteinerit mund të mbani të njëjtën rrugë ose të zgjidhni një tjetër, por rruga duhet të përputhet me atë që pret klienti VPN. Mbajtja e /dev/net/tun shmang një problem të dytë konfigurimi, sepse shumica e klientëve e hapin atë rrugë pa pyetur.

Menaxheri e zbaton zërin kur instanca niset ose kur pajisja lidhet në nxehtësi. Nuk kopjon një drejtues në mysafir dhe nuk krijon një ndërfaqe tuneli. E bën nyjen të dukshme dhe lejon aksesin përmes grupit kontrollues të pajisjeve të konteinerit.

Deklaroni pajisjen në instancë, jo brenda mysafirit

Shtoni zërin nga konteksti i administrimit të LXD, duke emërtuar instancën dhe një etiketë që do ta njihni më vonë. Për një konteiner të quajtur vpnbox komanda është:

lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox

Etiketa tun është lokale për konfigurimin e instancës. Nuk është emër ndërfaqeje dhe nuk duhet të përputhet me asgjë në mysafir. Nëse një profil tashmë ofron të njëjtën pajisje, shtimi i një zëri të dytë krijon konflikt dhe jo tepricë, prandaj së pari shqyrtoni konfigurimin efektiv.

Redaktimi i skedarëve brenda konteinerit është shtresa e gabuar. Një mknod në një skript nisjeje mund të duket se punon në një konteiner të privilegjuar, pastaj zhduket në rikrijim ose dështon në një më pak të privilegjuar. Menaxheri zotëron grupin e pajisjeve të instancës; lëreni të zotërojë edhe nyjen.

Përputhni pronësinë dhe modalitetin me procesin e mysafirit

Zëri unix-char mund të vendosë uid, gid dhe mode për nyjen brenda konteinerit. Përdorini për t'u përputhur me llogarinë që ekzekuton klientin VPN, në vend që të hapni pajisjen për çdo përdorues ose ta kaloni konteinerin në modalitet të privilegjuar.

Dukshmëria nuk është e njëjtë me lejen. Një nyje në pronësi të root me modalitet 600 është e dukshme për shërbimin që ekzekutohet si përdorues pa privilegje dhe prapëseprapë nuk mund të hapet prej tij. Kontrolloni së pari llogarinë e mysafirit, pastaj caktoni pronësinë për atë llogari dhe mbani modalitetin jo më të gjerë sesa i nevojitet klientit.

Procesi ka nevojë edhe për aftësinë për të konfiguruar një ndërfaqe tuneli, zakonisht CAP_NET_ADMIN në hapësirën e emrave të rrjetit të konteinerit. Kalimi i pajisjes nuk e jep atë aftësi, dhe dhënia e aftësisë nuk e siguron pajisjen; janë kërkesa të pavarura.

Dijeni se çfarë nuk jep zëri

Një nyje e dukshme nuk është VPN që punon. Paketa e klientit duhet ende instaluar, profili duhet ende të jetë i vlefshëm dhe shërbimi duhet ende të niset. Vërtetimi, rrugët dhe DNS mbeten puna e klientit, dhe një dështim atje nuk është provë që zëri i pajisjes është i gabuar.

systemd mund të shtojë një kufizim tjetër. Një njësi me DeviceAllow ose një politikë pajisjesh të forcëruar mund të refuzojë aksesin në një nyje që ka siguruar menaxheri i konteinerëve. Kontrolloni politikën e pajisjeve të njësisë kur nyja ekziston, por shërbimi raporton një gabim leje, dhe ndryshoni atë politikë në vend që të zgjeroni konteinerin.

Lidhja e nxehtë është opsionale dhe e qartë. Një zë me required=false kërkon një rrugë burimi dhe mund të shfaqet ose të zhduket ndërsa ndryshon pajisja e strehuesit. Ai cikël jete i përshtatet harduerit që vjen dhe shkon; për një pajisje TUN që VPN-ja e kërkon në nisje, një zë opsional mund ta lërë shërbimin të niset përpara se të ekzistojë parakushti i tij.

Verifikoni dukshmërinë, hapjen dhe ndërfaqen në atë rend

Së pari konfirmoni nyjen brenda konteinerit të synuar. Rruga, numrat kryesor dhe dytësor dhe pronësia duhet të përputhen me pajisjen e strehuesit dhe me zërin që shtuat. Një nyje që mungon do të thotë që menaxheri nuk e zbatoi zërin, ose e zbatoi në një instancë tjetër.

lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'

Më pas konfirmoni se llogaria e shërbimit mund ta hapë. Një test i shkurtër si ajo llogari ndan një problem pronësie nga një problem shërbimi. Së fundi, nisni klientin dhe konfirmoni se shfaqet një ndërfaqe tuneli; vetëm ai hap i tretë provon të gjithë rrugën, sepse dy të parët mund të kalojnë ndërsa profili ose aftësia e klientit janë ende të gabuara.

Regjistroni instancën, etiketën e pajisjes, burimin në strehues, rrugën në mysafir dhe llogarinë pronare kur ndryshimi miratohet. Ato pesë vlera janë ajo që një rikrijim, migrim ose ndryshim profili i mëvonshëm duhet të ruajë, dhe janë shumë më të lehta për t'u krahasuar sesa një gabim leje pa kontekst.

Artikuj të ngjashëm