Ограничите Samba дељење на једног корисника и једну VPN адресу
Параметри valid users и hosts allow у Sambi не повезују особу са адресом: два имена дељења могу изразити тај пар, а тестови укрштених парова то доказују.
У овом дизајну мешају се две различите дозволе: ко сме да користи директоријум и које адресе смеју уопште да се повежу. Писање списка налога поред списка извора изгледа као упаривање, али Samba оба списка оцењује као независне предикате. Прихвата се свако ко задовољи оба, а то је шире правило него што већина администратора намерава. Решење је или другачији распоред дељења или слој политике који може да изрази пар.
Мит: два списка чине једно правило
Референца smb.conf дефинише valid users и hosts allow као два неповезана параметра, и управо постављање оба на једном дељењу је место где почиње забуна. Поставите valid users = mira, tomas и hosts allow = 10.77.0.21, 10.77.0.22 и прихватају се четири комбинације: Мира са било које од две адресе, Томас са било које од две адресе. Ништа у конфигурацији не везује прво име за прву адресу, а редослед појављивања имена нема значења. Њихово преређање, додавање другог реда hosts allow или стављање једног имена по реду не мења ништа. Резултат је производ два списка, а не пресликавање између њих.
Оно што већина људи заиста жели је уже: Мира само са једне адресе, Томас само са друге. Једна дефиниција дељења нема синтаксу за то везивање, и никакав довитљив редослед је не ствара. То је облик политике који Samba не изражава унутар једног дељења, и ту мит опстаје.
Шта Samba оцењује и којим редоследом
Фазе иду фиксним редоследом, а погрешан редослед даје погрешну дијагнозу. Клијент отвара везу; глобална провера хоста се извршава ако је постављена; подешавање сесије аутентификује налог; затим се клијент повезује са дељењем, где се примењују његов сопствени списак хостова, valid users и поставка само за читање; и тек када се датотека отвори, одлучују дозволе фајл система аутентификованог идентитета. Свака фаза може сама да одбије захтев, а пролазак кроз једну не говори ништа о следећој. Важна последица је да је налог познат када се оцењује списак хостова дељења, а списак хостова још увек нема начин да назове тај налог.
Зато дељење не може да веже једног корисника за једну адресу: hosts allow и valid users су одвојени предикати који се примењују у истој фази повезивања стабла, и сваки одговара на своје питање. Предикат хоста никада не узима име налога као улаз, па се не може написати по кориснику. Пар могу да изразе само друго дељење или слој политике изван Sambe.
Глобалне вредности су важне због начина наслеђивања. Дељење које изостави hosts allow наслеђује глобалну вредност, а дељење које постави своју користи ту вредност уместо глобалне, а не уз њу. Зато широк глобални списак проширује дељења која никада не постављају параметар, и не чини ништа дељењу које дефинише своје. Покрените testparm -s и прочитајте вредности по дељењу које исписује, јер је тај излаз ефективна политика, а датотека на диску није.
Сужавање једног дељења такође не чини ништа за остатак сервера. Друга дељења, штампачки редови и IPC веза држе своја правила, па дизајн који се ослања на списак адреса једног дељења штити једну путању, а не хост.
Два имена дељења над једним директоријумом
Када исти директоријум мора да буде доступан двема особама са две адресе, изложите га два пута под различитим именима. Сваки блок носи један налог и један извор, што пар претвара у нешто што конфигурација може да наметне. Цена је да свака особа користи друго име дељења да би стигла до истих датотека, и то мора да буде намерна промена на страни клијента.
[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
Капија дељења није дозвола фајл система. Оба идентитета и даље требају приступ директоријуму кроз основни ACL, а поставка само за читање је други слој, а не једини. Дајте право писања само ако радни ток то захтева, а затим проверите да датотеке које направи један идентитет остају употребљиве за други.
Оба блока указују на једну путању, па промена у директоријуму утиче на оба дељења. То је обично циљ, али значи и да је грешка у дозволама видљива обема корисницима истовремено.
Шта може да докаже адреса извора
Адреса коју Samba види је адреса која је стигла до сервера, а не она коју клијент мисли да има. VPN пролаз који преводи сваког клијента у једну изворну адресу укида ту разлику: сви клијенти долазе као исти хост и списак извора више не може да их разликује. Стабилна расподела по клијенту и пролаз који чува извор предуслови су за коришћење адреса као политике уопште. Без оба, ограничење мери пролаз, а не корисника.
Чак и тада адреса није уређај. Два лаптопа иза једне адресе тунела, прерасподељени закуп и заједничка радна станица заједно оповргавају претпоставку да извор идентификује особу. Третирајте ограничење као мрежни обухват и држите аутентификоване SMB налоге као слој идентитета, са акредитивом уређаја, на пример сертификатом, ако вам је потребна ауторизација уређаја.
Зато дизајн затвара дељења, а не сервер. Одбијени пар ипак може да отвори сесију, стигне до другог дељења или излиста сервер, што је другачији исход од неуспеха аутентификације при повезивању. Ако је захтев одбијање пре аутентификације, параметри дељења у Sambi су погрешан алат.
Докажите то укрштеним паровима
Валидирајте конфигурацију, затим тестирајте четири комбинације свежим везама, а не поново коришћеном сесијом. Предвиђени пар треба да стигне до директоријума, а оба укрштена пара треба да не успеју. Кеширана сесија из ранијег теста радо ће одговорити за погрешну комбинацију и учинити да покварено правило изгледа исправно.
testparm -s
smbclient //fileserver/shared-mira -U mira -c 'ls'
smbclient //fileserver/shared-tomas -U tomas -c 'ls'
smbstatus --shares
Провера синтаксе доказује само да се датотека парсира. Акредитиви, ACL-ови и одлука о хосту проверавају се стварном везом, зато покрените клијентску команду са адресе коју желите да тестирате и гледајте која фаза је одбија. Ако укрштени пар успе, ефективни списак хостова је шири него што блок сугерише, и testparm -s је прво што треба прочитати. Ако укрштени пар не успе из погрешног разлога, сумњиви су налог или ACL.
Праћење сесија помоћу smbstatus и њихово убијање је радња одговора након почетка приступа, а не контрола пријема. Блокирање целе посматране адресе може да искључи и неповезане кориснике иза истог NAT-а, зато одлука припада дефиницији дељења, а праћење процесу одговора. Држите то двоје одвојено и дизајн остаје искрен у погледу онога што намеће.