Apriboti Samba bendrinį vienam naudotojui ir vienam VPN adresui
Samba parametrai valid users ir hosts allow nesieja asmens su adresu: du bendrinių pavadinimai gali išreikšti porą, ir kryžminių porų testai tai įrodo.
Šiame projekte painiojami du skirtingi leidimai: kas gali naudoti katalogą ir kurie adresai apskritai gali jungtis. Rašyti paskyrų sąrašą šalia šaltinių sąrašo atrodo kaip poravimas, bet Samba abu sąrašus vertina kaip nepriklausomus predikatus. Priimamas kiekvienas, kuris tenkina abu, ir tai platesnė taisyklė, nei dauguma administratorių ketina. Sprendimas yra arba kitoks bendrinio išdėstymas, arba politikos sluoksnis, galintis išreikšti porą.
Mitas: du sąrašai sudaro vieną taisyklę
smb.conf žinynas apibrėžia valid users ir hosts allow kaip du nesusijusius parametrus, ir būtent abiejų nustatymas viename bendrinyje yra vieta, kur prasideda painiava. Nustatykite valid users = mira, tomas ir hosts allow = 10.77.0.21, 10.77.0.22 ir priimami keturi deriniai: Mira iš bet kurio adreso, Tomas iš bet kurio adreso. Niekas konfigūracijoje nesaisto pirmo vardo su pirmu adresu, o vardų pasirodymo tvarka neturi prasmės. Jų perrikiavimas, antros hosts allow eilutės pridėjimas ar vieno vardo eilutėje įrašymas nieko nekeičia. Rezultatas yra dviejų sąrašų sandauga, o ne atvaizdavimas tarp jų.
Tai, ko dauguma žmonių iš tikrųjų nori, yra siauriau: Mira tik iš vieno adreso, Tomas tik iš kito. Viena bendrinio apibrėžtis neturi sintaksės tokiam susiejimui, ir jokia gudri tvarka jo nesukuria. Tai politikos forma, kurios Samba neišreiškia viename bendrinyje, ir čia mitas išlieka.
Ką Samba vertina ir kokia tvarka
Etapai vyksta fiksuota tvarka, o neteisinga tvarka duoda neteisingą diagnozę. Klientas atidaro ryšį; globalus prieglobos patikrinimas atliekamas, jei jis sukonfigūruotas; sesijos nustatymas autentifikuoja paskyrą; tada klientas jungiasi prie bendrinio, kur taikomas jo paties prieglobos sąrašas, valid users ir tik skaitymo nuostata; ir tik atidarius failą nusprendžia autentifikuotos tapatybės failų sistemos leidimai. Kiekvienas etapas gali pats atmesti užklausą, o vieno praėjimas nieko nesako apie kitą. Svarbi pasekmė: paskyra jau žinoma, kai vertinamas bendrinio prieglobos sąrašas, o prieglobos sąrašas vis dar neturi būdo įvardyti tos paskyros.
Todėl bendrinys negali susieti vieno naudotojo su vienu adresu: hosts allow ir valid users yra atskiri predikatai, taikomi tame pačiame medžio jungimo etape, ir kiekvienas atsako į savo klausimą. Prieglobos predikatas niekada neima paskyros vardo kaip įvesties, todėl jo negalima parašyti pagal naudotoją. Porą gali išreikšti tik antras bendrinys arba politikos sluoksnis už Samba ribų.
Globalios reikšmės svarbios dėl paveldėjimo būdo. Bendrinys, kuris praleidžia hosts allow, paveldi globalią reikšmę, o bendrinys, kuris nustato savąją, naudoja tą reikšmę vietoj globalios, o ne papildomai. Taigi platus globalus sąrašas išplečia bendrinius, kurie niekada nenustato parametro, ir nieko nedaro bendriniui, kuris apibrėžia savąjį. Paleiskite testparm -s ir skaitykite išspausdintas reikšmes pagal bendrinius, nes ta išvestis yra veiksminga politika, o failas diske nėra.
Vieno bendrinio susiaurinimas taip pat nieko nedaro likusiam serveriui. Kiti bendriniai, spausdinimo eilės ir IPC ryšys laikosi savo taisyklių, todėl projektas, kuris remiasi vieno bendrinio adresų sąrašu, apsaugo vieną kelią, o ne prieglobą.
Du bendrinių pavadinimai viename kataloge
Kai tas pats katalogas turi būti pasiekiamas dviem žmonėms iš dviejų adresų, atskleiskite jį du kartus skirtingais pavadinimais. Kiekvienas blokas neša vieną paskyrą ir vieną šaltinį, o tai paverčia porą kažkuo, ką konfigūracija gali priversti. Kaina yra ta, kad kiekvienas žmogus naudoja skirtingą bendrinio pavadinimą, kad pasiektų tuos pačius failus, ir tai turi būti sąmoningas pakeitimas kliento pusėje.
[shared-mira]
path = /srv/shared
guest ok = no
read only = yes
valid users = mira
hosts allow = 10.77.0.21
hosts deny = ALL
[shared-tomas]
path = /srv/shared
guest ok = no
read only = yes
valid users = tomas
hosts allow = 10.77.0.22
hosts deny = ALL
Bendrinio vartai nėra failų sistemos leidimas. Abi tapatybės vis dar turi pasiekti katalogą per pagrindinį ACL, o tik skaitymo nuostata yra antras sluoksnis, o ne vienintelis. Suteikite rašymo prieigą tik jei to reikalauja darbo eiga, tada patikrinkite, ar vienos tapatybės sukurti failai lieka naudingi kitai.
Abu blokai rodo į vieną kelią, todėl katalogo pakeitimas paveikia abu bendrinius. Paprastai tai ir yra tikslas, bet tai taip pat reiškia, kad leidimų klaida matoma abiem naudotojams vienu metu.
Ką gali įrodyti šaltinio adresas
Adresas, kurį mato Samba, yra adresas, kuris pasiekė serverį, o ne tas, kurį klientas mano turįs. VPN šliuzas, verčiantis kiekvieną klientą į vieną šaltinio adresą, panaikina šį skirtumą: visi klientai atvyksta kaip tas pats priegloba ir šaltinių sąrašas nebegali jų atskirti. Stabilus paskirstymas kiekvienam klientui ir šliuzas, išsaugantis šaltinį, yra būtinos sąlygos adresus apskritai naudoti kaip politiką. Be abiejų apribojimas matuoja šliuzą, o ne naudotoją.
Net tada adresas nėra įrenginys. Du nešiojamieji kompiuteriai už vieno tunelio adreso, perskirstyta nuoma ir bendra darbo stotis kartu paneigia prielaidą, kad šaltinis identifikuoja asmenį. Traktuokite apribojimą kaip tinklo apimtį ir laikykite autentifikuotas SMB paskyras tapatybės sluoksniu, su įrenginio kredencialais, pavyzdžiui, sertifikatu, jei reikia įrenginio autorizacijos.
Štai kodėl projektas uždaro bendrinius, o ne serverį. Atmesta pora vis tiek gali atidaryti sesiją, pasiekti kitą bendrinį ar išvardyti serverį, ir tai kitoks rezultatas nei autentifikavimo klaida jungiantis. Jei reikalavimas yra atmesti prieš autentifikavimą, Samba bendrinių parametrai yra netinkamas įrankis.
Įrodykite kryžminėmis poromis
Patikrinkite konfigūraciją, tada išbandykite keturis derinius naujais ryšiais, o ne pakartotinai naudojama sesija. Numatyta pora turėtų pasiekti katalogą, o abi kryžminės poros turėtų nepavykti. Ankstesnio testo podėlyje esanti sesija mielai atsakys už neteisingą derinį ir privers sugadintą taisyklę atrodyti teisinga.
testparm -s
smbclient //fileserver/shared-mira -U mira -c 'ls'
smbclient //fileserver/shared-tomas -U tomas -c 'ls'
smbstatus --shares
Sintaksės patikrinimas įrodo tik tai, kad failas išanalizuojamas. Prisijungimo duomenys, ACL ir prieglobos sprendimas išbandomi tikru ryšiu, todėl vykdykite kliento komandą iš adreso, kurį norite išbandyti, ir stebėkite, kuris etapas ją atmeta. Jei kryžminė pora pavyksta, veiksmingas prieglobos sąrašas platesnis, nei rodo blokas, ir testparm -s yra pirmas dalykas, kurį reikia perskaityti. Jei kryžminė pora nepavyksta dėl neteisingos priežasties, įtariama paskyra arba ACL.
Sesijų stebėjimas su smbstatus ir jų nutraukimas yra reagavimo veiksmas prasidėjus prieigai, o ne priėmimo kontrolė. Viso stebimo adreso blokavimas taip pat gali atjungti nesusijusius naudotojus už to paties NAT, todėl sprendimas priklauso bendrinio apibrėžčiai, o stebėjimas – reagavimo procesui. Laikykite abu atskirai, ir projektas išlieka sąžiningas dėl to, ką jis vykdo.