could not read Auth username from stdin vyzerá ako problém s overovaním a nie je. OpenVPN sa pokúsil vyžiadať používateľské meno zo štandardného vstupu, nenašiel nič čitateľné a zastavil sa skôr, než sa vôbec spojil so serverom. Účet môže byť úplne platný; proces jednoducho nemá koho sa opýtať.

Preto je prvým užitočným krokom overiť, čo klient číta, nie skúšať znova pripojenie alebo meniť nastavenia na strane servera. Prejdite nižšie uvedené kontroly v poradí a zastavte sa pri prvej, ktorá zlyhá.

Čítajte chybu ako lokálne zlyhanie vstupu

Keď sa auth-user-pass objaví bez argumentu súboru, klient očakáva výzvu. V interaktívnom shelli táto výzva funguje, pretože proces vlastní terminál. Pod systemd, úlohou cron alebo kontajnerom býva štandardný vstup prázdny a čítanie sa okamžite vráti s chybou, ktorú vidíte.

Správa tiež uvádza, ktoré pole zlyhalo, používateľské meno alebo heslo, čo prezrádza, ako ďaleko sa čítanie dostalo. Chýbajúce používateľské meno znamená, že proces neprečítal vôbec nič. Chýbajúce heslo po úspešnom používateľskom mene znamená, že vstupný tok sa skončil medzi oboma čítaniami, čo je typické pre napoly zapísaný súbor alebo uzavretú rúru.

Pred zmenou čohokoľvek ďalšieho overte pohľad samotného klienta. Spustite ho v popredí s rovnakou konfiguráciou a rovnakým používateľom a sledujte, či sa výzva objaví. Ak sa objaví vo vašom shelli, ale nie pod správcom služieb, rozdiel je v zdroji vstupu, nie v prihlasovacích údajoch. Rýchle porovnanie unit súboru a prostredia shellu zvyčajne ukáže, ktorý z nich poskytuje terminál.

Dajte službe podporovaný zdroj prihlasovacích údajov

Podporovaným zdrojom pre bezobslužnú prevádzku je súbor s prihlasovacími údajmi odovzdaný ako argument parametru auth-user-pass. Súbor sa číta ako čistý text: prvý riadok je používateľské meno, druhý je heslo. Odkážte naň absolútnou cestou, napríklad /etc/openvpn/client/creds , aby pracovný adresár servisného účtu nemohol zmeniť význam direktívy.

Oprávnenia sú rovnako dôležité ako cesta. Súbor musí byť čitateľný pre účet, ktorý klienta spúšťa, a nie pre všetkých ostatných, a mal by patriť servisnému účtu alebo rootovi so skupinou, ktorá službu zahŕňa. Overte čitateľnosť ako tento účet bez vypisovania obsahu.

Relatívna cesta je tichý režim zlyhania. Profil môže ležať v jednom adresári, zatiaľ čo systemd spúšťa proces inde, takže súbor, ktorý sa vyrieši vo vašom shelli, sa pre službu nevyrieši. Presuňte prihlasovacie údaje na pevné miesto a odkazujte na ne absolútne. Potom službu raz spustite a potvrďte, že sa používa rovnaká cesta, namiesto toho, aby ste dôverovali pohľadu editora profilov.

Ak nasadenie vyžaduje jednorazový kód alebo inú interaktívnu výzvu, rozhodnite, či to pracovný postup klienta skutočne zvládne bez obsluhy. Súbor so statickým heslom nemôže odpovedať na rotujúci kód a opakovanie nezodpovedateľnej výzvy neprináša žiadnu informáciu.

Prečo script-security nepomôže

script-security riadi, či klient smie spúšťať skripty a koľko im smie odovzdať, vrátane toho, či možno heslo odovzdať skriptu cez premennú prostredia. O tom, odkiaľ sa používateľské meno a heslo berú, nehovorí nič.

Zvyšovať ho na vyššiu úroveň je bežný reflex, pretože správa spomína Auth, ale mení oprávnenia skriptov, nie zdroj vstupu, a rozširuje, čo klient smie spustiť. Ak je pomocný skript súčasťou návrhu, najprv opravte zdroj vstupu a udržujte úroveň zabezpečenia na najnižšej hodnote, ktorú nasadenie potrebuje.

Rozhranie na správu je legitímna alternatíva. Frontend sa k nemu môže pripojiť, prevziať žiadosť o prihlasovacie údaje a odpovedať používateľským menom a heslom, tak fungujú niektoré GUI. Ak ho používate, zviažte ho s miestnou adresou, chráňte ho súborom hesla pre správu a obmedzte, kto sa môže pripojiť, pretože je to riadiaci kanál klienta.

Overte ďalšiu fázu potom, čo klient súbor prečíta

Akonáhle klient dokáže prečítať prihlasovacie údaje, ďalšie zlyhanie je skutočná výmena so serverom a jeho správa má iný význam. Zlyhanie overenia v tejto fáze znamená, že server účet odmietol; odpoveď s výzvou znamená, že server chce iný faktor. Berte ich ako nové problémy, nie ako opakovanie toho istého.

Otestujte celú cestu tak, ako ju bude služba spúšťať: rovnaký účet, rovnaký pracovný adresár, rovnaké prostredie unit. Pripojenie, ktoré funguje len pri spustení z vášho shellu, je znakom toho, že premenná prostredia alebo terminál sú stále súčasťou toku.

Potom držte tajomstvá tam, kam patria. Heslá v argumentoch príkazového riadka sa objavujú v tabuľke procesov a heslá v ladiacom výstupe končia v tiketoch. Používajte chránený súbor alebo rozhranie na správu, udržujte protokoly na úrovni, ktorá neopakuje prihlasovacie údaje, a pri odchode kohokoľvek s prístupom súbor vymeňte.

Kontrolný zoznam: absolútna cesta k prihlasovacím údajom, čitateľná ako servisný účet, nie je nutný terminál, script-security na minime, rozhranie na správu len ak je zviazané a overené, a výsledná odpoveď servera sa berie ako samostatná udalosť.

Súvisiace články