could not read Auth username from stdin atrodo kaip autentifikavimo problema ir ja nėra. OpenVPN bandė paprašyti naudotojo vardo iš standartinės įvesties, nieko skaitomo nerado ir sustojo dar nesusisiekęs su serveriu. Paskyra gali būti visiškai galiojanti; procesas tiesiog neturi ko paklausti.

Todėl pirmas naudingas žingsnis – patikrinti, ką klientas skaito, o ne kartoti prisijungimą ar keisti serverio pusės nustatymus. Atlikite toliau pateiktus patikrinimus iš eilės ir sustokite ties pirmuoju nepavykusiu.

Skaitykite klaidą kaip vietinę įvesties klaidą

Kai auth-user-pass pasirodo be failo argumento, klientas tikisi paklausti. Interaktyvioje aplinkoje tas raginimas veikia, nes procesas turi terminalą. Sistemoje systemd, cron užduotyje ar konteineryje standartinė įvestis paprastai tuščia, o skaitymas iškart grįžta su klaida, kurią matote.

Pranešimas taip pat nurodo nepavykusį lauką, naudotojo vardą arba slaptažodį, o tai parodo, kiek toli skaitymas nuėjo. Trūkstamas naudotojo vardas reiškia, kad procesas negalėjo perskaityti nieko. Trūkstamas slaptažodis po sėkmingo naudotojo vardo reiškia, kad įvesties srautas baigėsi tarp dviejų skaitymų, kas būdinga pusiau įrašytam failui arba uždarytam vamzdžiui.

Prieš ką nors keisdami patvirtinkite paties kliento požiūrį. Paleiskite jį priekiniame plane su ta pačia konfigūracija ir tuo pačiu naudotoju ir stebėkite, ar pasirodo raginimas. Jei jis pasirodo jūsų apvalkale, bet ne po paslaugų tvarkykle, skirtumas yra įvesties šaltinyje, o ne prisijungimo duomenyse. Greitas unit failo ir apvalkalo aplinkos palyginimas paprastai parodo, kuris jų teikia terminalą.

Suteikite paslaugai palaikomą prisijungimo duomenų šaltinį

Palaikomas nepriežiūros šaltinis yra prisijungimo duomenų failas, perduodamas kaip argumentas auth-user-pass. Failas skaitomas kaip paprastas tekstas: pirmoji eilutė – naudotojo vardas, antroji – slaptažodis. Nurodykite jį absoliučiu keliu, pavyzdžiui /etc/openvpn/client/creds , kad paslaugos paskyros darbinis katalogas negalėtų pakeisti direktyvos reikšmės.

Leidimai tokie pat svarbūs kaip kelias. Failas turi būti skaitomas paskyros, kuri paleidžia klientą, o ne visų kitų, ir turėtų priklausyti paslaugos paskyrai arba root su grupe, kurioje yra paslauga. Patikrinkite skaitomumą kaip ta paskyra, nespausdindami turinio.

Santykinis kelias yra tylus gedimo režimas. Profilis gali būti viename kataloge, o systemd paleisti procesą kitur, todėl failas, kuris išsprendžiamas jūsų apvalkale, paslaugai neišsprendžiamas. Perkelkite prisijungimo duomenis į fiksuotą vietą ir nuorodykite į juos absoliučiai. Tada vieną kartą paleiskite paslaugą ir patvirtinkite, kad naudojamas tas pats kelias, užuot pasitikėję profilio redaktoriaus vaizdu.

Jei diegimui reikia vienkartinio kodo ar kito interaktyvaus iššūkio, nuspręskite, ar kliento darbo eiga tikrai palaiko tai be priežiūros. Failas su statiniu slaptažodžiu negali atsakyti į besikeičiantį kodą, o neatsakomo raginimo kartojimas informacijos neprideda.

Kodėl script-security nepadės

script-security valdo, ar klientas gali vykdyti scenarijus ir kiek gali jiems perduoti, įskaitant tai, ar slaptažodį galima perduoti scenarijui per aplinkos kintamąjį. Jis nieko nesako apie tai, iš kur iš pradžių ateina naudotojo vardas ir slaptažodis.

Jo pakėlimas į aukštesnį lygį yra įprastas refleksas, nes pranešime minima Auth, tačiau tai keičia scenarijų leidimus, o ne įvesties šaltinį, ir praplečia, ką klientas gali vykdyti. Jei pagalbinis scenarijus yra dizaino dalis, pirmiausia sutvarkykite įvesties šaltinį ir laikykite saugumo lygį žemiausioje reikšmėje, kurios reikia diegimui.

Valdymo sąsaja yra teisėta alternatyva. Priekinė dalis gali prie jos prisijungti, gauti prisijungimo duomenų užklausą ir atsakyti naudotojo vardu bei slaptažodžiu, taip veikia kai kurie GUI. Jei naudojate, susiekite ją su vietiniu adresu, apsaugokite valdymo slaptažodžio failu ir apribokite, kas gali prisijungti, nes tai kliento valdymo kanalas.

Patikrinkite kitą etapą po to, kai klientas perskaitys failą

Kai klientas gali perskaityti prisijungimo duomenis, kita klaida yra tikras pasikeitimas su serveriu, o jos pranešimas turi kitą reikšmę. Autentifikavimo klaida tame etape reiškia, kad serveris atmetė paskyrą; iššūkio atsakymas reiškia, kad serveris nori kito veiksnio. Traktuokite juos kaip naujas problemas, o ne kaip tos pačios kartojimą.

Išbandykite visą kelią taip, kaip paslauga jį vykdys: ta pati paskyra, tas pats darbinis katalogas, ta pati unit aplinka. Ryšys, kuris veikia tik paleidus iš jūsų apvalkalo, yra ženklas, kad aplinkos kintamasis arba terminalas vis dar yra srauto dalis.

Tada laikykite paslaptis ten, kur jos priklauso. Slaptažodžiai komandinės eilutės argumentuose matomi procesų lentelėje, o slaptažodžiai derinimo išvestyje patenka į bilietus. Naudokite apsaugotą failą arba valdymo sąsają, laikykite žurnalus tokiame lygyje, kuris nekartoja prisijungimo duomenų, ir pakeiskite failą, kai išeina bet kas, turintis prieigą.

Kontrolinis sąrašas: absoliutus prisijungimo duomenų kelias, skaitomas kaip paslaugos paskyra, terminalo nereikia, script-security paliktas minimume, valdymo sąsaja tik jei susieta ir autentifikuota, o gautas serverio atsakymas traktuojamas kaip atskiras įvykis.

Susiję straipsniai