Bindery


V unixu /etc/passwd, windoze maji .pwl, a NetWare bindery. Bindery ma konkretne NetWare 3.x, 4.x maji jiz NDS, ale to neni tematem tohoto clanku. $SUBJ nelze srovnavat s /etc/passwd, je to totiz neco uplne jineho. V passwd jsou ulozeni pouze uzivatele, kdezto v bindery muzete mit prakticky cokoliv. Bezne objekty bindery jsou uzivatele, servery, groupy, tiskarny, ale napriklad i konfigurace jednotlivych programu. Vyuziti je mnoho, muzete si z ni udelat napriklad chatovatko :). Receno jednou vetou, bindery je jednoducha databaze objektu. Kazdemu objektu muzete prirazovat vlastnosti - properties. Properties muzou byt v podstate jakakoliv data.

Rekneme, ze chcete vyrobit v NetWare uzivatele. Spustite tedy SYSCON a vyrobite uzivatele. SYSCON tedy v bindery vyrobi object USER. Tento object dostane take property IDENTIFICATION (full name), PASSWORD (heslo), GROUPS_I'M_IN (...), LOGIN_CONTROL, SECURITY_EQUALS, ...atd. Aby se odlisily ruzne objekty od sebe (user, grp, printer), maji pridelena identifikacni cisla typu - uzivatel 0x1, group 0x2, file server 0x4; Dale ma kazdy objekt vlastni identifikacni cislo (long), ktere je v bindery vzdy jedinecne. Toto cislo je neco jako uid v unixu. Kazdy objekt a kazda property maji take informace o pravech r/w. Muzete nastavit prava All/Logged_in/User/Supervisor/Bindery_only. Prava u objektu znamenaji, zda je dany objekt videt a muzete cist jake ma properties. U jednotlivych properties pak zda muzete cist/modifikovat jejich obsah. Objekt/property s read All muze byt cten i kdyz neni user k serveru prilogovan. Read/Logged_in je myslim jasne, User znamena osobu, ktere ty properties/objekt patri, Supervisor je jasny a bindery only je neco ve smyslu "Nechci, aby administrator vedel, ze tady mam account". Vyuziti tohoto access prava je myslim jasne :-).Kazdy objekt muze byt bud' static, nebo dynamic. Static objekty jsou v bindery nastalo, dynamic se pri uzavirani bindery mazou. Do bindery muze zapisovat jen supervisor/server. Pokud jste na serveru, muzete si z bindery delat co chcete a s nejvyssimi moznymi pravy.

Vetsinou nevznikaji v bindery diry diky spatnym pravum cteni/zapis, nebot 99% adminu nema predstavu ze neco takoveho existuje a syscon velke boty nedela. Nejvice der udelaji do site crackeri. Obcas dela ale boty server, takze se cas od casu objevuji nedekodovana hesla v ruznych properties bindery, pokud mozno world readable. Zajimava chybka...

S bindery se taky velmi lehce pracuje. Doporucuji si stahnout z developer.novell.com SDKcko pro DOS a OS/2. V SDKcku najdete knihovny pro praci se siti, tedy vcetne bindery. Vsechny funkce jsou v souboru nwbindry.h. Neni snad treba zadne dalsi vysvetleni. Snad bych se jeste mohl zastavit u funkci OpenBindery() a CloseBindery(). Tyto dve funkce umoznuji otevirat a zavirat $SUBJ (kupodivu). Pokud je bindery uzavrena, je mozne z disku cist soubory s bindery. Jinak jsou tyto soubory uzamcene a nelze s nimi pracovat. Tyto funkce muze volat pouze SUPERVISOR equivalent (resp. i normalni uzivatel, ale neudelate to standardni cestou). Po dobu, kdy je bindery uzavrena, neni mozne se na server prilogovat. Uzavreni bindery mimo jine zpusobi pripadne odemceni konzole serveru (nelze verifikovat heslo SUPERVISORA).

Jak je $SUBJ resen na urovni serveru? Cela bindery je ulozena v adresari SYS:SYSTEM/, konkretne v souborech NET$OBJ.SYS, NET$PROP.SYS a NET$VAL.SYS. Vyznam je jasny, ne? Struktura techto souboru AFAIK nebyla nikdy firmou Novell zverejnena, ale je jiz davno znama. Pro uplnost:

 ObjectRecord=RECORD             // NET$OBJ.SYS
     ObID           :Longint;
     ObType         :Word;
     ObName         :String[47];
     ObFlag         :Byte;
     ObAccess       :Byte;
     FirstProperty  :Longint;
     Free           :Longint;
 end;

 PropRecord=RECORD
     ID             :Longint;
     Name           :String[15];
     Flag           :Byte;
     Access         :Byte;
     BackLink       :Longint;
     Next           :Longint;
     Value          :Longint;
 end;

 ValRecord=RECORD
     ID            :Longint;
     BackLink	   :Longint;
     Next          :Longint;
     Segment       :Word;
     value         :array[0..127] of byte;
 end;
Omlouvam se za ten pascal, ale nechce se mi hledat C verze :(. Zdrojak jsem si vypujcil z Bindery Scalpela. Scalpel (dale jen SC) je vyborny program na analyzu netwarovske site 3.x. Kde SC roste nevim, ale mohl by byt na hysterii, posilal jsem ho tam pajkovi. Co s nim ten udelal, to uz nevim. Na pokusy je dobre mit nejakou jiz existujici bindery, ve ktere je pokud mozno nekolik stovek objektu. Takoveto bindery (ne)ochotne poskytuje vetsina skol, staci si je jen stahnout. Popripade si muzete rict novellum a vyzebrat od nich NetWare demo 2 users. Pak si ovsem tu bindery musite vyrobit.

Zajimave to je u NetWare 4.x, kde bindery zastoupila NDSka (NetWare directory services). Tam je bindery emulovana, aby se bylo mozne na server prihlasit i ze starsich klientu. Pokud mate zajem podobne popsat i NDSku, poslete mi email. Doufam, ze se takovy zoufalec nenajde.


Copyright (c) 1998 MATTsoft, All rights reserved