Во овој дизајн се мешаат две различни дозволи: кој смее да користи директориум и кои адреси смеат воопшто да се поврзат. Пишувањето список на сметки покрај список на извори изгледа како спарување, но 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 се одделни предикати што се применуваат во истата фаза на поврзување на дрвото, и секој одговара на своето прашање. Предикатот на хостот никогаш не го зема името на сметката како влез, па затоа не може да се напише по корисник. Парот можат да го изразат само втор ресурс или слој на политика надвор од Samba.

Глобалните вредности се важни поради начинот на наследување. Ресурс што го испушта 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 сметки како слој на идентитет, со акредитив на уред, на пример сертификат, ако ви треба авторизација на уред.

Затоа дизајнот затвора ресурси, а не серверот. Одбиениот пар уште може да отвори сесија, да стигне до друг ресурс или да го наброи серверот, што е поинаков исход од неуспех на автентикација при поврзување. Ако барањето е одбивање пред автентикација, параметрите на ресурсите во Samba се погрешниот алат.

Докажете го со вкрстени парови

Валидирајте ја конфигурацијата, потоа тестирајте ги четирите комбинации со свежи врски, а не со повторно користена сесија. Предвидениот пар треба да стигне до директориумот, а двата вкрстени пара треба да не успеат. Кеширана сесија од претходен тест со задоволство ќе одговори за погрешната комбинација и ќе направи скршено правило да изгледа точно.

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, затоа одлуката припаѓа на дефиницијата на ресурсот, а набљудувањето на процесот на одговор. Држете ги двете одделно и дизајнот останува искрен за тоа што го наметнува.

Поврзани статии