I dette design forveksles to forskellige tilladelser: hvem der må bruge en mappe, og hvilke adresser der overhovedet må forbinde. At skrive en kontoliste ved siden af en kildeliste føles som en parring, men Samba vurderer de to lister som uafhængige prædikater i stedet. Alle, der opfylder begge, lukkes ind, og det er en bredere regel, end de fleste administratorer tilsigter. Løsningen er enten en anden delingsopsætning eller et politiklag, der kan udtrykke et par.

Myten: to lister giver én regel

smb.conf-reference definerer valid users og hosts allow som to uafhængige parametre, og det er ved at sætte begge på én deling, at forvirringen starter. Sæt valid users = mira, tomas og hosts allow = 10.77.0.21, 10.77.0.22, og der lukkes fire kombinationer ind: Mira fra begge adresser, Tomas fra begge adresser. Intet i konfigurationen binder det første navn til den første adresse, og den rækkefølge navnene står i, betyder intet. At omarrangere dem, tilføje endnu en hosts allow-linje eller sætte ét navn pr. linje ændrer intet. Resultatet er produktet af to lister, ikke en kobling mellem dem.

Det, de fleste faktisk vil have, er snævrere: Mira kun fra én adresse, Tomas kun fra en anden. Én delingsdefinition har ingen syntaks til den binding, og ingen mængde smart ordning skaber en. Det er en politikform, som Samba ikke udtrykker inden for én deling, og det er der, myten overlever.

Hvad Samba vurderer, og i hvilken rækkefølge

Faserne kører i fast rækkefølge, og en forkert rækkefølge giver den forkerte diagnose. En klient åbner en forbindelse; et globalt værttjek kører, hvis et er konfigureret; sessionsopsætningen godkender kontoen; derefter forbinder klienten til en deling, hvor delingens egen værtsliste, valid users og skrivebeskyttelsen anvendes; og først når en fil åbnes, afgør filsystemtilladelserne for den godkendte identitet. Hvert trin kan afvise anmodningen alene, og at passere ét siger intet om det næste. Den vigtige konsekvens er, at kontoen er kendt, når delingens værtsliste vurderes, og værtslisten har stadig ingen måde at navngive den konto på.

Derfor kan en deling ikke binde én bruger til én adresse: hosts allow og valid users er adskilte prædikater, der anvendes på samme træ-forbindelsestrin, og hver især svarer på sit eget spørgsmål. Værtprædikatet tager aldrig kontonavnet som input, så det kan ikke skrives pr. bruger. Kun en anden deling eller et politiklag uden for Samba kan udtrykke parret.

Globale værdier betyder noget på grund af den måde, de nedarves på. En deling, der udelader hosts allow, arver den globale værdi, og en deling, der sætter sin egen, bruger den værdi i stedet for den globale, ikke som et tillæg til den. Så en bred global liste udvider de delinger, der aldrig sætter parameteren, og gør intet ved en deling, der definerer sin egen. Kør testparm -s og læs de værdier pr. deling, den udskriver, for det output er den effektive politik, og filen på disken er det ikke.

At indsnævre én deling gør heller intet for resten af serveren. Andre delinger, printerkøer og IPC-forbindelsen holder deres egne regler, så et design, der hviler på én delings adresseliste, beskytter én vej i stedet for værten.

To delingsnavne over én mappe

Når den samme mappe skal kunne nås af to personer fra to adresser, skal du eksponere den to gange under forskellige navne. Hver blok bærer én konto og én kilde, hvilket gør parret til noget, konfigurationen kan håndhæve. Prisen er, at hver person bruger et forskelligt delingsnavn for at nå de samme filer, og det skal være en bevidst ændring på klientsiden.

[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

En delingsport er ikke en filsystemtilladelse. Begge identiteter har stadig brug for adgang til mappen gennem den underliggende ACL, og delingens skrivebeskyttelse er et andet lag, ikke det eneste. Giv kun skriveadgang, hvis arbejdsgangen kræver det, og kontroller derefter, at filer oprettet af den ene identitet forbliver brugbare for den anden.

Begge blokke peger på én sti, så en ændring i mappen påvirker begge delinger. Det er normalt pointen, men det betyder også, at en tilladelsesfejl er synlig for begge brugere på én gang.

Hvad kildeadressen kan bevise

Den adresse, Samba ser, er den adresse, der nåede serveren, ikke den adresse, klienten tror, den har. En VPN-gateway, der oversætter hver klient til én kildeadresse, opløser forskellen: alle klienter ankommer som den samme vært, og kildelisten kan ikke længere skelne dem. Stabil tildeling pr. klient og en gateway, der bevarer kilden, er forudsætninger for overhovedet at bruge adresser som politik. Uden begge måler begrænsningen gatewayen i stedet for brugeren.

Selv da er en adresse ikke en enhed. To bærbare computere bag én tunneladresse, en gentildelt lease og en delt arbejdsstation underminerer alle antagelsen om, at en kilde identificerer en person. Behandl begrænsningen som netværksomfang, og hold godkendte SMB-konti som identitetslaget, med en enhedslegitimation som et certifikat, hvis du har brug for enhedsgodkendelse.

Det er også derfor, designet lukker delinger og ikke serveren. Et afvist par kan stadig åbne en session, nå en anden deling eller liste serveren, hvilket er et andet udfald end en godkendelsesfejl ved forbindelsen. Hvis kravet er afvisning før godkendelse, er Sambas delingsparametre det forkerte værktøj.

Bevis det med krydsede par

Validér konfigurationen, og test derefter de fire kombinationer med friske forbindelser i stedet for en genbrugt session. Det tilsigtede par skal nå mappen, og begge krydsede par skal fejle. En cachet session fra en tidligere test svarer gerne for den forkerte kombination og får en brudt regel til at se rigtig ud.

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

Et syntakstjek beviser kun, at filen parser. Loginoplysninger, ACL'er og værtsbeslutningen udøves af en faktisk forbindelse, så kør klientkommandoen fra den adresse, du vil teste, og se, hvilket trin der afviser den. Hvis et krydset par lykkes, er den effektive værtsliste bredere, end blokken antyder, og testparm -s er det første, der skal læses. Hvis et krydset par fejler af den forkerte grund, er kontoen eller ACL'en den mistænkte.

Overvågning af sessioner med smbstatus og nedlukning af dem er en responshandling, der tages, efter adgang er begyndt, ikke adgangskontrol. Blokering af en hel observeret adresse kan også afbryde uvedkommende brugere bag den samme NAT, og derfor hører beslutningen til delingsdefinitionen og overvågningen til responsprocessen. Hold de to adskilt, og designet forbliver ærligt om, hvad det håndhæver.

Relaterede artikler