Usluga se pokreće, klijent se pridružuje i ruta se nikada ne pojavljuje na strani poslužitelja. Ili daemon odbija pokrenuti se i navodi naredbu koju nije mogao izvršiti. Oba ishoda slijede iste tri linije, koje se obično kopiraju zajedno iz vodiča za očvršćivanje: prijelaz na neprivilegirani račun, napuštanje grupe i promjena korijena datotečnog sustava. Samo jedna od tri skriva datoteke, i samo jedna od njih uklanja ovlast za promjenu tablice usmjeravanja. Njihovo razdvajanje način je da naučite koju liniju zapravo želite.

Što zatvor uklanja, a daemonu još treba

Promjena korijena događa se nakon pokretanja, pa daemon zadržava sve što je već otvorio i gubi sve što bi otvorio kasnije. Svaki pomoćnik koji veza pokrene nakon te točke mora postojati unutar novog korijena, zajedno s dijeljenim bibliotekama koje učitava. Zatvor sastavljen od konfiguracijske datoteke i certifikata nema ni jedno ni drugo.

Prijelaz na neprivilegirani račun zasebno je ograničenje. Proces koji se odrekao roota možda ne može mijenjati rute ili podići sučelje čak i kad je binarna datoteka odmah tu, pa se dva kvara moraju dijagnosticirati odvojeno.

Tri uvjeta odlučuju koja vam je popravka potrebna

Prvi je uvjet kako vaša gradnja instalira rute. Novija OpenVPN izdanja konfiguriraju sučelje i tablicu usmjeravanja unutar procesa, dok se stariji paketi i vlastite postavke oslanjaju na vanjske alate ili na up i down skripte. Ako zapis navodi naredbu, umiješan je vanjski alat i zatvor ga skriva. Ako zapis umjesto toga pokazuje pogrešku dopuštenja, problem je račun.

Drugi je održavanje. Zatvor s kopiranim binarnim datotekama mora se osvježiti kad god se paket koji ih pruža nadogradi, inače prva nadogradnja ostavlja slomljen tunel za sobom. Treći je zahtijeva li određena kontrola doista chroot; ako se zahtjev zapravo odnosi na razdvajanje ovlasti, promjena računa može biti dovoljna sama.

Signal in the logOther side of the boundaryRepair direction
Command not found after startupBinary and its libraries absent inside the new rootPopulate the jail, or drop the chroot line
Operation not permittedAccount lost the privilege to edit routesKeep the account privileged, or pre-create routes elsewhere
No such deviceJail lacks the tun device nodeCreate the node inside, or open it before the root change

Što radni zatvor mora sadržavati

Zatvor koji izvršava naredbe treba binarnu datoteku, svaku biblioteku s kojom se povezuje i svaki čvor uređaja koji daemon otvori kasno. Kopirajte dijelove i testirajte ih bez VPN-a u slici:

ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up

Prva naredba navodi ovisnosti, i to je ona koju ljudi preskaču. Kopirana binarna datoteka koja ne pronađe biblioteku pada s drugom porukom od nedostajuće binarne datoteke, a oboje izgleda kao kvar OpenVPN-a kad se čita s klijentske strane. Ručno pokretanje naredbe u zatvoru reproducira kvar bez ponovnog pokretanja usluge.

Kopirajte i konfiguraciju, certifikate i eventualni CRL u zatvor, jer datoteka koju daemon očekuje ponovno pročitati nakon pokretanja neće se naći kad se korijen promijeni. Zapišite što ste kopirali, jer sljedeća nadogradnja mrežnog paketa zamjenjuje originale i ostavlja zatvor na staroj kopiji.

Umjesto toga smanjite očvršćivanje

Ako zatvor postoji samo zato što je vodič tako rekao, uklanjanje te jedne linije uz zadržavanje ograničenja računa obranjiv je ishod. Daemon zadržava svoj pogled na datotečni sustav i gubi problem, a spuštanje ovlasti i dalje uklanja root iz dugovječnog procesa.

Zapišite što ostaje i zašto. Konfiguracija koja je tiho izgubila kontrolu bez bilješke put je kojim očvršćivanje odstupa, a sljedeća revizija pita zašto je linija nestala.

Razdvojite tri linije prije odabira

Kopirajte konfiguraciju, onemogućite sve tri direktive i potvrdite da se klijent povezuje i da se pojavljuju očekivane rute. Zatim ponovno omogućite samo linije računa, a potom chroot sam. Korak u kojem se tunel lomi označava granicu, i izbjegavate ponovno građenje zatvora koji nikada nije bio uzrok.

Kad ponovno usmjerava, pokrenite jednu klijentsku sesiju s višom razinom detalja i pročitajte liniju koja navodi naredbu ili dopuštenje koje nije uspjelo. Ta je linija vrjednija od isteka vremena koje klijent na kraju prijavi.

Povezani članci