Ispravak: OpenVPN nije mogao pročitati Auth korisničko ime sa standardnog ulaza
Pogreška OpenVPN-a «could not read Auth username from stdin» lokalni je kvar ulaza. Dajte usluzi čitljiv izvor vjerodajnica; script-security nema s tim veze.
could not read Auth username from stdin izgleda kao problem s provjerom autentičnosti i nije. OpenVPN je pokušao zatražiti korisničko ime sa standardnog ulaza, nije našao ništa čitljivo i zaustavio se prije nego što je uopće kontaktirao poslužitelj. Račun može biti potpuno valjan; proces jednostavno nema koga pitati.
Zato je prvi koristan korak potvrditi što klijent čita, a ne ponovno pokušavati vezu ili mijenjati postavke na strani poslužitelja. Prođite donje provjere redom i zaustavite se na prvoj koja ne uspije.
Čitajte pogrešku kao lokalni kvar ulaza
Kada se auth-user-pass pojavi bez argumenta datoteke, klijent očekuje pitanje. U interaktivnoj ljusci to pitanje radi jer proces posjeduje terminal. Pod systemd-om, cron zadatkom ili kontejnerom standardni je ulaz obično prazan i čitanje se odmah vraća s pogreškom koju vidite.
Poruka također navodi polje koje nije uspjelo, korisničko ime ili zaporku, što pokazuje dokle je čitanje stiglo. Nedostajuće korisničko ime znači da proces nije uspio pročitati baš ništa. Nedostajuća zaporka nakon uspješnog korisničkog imena znači da je tok ulaza završio između dva čitanja, što je tipično za napola napisanu datoteku ili zatvorenu cijev.
Potvrdite pogled samog klijenta prije nego što promijenite bilo što drugo. Pokrenite ga u prednjem planu s istom konfiguracijom i istim korisnikom i promatrajte pojavljuje li se pitanje. Ako se pojavljuje u vašoj ljusci, ali ne pod upraviteljem usluga, razlika je u izvoru ulaza, a ne u vjerodajnicama. Brza usporedba unit datoteke i okruženja vaše ljuske obično pokazuje koje od njih osigurava terminal.
Dajte usluzi podržan izvor vjerodajnica
Podržani izvor za rad bez nadzora je datoteka s vjerodajnicama proslijeđena kao argument za auth-user-pass. Datoteka se čita kao običan tekst: prvi redak je korisničko ime, drugi je zaporka. Upućujte na nju apsolutnim putem, primjerice /etc/openvpn/client/creds tako da radni direktorij servisnog računa ne može promijeniti značenje direktive.
Dopuštenja su jednako važna kao put. Datoteka mora biti čitljiva računu koji pokreće klijenta, a ne svima ostalima, i trebala bi pripadati servisnom računu ili rootu sa skupinom koja uključuje uslugu. Provjerite čitljivost kao taj račun, bez ispisivanja sadržaja.
Relativni put je tihi način kvara. Profil može biti u jednom direktoriju dok systemd pokreće proces negdje drugdje, pa se datoteka koja se razrješava u vašoj ljusci ne razrješava za uslugu. Premjestite vjerodajnice na fiksno mjesto i upućujte na njih apsolutno. Zatim jednom pokrenite uslugu i potvrdite da se koristi isti put, umjesto da vjerujete prikazu uređivača profila.
Ako implementacija zahtijeva jednokratni kôd ili drugi interaktivni izazov, odlučite podržava li klijentov tijek rada to doista bez nadzora. Datoteka sa statičnom zaporkom ne može odgovoriti na rotirajući kôd, a ponavljanje pitanja na koje nema odgovora ne dodaje informaciju.
Zašto script-security neće pomoći
script-security kontrolira smije li klijent pokretati skripte i koliko im smije proslijediti, uključujući to može li se zaporka predati skripti preko varijable okruženja. Nema što reći o tome odakle korisničko ime i zaporka uopće dolaze.
Podizanje na višu razinu uobičajen je refleks jer poruka spominje Auth, ali mijenja dopuštenja skripti, a ne izvor ulaza, i proširuje ono što klijent smije izvršiti. Ako je pomoćna skripta dio dizajna, prvo popravite izvor ulaza i držite razinu sigurnosti na najnižoj vrijednosti koja je potrebna implementaciji.
Sučelje za upravljanje legitimna je alternativa. Prednji dio može se povezati s njim, primiti zahtjev za vjerodajnicama i odgovoriti korisničkim imenom i zaporkom, tako rade neki GUI-ji. Ako ga koristite, vežite ga na lokalnu adresu, zaštitite datotekom zaporke za upravljanje i ograničite tko se može povezati, jer je to kontrolni kanal za klijenta.
Provjerite sljedeću fazu nakon što klijent pročita datoteku
Kad klijent može pročitati vjerodajnice, sljedeći je kvar stvarna razmjena s poslužiteljem i njegova poruka ima drukčije značenje. Neuspjeh provjere autentičnosti u toj fazi znači da je poslužitelj odbio račun; odgovor s izazovom znači da poslužitelj želi drugi faktor. Tretirajte ih kao nove probleme, a ne kao ponavljanje istog.
Testirajte cijeli put onako kako će ga usluga pokretati: isti račun, isti radni direktorij, isto unit okruženje. Veza koja radi samo kad se pokrene iz vaše ljuske znak je da su varijabla okruženja ili terminal još uvijek dio toka.
Zatim držite tajne tamo gdje pripadaju. Zaporke u argumentima naredbenog retka pojavljuju se u tablici procesa, a zaporke u izlazu za otklanjanje pogrešaka završavaju u ticketima. Koristite zaštićenu datoteku ili sučelje za upravljanje, držite zapisnike na razini koja ne ponavlja vjerodajnice i zamijenite datoteku kad netko s pristupom ode.
Kontrolni popis: apsolutni put do vjerodajnica, čitljiv kao servisni račun, terminal nije potreban, script-security na minimumu, sučelje za upravljanje samo ako je vezano i provjereno, a dobiveni odgovor poslužitelja tretira se kao zaseban događaj.