Trebate li napustiti chroot ili kopirati iproute2 u zatvor?
Nepotpuni zatvor pada nakon pokretanja, ne pri bootanju. Odaberite između popuštanja očvršćivanja i kopiranja binarnih datoteka i biblioteka u novi korijen.
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 log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create 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.