PAM bidezko autentifikazioak arrakasta izan dezake bezeroa eskuz exekutatzen duzunean, eta AUTH_FAILED-rekin huts egin systemd-k profil bera abiarazten duenean. Pasahitza ez da aldatzen exekuzio horien artean; aldatzen dena PAM-i galdera egiten dion prozesuaren inguruko murrizketa multzoa da. PAM laguntzaile baten bidez erantzuten du, eta haren kredentzialak aldatzeko gaitasuna da unit gogortu batek kentzen duena. Aurkitu laguntzaile hori eta behar duen muga gaitasun-zerrenda ukitu aurretik.

unix_chkpwd da PAM-en galderari erantzuten dion bitar fitxategia

Pasahitz-autentifikazio lokalarekin, pam_unix-k gutxitan irakurtzen du hash fitxategia bera. unix_chkpwd exekutatzen du, banaketek setuid root edo setgid shadow gisa instalatzen dutena, pasahitz bat /etc/shadow irakurtzeko beharrik ez duen prozesu baten izenean egiaztatu ahal izateko. Kendu identitate hori lortzeko gaitasuna eta laguntzaileak ezin izango du egiaztapena osatu, beraz moduluak autentifikazio-hutsegite soil bat itzultzen du.

Orduan hutsegitea kredentzial-arazo bat bezala agertzen da bezeroak ikus dezakeen erregistro guztietan. Hori da tranpa: bezeroak PAM-ek esan ziona jakinarazten du, eta PAM-ek pilak ezetz esan duela bakarrik jakinarazten du. Laguntzailea eskuz root gisa exekutatzeak ere ez du ezer frogatzen, zerbitzuak inoiz erabiltzen ez duen pribilegio-bide bat probatzen duelako. Irakurri systemd-k benetan kargatu zuen unita, eta gero sistemaren erregistroa egin zuen saiakerarako. Bi ikuspegi horiek sandbox arazoa eta pasahitz okerraren arazoa bereizten dituzte.

Irakurri unita pasahitz-erregistroa irakurri aurretik

Paketatutako unit batek zuk idatzi ez duzun drop-in bat eraman dezake, eta konfigurazio eraginkorra batutako emaitza da. Inprimatu unita systemd-k ikusten duen moduan, laguntzailea bere burua goratu dezakeen ala ez erabakitzen duten sandbox ezarpenekin batera. Irakurketa-soileko ikuskapena nahikoa da etapa honetan.

systemctl cat [email protected]
systemctl show [email protected] -p User -p Group -p CapabilityBoundingSet -p AmbientCapabilities -p NoNewPrivileges
journalctl -u [email protected] -b

Lehen komandoak unita eta haren drop-in-ak nondik datozen erakusten du, eta hori garrantzitsua da hilabete batzuk lehenago gehitutako gainidazketa batek zergatik existitzen den oroimena baino gehiago irauten duelako. Bigarrenak hurrengo bi atalek dependitzen duten sandbox balioak inprimatzen ditu.

Konparatu ikusten duzuna banaketa eta bertsio bereko host funtzional batekin. User, CapabilityBoundingSet edo NoNewPrivileges-ko aldea pista zehatza da; prosa-iruzkinetako aldea ez. Idatzi balioak ezer aldatu aurretik, geroago helburu mugikor baten aurka egindako konparazioak ez baitu ezer frogatzen. Zerbitzua pribilegiorik gabeko kontu batekin eta bounding multzo huts batekin exekutatzen bada, laguntzaileak ia ez du ezer lan egiteko.

Kredentzialen eraldaketa, fitxategi-sarbidea eta politika hiru muga dira

Hasi exec-en gertatzen denarekin. setuid bitarra edo fitxategi-gaitasunak dituen fitxategi batek kredentzialen eraldaketa eragiten du, beraz lortutako identitatea ez da deitzailearen jarraipena. Bounding multzoak mugatzen du halako fitxategi batek zer lor dezakeen, eta NoNewPrivileges-k setuid, setgid eta fitxategi-gaitasunen lorpenak erabat blokeatzen ditu. Hiru horietako edozeinek laguntzailea geldi dezake, zerbitzuaren gainerako funtzio guztiak ukitu gabe utziz.

