Vai atteikties no chroot vai kopēt iproute2 cietumā?
Nepilnīgs cietums sabrūk pēc starta, nevis boot laikā. Izvēlieties starp sacietēšanas mīkstināšanu un bināro failu un bibliotēku kopēšanu jaunajā saknē.
Pakalpojums startē, klients pievienojas, un servera pusē nekad neparādās maršruts. Vai arī dēmons atsakās startēt un nosauc komandu, kuru tas nevarēja izpildīt. Abi iznākumi seko tām pašām trim rindām, kuras parasti kopē kopā no sacietēšanas rokasgrāmatas: pāreja uz neprivileģētu kontu, grupas atmešana un failu sistēmas saknes maiņa. Tikai viena no trim slēpj failus, un tikai viena no tām atņem tiesības mainīt maršrutēšanas tabulu. To atdalīšana ir veids, kā uzzināt, kura rinda jums patiešām ir vajadzīga.
Ko cietums atņem, kas dēmonam vēl vajadzīgs
Saknes maiņa notiek pēc starta, tāpēc dēmons patur visu, ko jau ir atvēris, un zaudē visu, ko atvērtu vēlāk. Jebkuram palīgam, ko savienojums izpilda pēc šī punkta, ir jāpastāv jaunajā saknē, kopā ar ielādētajām koplietotajām bibliotēkām. Cietumam, kas būvēts no konfigurācijas faila un sertifikāta, nav neviena no tiem.
Pāreja uz neprivileģētu kontu ir atsevišķs ierobežojums. Process, kas atteicies no root, var nespēt mainīt maršrutus vai pacelt saskarni pat tad, ja binārais fails ir tepat, tāpēc abas kļūmes jādagnozē atsevišķi.
Trīs nosacījumi izlemj, kāds labojums jums vajadzīgs
Pirmais nosacījums ir tas, kā jūsu build instalē maršrutus. Jaunākās OpenVPN versijas konfigurē saskarni un maršrutēšanas tabulu procesa iekšienē, kamēr vecākas pakotnes un pašu konfigurācijas paļaujas uz ārējiem rīkiem vai up un down skriptiem. Ja žurnāls nosauc komandu, spēlē ir ārējs rīks un cietums to slēpj. Ja žurnāls tā vietā rāda atļauju kļūdu, problēma ir konts.
Otrais ir uzturēšana. Cietums ar kopētiem binārajiem failiem jāatsvaidzina katru reizi, kad tiek atjaunināta pakotne, kas tos nodrošina, citādi pirmais atjauninājums atstāj aiz sevis salauztu tuneli. Trešais ir tas, vai konkrēta kontrole patiešām prasa chroot; ja prasība patiesībā ir par privilēģiju atdalīšanu, var pietikt ar konta maiņu vien.
| 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 |
Kas jāsatur strādājošam cietumam
Cietumam, kas izpilda komandas, vajag bināro failu, katru bibliotēku, ar kuru tas saistās, un katru ierīces mezglu, ko dēmons atver vēlu. Nokopējiet daļas un pārbaudiet tās bez VPN attēlā:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Pirmā komanda uzskaita atkarības, un tieši to cilvēki izlaiž. Nokopēts binārais fails, kas neatrod bibliotēku, sabrūk ar citu ziņojumu nekā trūkstošs binārais fails, un abi izskatās kā OpenVPN kļūme, lasot no klienta puses. Komandas izpilde cietumā ar roku atkārto kļūmi, nepārstartējot pakalpojumu.
Nokopējiet cietumā arī konfigurāciju, sertifikātus un jebkuru CRL, jo fails, ko dēmons pēc starta grib atkārtoti nolasīt, netiks atrasts, kad sakne būs mainīta. Pierakstiet, ko nokopējāt, jo nākamais tīkla pakotnes atjauninājums aizstās oriģinālus un atstās cietumu uz vecās kopijas.
Tā vietā samaziniet sacietēšanu
Ja cietums pastāv tikai tāpēc, ka tā teica rokasgrāmata, šīs vienas rindas noņemšana, saglabājot konta ierobežojumus, ir aizstāvams iznākums. Dēmons saglabā savu failu sistēmas skatījumu un atbrīvojas no problēmas, un privilēģiju samazināšana joprojām atņem root ilgmūžīgajam procesam.
Pierakstiet, kas paliek, un kāpēc. Konfigurācija, kas klusi zaudēja kontroli bez piezīmes, ir veids, kā sacietēšana dreifē, un nākamais audits jautās, kāpēc rinda pazuda.
Sadaliet trīs rindas pirms izvēles
Nokopējiet konfigurāciju, atspējojiet visas trīs direktīvas un apstipriniet, ka klients pievienojas un parādās gaidītie maršruti. Pēc tam atkal iespējojiet tikai konta rindas, un tad chroot vienu pašu. Solis, kurā tunelis lūzt, norāda robežu, un jūs izvairāties no cietuma pārbūves, kas nekad nebija cēlonis.
Kad tas atkal maršrutē, palaidiet vienu klienta sesiju ar lielāku detalitāti un izlasiet rindu, kas nosauc komandu vai neizdevušos atļauju. Šī rinda ir vērtīgāka par taimautu, ko klients beigās ziņo.