Tässä suunnittelussa sekoittuvat kaksi eri käyttöoikeutta: kuka saa käyttää hakemistoa ja mitkä osoitteet saavat ylipäätään yhdistää. Tililuettelon kirjoittaminen lähdeluettelon viereen tuntuu paritukselta, mutta Samba arvioi luettelot itsenäisinä predikaatteina. Hyväksytään jokainen, joka täyttää molemmat, ja se on väljempi sääntö kuin useimmat ylläpitäjät tarkoittavat. Korjaus on joko toisenlainen jakorakenne tai käytäntökerros, joka pystyy ilmaisemaan parin.

Myytti: kaksi luetteloa tekee yhden säännön

smb.conf-viite määrittelee valid users ja hosts allow kahdeksi toisistaan riippumattomaksi parametriksi, ja juuri molempien asettaminen yhteen jakoon on se kohta, jossa sekaannus alkaa. Aseta valid users = mira, tomas ja hosts allow = 10.77.0.21, 10.77.0.22, niin neljä yhdistelmää hyväksytään: Mira kummasta tahansa osoitteesta, Tomas kummasta tahansa osoitteesta. Mikään kokoonpanossa ei sido ensimmäistä nimeä ensimmäiseen osoitteeseen, eikä nimien esiintymisjärjestyksellä ole merkitystä. Niiden uudelleenjärjestäminen, toisen hosts allow-rivin lisääminen tai yhden nimen sijoittaminen riville ei muuta mitään. Tulos on kahden luettelon tulo, ei niiden välinen kuvaus.

Se, mitä useimmat oikeasti haluavat, on kapeampaa: Mira vain yhdestä osoitteesta, Tomas vain toisesta. Yhdellä jakomääritelmällä ei ole syntaksia sille sidokselle, eikä mikään nerokas järjestys luo sitä. Se on käytännön muoto, jota Samba ei ilmaise yhden jaon sisällä, ja siinä myytti säilyy.

Mitä Samba arvioi ja missä järjestyksessä

Vaiheet etenevät kiinteässä järjestyksessä, ja väärä järjestys antaa väärän diagnoosin. Asiakas avaa yhteyden; globaali isäntätarkistus ajetaan, jos sellainen on määritelty; istunnon perustaminen todentaa tilin; sitten asiakas yhdistää jakoon, jossa kyseisen jaon oma isäntäluettelo, valid users ja vain luku -asetus otetaan käyttöön; ja vasta kun tiedosto avataan, todentautuneen identiteetin tiedostojärjestelmän käyttöoikeudet ratkaisevat. Jokainen vaihe voi hylätä pyynnön yksin, eikä yhden läpäiseminen kerro mitään seuraavasta. Tärkeä seuraus on, että tili tunnetaan jo, kun jaon isäntäluetteloa arvioidaan, eikä isäntäluettelolla vieläkään ole tapaa nimetä sitä tiliä.

Siksi jako ei voi sitoa yhtä käyttäjää yhteen osoitteeseen: hosts allow ja valid users ovat erillisiä predikaatteja, jotka otetaan käyttöön samassa puun yhdistämisvaiheessa, ja kumpikin vastaa omaan kysymykseensä. Isäntäpredikaatti ei koskaan ota tilin nimeä syötteeksi, joten sitä ei voi kirjoittaa käyttäjäkohtaisesti. Parin voi ilmaista vain toinen jako tai Samban ulkopuolinen käytäntökerros.

Globaalit arvot ovat tärkeitä periytymistavan vuoksi. Jako, joka jättää hosts allow pois, perii globaalin arvon, ja jako, joka asettaa omansa, käyttää sitä arvoa globaalin sijaan, ei sen lisäksi. Siten laaja globaali luettelo laajentaa jakoja, jotka eivät koskaan aseta parametria, eikä tee mitään jaolle, joka määrittelee omansa. Aja testparm -s ja lue sen tulostamat jakokohtaiset arvot, koska se tuloste on tehokas käytäntö, eikä levyllä oleva tiedosto ole.

Yhden jaon kaventaminen ei myöskään tee mitään palvelimen muulle osalle. Muut jaot, tulostusjonot ja IPC-yhteys pitävät omat sääntönsä, joten yhden jaon osoiteluetteloon nojaava suunnittelu suojaa yhtä polkua eikä isäntää.

Kaksi jakonimeä yhden hakemiston päällä

