I dette designet blir to ulike tillatingar blanda: kven som kan bruke ei mappe, og kva adresser som i det heile kan kople til. Å skrive ei kontoliste ved sida av ei kjeldeliste kjennest som ein paring, men Samba vurderer dei to listene som uavhengige predikat. Alle som oppfyller begge, slepp inn, og det er ei breiare regel enn dei fleste administratorar meiner. Løysinga er anten eit anna delingsoppsett eller eit policylag som kan uttrykkje paret.

Myten: to lister gir éin regel

smb.conf-referansen definerer valid users og hosts allow som to uavhengige parametrar, og det er ved å setje begge på éi deling at forvirringa startar. Set valid users = mira, tomas og hosts allow = 10.77.0.21, 10.77.0.22, og fire kombinasjonar blir sleppte inn: Mira frå begge adressene, Tomas frå begge adressene. Ingenting i konfigurasjonen bind det første namnet til den første adressa, og rekkjefølgja namna står i, betyr ingenting. Å omorganisere dei, leggje til endå ei hosts allow-linje eller setje eitt namn per linje endrar ingenting. Resultatet er produktet av to lister, ikkje ei kopling mellom dei.

Det dei fleste faktisk vil ha, er snevrare: Mira berre frå éi adresse, Tomas berre frå ei anna. Éin delingsdefinisjon har ingen syntaks for den bindinga, og ingen mengd smart ordning skaper ein. Det er ein policyform som Samba ikkje uttrykkjer innanfor éi deling, og det er der myten overlever.

Kva Samba vurderer, og i kva rekkjefølgje

Fasane køyrer i fast rekkjefølgje, og feil rekkjefølgje gir feil diagnose. Ein klient opnar ei tilkopling; ein global vertssjekk køyrer om ein er konfigurert; sesjonsoppsettet autentiserer kontoen; deretter koplar klienten til ei deling, der delinga si eiga vertsliste, valid users og skrivevernet blir nytta; og først når ei fil blir opna, avgjer filsystemtillatingane til den autentiserte identiteten. Kvart trinn kan avvise førespurnaden åleine, og å passere eitt seier ingenting om det neste. Den viktige konsekvensen er at kontoen er kjend når vertslista til delinga blir vurdert, og vertslista har framleis ingen måte å namngje den kontoen på.

Derfor kan ei deling ikkje binde éin brukar til éi adresse: hosts allow og valid users er åtskilde predikat som blir nytta på same tre-tilkoplingssteget, og kvart av dei svarar på sitt eige spørsmål. Vertspredikatet tek aldri kontonamnet som input, så det kan ikkje skrivast per brukar. Berre ei anna deling, eller eit policylag utanfor Samba, kan uttrykkje paret.

Globale verdiar betyr noko på grunn av måten dei blir arva på. Ei deling som utelét hosts allow, arvar den globale verdien, og ei deling som set sin eigen, brukar den verdien i staden for den globale, ikkje i tillegg til den. Så ei brei global liste utvidar delingane som aldri set parameteren, og gjer ingenting med ei deling som definerer sin eigen. Køyr testparm -s og les verdiane per deling som han skriv ut, for den utskrifta er den effektive policyen, og fila på disken er det ikkje.

Å snevre inn éi deling gjer heller ingenting for resten av tenaren. Andre delingar, skrivarkøar og IPC-tilkoplinga held sine eigne reglar, så eit design som kviler på adresselista til éi deling, vernar éin veg i staden for verten.

To delingsnamn over éi mappe

Når den same mappa må kunne nåast av to personar frå to adresser, eksponer ho to gonger under ulike namn. Kvar blokk ber éin konto og éi kjelde, noko som gjer paret til noko konfigurasjonen kan handheve. Prisen er at kvar person brukar eit anna delingsnamn for å nå dei same filene, og det må vere ei medviten endring på klientsida.

[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

Ein delingsport er ikkje ei filsystemtillating. Begge identitetane treng framleis tilgang til mappa gjennom den underliggjande ACL-en, og skrivevernet er eit andre lag, ikkje det einaste. Gi skrivetilgang berre om arbeidsflyten krev det, og kontroller deretter at filer oppretta av den eine identiteten blir brukbare for den andre.

Begge blokkene peikar på éin stig, så ei endring i mappa påverkar begge delingane. Det er vanlegvis poenget, men det betyr også at ein tillatingsfeil er synleg for begge brukarane samtidig.

Kva kjeldadressa kan bevisa

Adressa Samba ser, er adressa som nådde tenaren, ikkje adressa klienten trur han har. Ein VPN-gateway som omset kvar klient til éi kjeldadresse, opphevar skilnaden: alle klientar kjem som same vert, og kjeldelista kan ikkje lenger skilje dei. Stabil tildeling per klient og ein gateway som bevarer kjelda, er føresetnader for å bruke adresser som policy i det heile. Utan begge måler avgrensinga gatewayen i staden for brukaren.

Sjølv då er ei adresse ikkje ein eining. To berbare maskiner bak éi tunneladresse, ein lease som er tildelt på nytt og ein delt arbeidsstasjon motbeviser alle antakinga om at ei kjelde identifiserer ein person. Handsama avgrensinga som nettverksomfang, og hald autentiserte SMB-kontoar som identitetslaget, med ein einingslegitimasjon som eit sertifikat om du treng einingsautorisasjon.

Det er også derfor designet lukkar delingar og ikkje tenaren. Eit avvist par kan framleis opne ein sesjon, nå ei anna deling eller liste tenaren, noko som er eit anna utfall enn ein autentiseringsfeil ved tilkopling. Om kravet er avvising før autentisering, er Sambas delingsparametrar feil verktøy.

Bevis det med kryssa par

Valider konfigurasjonen, og test deretter dei fire kombinasjonane med friske tilkoplingar i staden for ein gjenbrukt sesjon. Det tiltenkte paret skal nå mappa, og begge dei kryssa para skal feile. Ein buftra sesjon frå ein tidlegare test svarar gjerne for feil kombinasjon og får ein øydelagd regel til å sjå riktig ut.

testparm -s
smbclient //fileserver/shared-mira -U mira -c 'ls'
smbclient //fileserver/shared-tomas -U tomas -c 'ls'
smbstatus --shares

Ein syntakssjekk beviser berre at fila blir parsa. Påloggingsdetaljar, ACL-ar og vertsavgjerda blir utøvde av ei faktisk tilkopling, så køyr klientkommandoen frå adressa du vil teste, og sjå kva trinn som avviser han. Om eit kryssa par lykkast, er den effektive vertslista breiare enn blokka antydar, og testparm -s er det første som skal lesast. Om eit kryssa par feilar av feil grunn, er kontoen eller ACL-en den mistenkte.

Overvaking av sesjonar med smbstatus og nedstenging av dei er ei responshandling som blir teken etter at tilgangen har starta, ikkje tilgangskontroll. Å blokkere ei heil observert adresse kan også kople frå uvedkomande brukarar bak den same NAT-en, og derfor høyrer avgjerda til delingsdefinisjonen og overvakinga til responsprosessen. Hald dei to åtskilde, og designet blir verande ærleg om kva det handhevar.

Relaterte artiklar