Omezte sdílení Samby na jednoho uživatele a jednu adresu VPN
Parametry valid users a hosts allow v Sambě nespojují osobu s adresou: dvě jména sdílení mohou toto párování vyjádřit a testy křížených párů to dokazují.
V tomto návrhu se pletou dvě různá oprávnění: kdo smí používat adresář a které adresy se vůbec smějí připojit. Zapsat seznam účtů vedle seznamu zdrojů vypadá jako párování, ale Samba hodnotí oba seznamy jako nezávislé predikáty. Přijat je každý, kdo splní obojí, což je širší pravidlo, než většina správců zamýšlí. Oprava je buď jiné uspořádání sdílení, nebo vrstva politiky, která umí pár vyjádřit.
Mýtus: dva seznamy tvoří jedno pravidlo
Referenční příručka smb.conf definuje valid users a hosts allow jako dva nesouvisející parametry a právě nastavení obou na jednom sdílení je místo, kde zmatek začíná. Nastavte valid users = mira, tomas a hosts allow = 10.77.0.21, 10.77.0.22 a přijímají se čtyři kombinace: Mira z kterékoli adresy, Tomas z kterékoli adresy. Nic v konfiguraci nespojuje první jméno s první adresou a pořadí, v němž se jména objevují, nemá žádný význam. Jejich přeuspořádání, přidání druhého řádku hosts allow nebo jedno jméno na řádek nic nemění. Výsledkem je součin dvou seznamů, nikoli mapování mezi nimi.
Co většina lidí vlastně chce, je užší: Mira jen z jedné adresy, Tomas jen z jiné. Jediná definice sdílení nemá syntaxi pro takové svázání a žádné chytré řazení ho nevytvoří. To je tvar politiky, který Samba v rámci jednoho sdílení nevyjadřuje, a právě tam mýtus přežívá.
Co Samba vyhodnocuje a v jakém pořadí
Fáze běží v pevném pořadí a chybné pořadí dává chybnou diagnózu. Klient otevře spojení; globální kontrola hostitele proběhne, je-li nastavena; nastavení relace ověří účet; poté se klient připojí ke sdílení, kde se uplatní vlastní seznam hostitelů tohoto sdílení, valid users a režim pouze pro čtení; a teprve když se otevře soubor, rozhodnou oprávnění souborového systému ověřené identity. Každá fáze může požadavek sama odmítnout a projití jedné nic neříká o další. Důsledkem je, že účet je znám už v době, kdy se vyhodnocuje seznam hostitelů sdílení, a seznam hostitelů stále nemá způsob, jak tento účet pojmenovat.
Proto sdílení nemůže svázat jednoho uživatele s jednou adresou: hosts allow a valid users jsou oddělené predikáty uplatňované ve stejné fázi připojení stromu a každý odpovídá na svou otázku. Predikát hostitele nikdy nebere jméno účtu jako vstup, takže ho nelze napsat pro jednotlivého uživatele. Pár může vyjádřit jen druhé sdílení nebo vrstva politiky mimo Sambu.
Globální hodnoty jsou důležité kvůli tomu, jak se dědí. Sdílení, které vynechá hosts allow, zdědí globální hodnotu, a sdílení, které nastaví vlastní, použije tuto hodnotu místo globální, nikoli navíc k ní. Široký globální seznam tedy rozšiřuje sdílení, která parametr nikdy nenastaví, a sdílení, které si určuje vlastní, neovlivní. Spusťte testparm -s a přečtěte si hodnoty pro jednotlivá sdílení, které vypíše, protože tento výstup je účinná politika, zatímco soubor na disku ne.
Zúžení jednoho sdílení také nic neudělá pro zbytek serveru. Ostatní sdílení, tiskové fronty a spojení IPC si zachovávají vlastní pravidla, takže návrh, který se opírá o seznam adres jednoho sdílení, chrání jednu cestu, nikoli hostitele.
Dvě jména sdílení nad jedním adresářem
Když musí být stejný adresář dostupný dvěma lidem ze dvou adres, vystavte ho dvakrát pod různými jmény. Každý blok nese jeden účet a jeden zdroj, což z páru činí něco, co konfigurace umí vynutit. Cenou je, že každý člověk používá jiné jméno sdílení k dosažení stejných souborů, a to musí být záměrná změna na straně klienta.
[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
Brána sdílení není oprávnění souborového systému. Obě identity stále potřebují přístup k adresáři přes základní ACL a režim pouze pro čtení je druhá vrstva, nikoli jediná. Udělte právo zápisu jen tehdy, když to pracovní postup vyžaduje, pak ověřte, že soubory vytvořené jednou identitou zůstávají použitelné pro druhou.
Oba bloky ukazují na jednu cestu, takže změna v adresáři ovlivní obě sdílení. To je obvykle smysl, ale také to znamená, že chyba v oprávněních je viditelná pro oba uživatele najednou.
Co může prokázat zdrojová adresa
Adresa, kterou Samba vidí, je adresa, která dorazila na server, ne adresa, o níž se klient domnívá, že ji má. VPN brána, která překládá každého klienta na jednu zdrojovou adresu, tento rozdíl maže: všichni klienti přicházejí jako stejný hostitel a seznam zdrojů je už nedokáže rozlišit. Stabilní přidělení pro každého klienta a brána, která zachovává zdroj, jsou předpoklady pro použití adres jako politiky vůbec. Bez obojího omezení měří bránu, nikoli uživatele.
Ani tehdy adresa není zařízení. Dva notebooky za jednou adresou tunelu, přerozdělený pronájem a sdílená pracovní stanice společně vyvracejí předpoklad, že zdroj identifikuje osobu. Berte omezení jako síťový rozsah a držte ověřené účty SMB jako vrstvu identity, s pověřením zařízení, jako je certifikát, pokud potřebujete autorizaci zařízení.
Proto návrh ohrazuje sdílení, a ne server. Odmítnutý pár přesto může otevřít relaci, dosáhnout jiného sdílení nebo vypsat server, což je jiný výsledek než selhání ověření při připojení. Pokud je požadavkem odmítnutí před ověřením, parametry sdílení Samby jsou špatný nástroj.
Dokažte to kříženými páry
Ověřte konfiguraci a pak otestujte čtyři kombinace novými spojeními, nikoli znovu použitou relací. Zamýšlený pár má dosáhnout adresáře a oba křížené páry mají selhat. Uložená relace z dřívějšího testu ochotně odpoví za špatnou kombinaci a porušené pravidlo bude vypadat správně.
testparm -s
smbclient //fileserver/shared-mira -U mira -c 'ls'
smbclient //fileserver/shared-tomas -U tomas -c 'ls'
smbstatus --shares
Kontrola syntaxe dokazuje jen to, že se soubor parsuje. Přihlašovací údaje, ACL a rozhodnutí o hostiteli se uplatňují skutečným spojením, takže spusťte klientský příkaz z adresy, kterou chcete otestovat, a sledujte, která fáze ho odmítne. Uspěje-li křížený pár, je účinný seznam hostitelů širší, než blok naznačuje, a testparm -s je první věc, kterou je třeba přečíst. Selže-li křížený pár ze špatného důvodu, podezřelý je účet nebo ACL.
Sledování relací pomocí smbstatus a jejich ukončování je reakce po zahájení přístupu, ne řízení přístupu. Zablokování celé pozorované adresy může také odpojit nesouvisející uživatele za stejným NAT, a proto rozhodnutí patří do definice sdílení a monitorování do procesu reakce. Držte obojí oddělené a návrh zůstane poctivý v tom, co vynucuje.