Kun saman hakemiston on oltava kahden ihmisen saavutettavissa kahdesta osoitteesta, paljasta se kahdesti eri nimillä. Jokainen lohko kantaa yhden tilin ja yhden lähteen, mikä tekee parista jotain, minkä kokoonpano voi pakottaa. Hinta on, että kukin henkilö käyttää eri jakonimeä päästäkseen samoihin tiedostoihin, ja sen on oltava tarkoituksellinen muutos asiakaspäässä.

[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

Jakoportti ei ole tiedostojärjestelmän käyttöoikeus. Molemmat identiteetit tarvitsevat yhä pääsyn hakemistoon taustalla olevan ACL:n kautta, ja vain luku -asetus on toinen kerros, ei ainoa. Myönnä kirjoitusoikeus vain, jos työnkulku sitä vaatii, ja tarkista sitten, että yhden identiteetin luomat tiedostot pysyvät toisen käytettävissä.

Molemmat lohkot osoittavat yhteen polkuun, joten hakemiston muutos vaikuttaa molempiin jakoihin. Yleensä se on tarkoitus, mutta se tarkoittaa myös, että käyttöoikeusvirhe näkyy molemmille käyttäjille yhtä aikaa.

Mitä lähdeosoite voi todistaa

Osoite, jonka Samba näkee, on osoite, joka saavutti palvelimen, ei se, jonka asiakas luulee omaavansa. VPN-yhdyskäytävä, joka kääntää jokaisen asiakkaan yhdeksi lähdeosoitteeksi, poistaa eron: kaikki asiakkaat saapuvat samana isäntänä eikä lähdeluettelo enää pysty erottamaan niitä. Vakaa jakaminen asiakaskohtaisesti ja lähteen säilyttävä yhdyskäytävä ovat edellytyksiä osoitteiden käyttämiselle käytäntönä ylipäätään. Ilman molempia rajoitus mittaa yhdyskäytävää, ei käyttäjää.

Silti osoite ei ole laite. Kaksi kannettavaa yhden tunneliosoitteen takana, uudelleen jaettu vuokra ja jaettu työasema kumoavat kaikki oletuksen, että lähde yksilöi henkilön. Käsittele rajoitus verkon laajuutena ja pidä todennetut SMB-tilit identiteettikerroksena, laitetunnisteella kuten varmenteella, jos tarvitset laitevaltuutuksen.

Siksi suunnittelu portittaa jakoja eikä palvelinta. Hylätty pari voi silti avata istunnon, päästä toiseen jakoon tai listata palvelimen, mikä on eri tulos kuin todentamisen epäonnistuminen yhdistettäessä. Jos vaatimuksena on hylkäys ennen todentamista, Samban jakoparametrit ovat väärä työkalu.

Todista se ristityillä pareilla

Validoi kokoonpano ja testaa sitten neljä yhdistelmää tuoreilla yhteyksillä, ei uudelleen käytetyllä istunnolla. Tarkoitetun parin pitäisi päästä hakemistoon, ja molempien ristittyjen parien pitäisi epäonnistua. Aiemman testin välimuistiin jäänyt istunto vastaa mielellään väärästä yhdistelmästä ja saa rikkinäisen säännön näyttämään oikealta.

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

Syntaksitarkistus todistaa vain, että tiedosto jäsennetään. Tunnistetiedot, ACL:t ja isäntäpäätös testataan todellisella yhteydellä, joten aja asiakaskomento osoitteesta, jota haluat testata, ja seuraa, mikä vaihe sen hylkää. Jos ristitty pari onnistuu, tehokas isäntäluettelo on laajempi kuin lohko antaa ymmärtää, ja testparm -s on ensimmäinen luettava. Jos ristitty pari epäonnistuu väärästä syystä, epäilty on tili tai ACL.

Istuntojen seuraaminen smbstatus-komennolla ja niiden tappaminen on vastatoimi käytön alettua, ei pääsynvalvontaa. Koko havaitun osoitteen estäminen voi myös katkaista saman NAT:n takana olevia asiaankuulumattomia käyttäjiä, minkä vuoksi päätös kuuluu jakomääritelmään ja seuranta vastaprosessiin. Pidä ne erillään, niin suunnittelu pysyy rehellisenä sen suhteen, mitä se pakottaa.

Aiheeseen liittyvät artikkelit