Ondoren, bereizi diskrezio-muga zabala irakurketa-sarbide estutik. CAP_DAC_OVERRIDE-k ia nonahi saltatzen ditu diskrezio-egiaztapenak, eta CAP_DAC_READ_SEARCH-k irakurketa eta direktorioen zeharkatzea estaltzen ditu bere botere gehigarriekin. Erreminta desberdinak dira, eragin-erradio desberdinekoak, eta bat ere ez da PAM-ek shadow fitxategia irakur dezan idazteko modu bat.

Azkenik, galdetu politika derrigorrezkoak ekintza baimetzen duen. Linux gaitasun batek ez du SELinux gainidazten, eta bat edukitzeak ez du ezer frogatzen type enforcement arau bati buruz. Tratatu fitxategi-sarbidearen ukapen bat eta gaitasun-ukapen bat froga desberdin gisa, konponketa desberdinak eta sarritan jabe desberdinak izendatzen dituztelako. Irakurri erregistroaren eremu guztiak, denied hitz soila baino. Zein exekutagarrik egin zuen ekintza, zein domeinutan exekutatu zen, zer motatako helburua ukitu zuen, zein objektu-klase zegoen tartean eta zein baimen ukatu zuen politikak — bakoitzak modu ezberinean murrizten du erantzuna.

Atera ukapena auditoretza-erregistrotik

Betearazpen-moduko host batean, auditoretza-arrastoa ukapena erregistratzen duen leku bakarra da. Galdetu azken gertaerak eta irakurri huts egindako saio-hasieraren denbora-zigiluaren aurka, ez ikerketa hasi zenuen orduaren aurka.

ausearch -m AVC,USER_AVC -ts recent

Emaitza hutsa ez da errugabetasunaren froga. Auditoretzak ez duela biltzen esan nahi du, edo zure leihoak saiakera galdu zuela, eta bi aukerak baztertu behar dira politika baztertu aurretik.

Red Hat-en SELinux arazoak konpontzeko gidak etiketa eta konfigurazio egiaztapenak allow arauak sortu aurretik jartzen ditu, eta hori da arazo honetarako ordena zuzena ere. Gaizki etiketatutako laguntzaile bitarrak eta politikako hutsune batek ukapen antzekoak sortzen dituzte baina konponketa desberdinak behar dituzte. Etiketatze-errore baterako allow araua sortzeak akatsa ezkutatzen du eta hurrengo pakete-eguneraketari berriro sartzen uzten dio. Berretsi instalatutako laguntzailearen etiketa edozein politika idatzi aurretik.

Frogatu aldaketa saio-hasiera onartu batekin eta beste baztertu batekin

Aldatu frogatu duzun muga bakarrik, gero probatu bi emaitzak. Autentifikatu behar duen kontuak arrakasta izan behar du, eta pasahitz okerra duen kontuak oraindik huts egin behar du. Saiakera guztiak arrakastatsu egiten dituen aldaketak autentifikazioa kendu du konpondu beharrean.

Egin benetako konexio-saiakera bat eta irakurri egunkaria berehala ondoren. Konponketa frogatzen duen lerroa saiakera horretako pam_unix(openvpn:auth) sarrera da: autentifikazio arrakastatsua irakurri behar du, eta ez du AVC erregistro batek segundo bera eraman behar.

journalctl -u [email protected] -n 30 --no-pager
ss -tnp | grep openvpn

Tunel funtzional batek berriz konektatzea ere behar du, sandbox aldaketek bigarren konexioa lehenengoa baino sarriago hausten dutelako. Egiaztatu ezarritako socket-a berriz konektatu ondoren eta berretsi unit berak zerbitzatzen jarraitzen duela.

Erlazionatutako artikuluak