OSI:Gate-vpn/Instalace tacacs nefunkcni
Obsah
|
Prozkoumání nové verze TACACS+ F4.0.4.19 a otestování možnosti použití
Testováno na Debianu 5.0.3 (lenny).
Upřesnění zadání
Hlavním úkolem je, prozkoumat nejnovější verzi TACACS+ a to verzi F4.0.4.19 a hlavně pokusit se nalézt způsob převodu ze starší verze - F4.0.3.alpha.8.gts4 do této aktuální verze. Což znamená, nalézt způsob, jak použít/upravit konfigurační soubor ze starší verze při zachování stejné funkčnosti tak, aby bez problémů fungoval i pro aktuální verzi. Doporučeno je nejdříve zkusit najít nějaký parametr aktuální verze nebo jiný způsob bez úpravy konfiguračního souboru a pokud by to nebylo možné, tak pak se pokusit upravit tento soubor (při zachování původní funkčnosti), aby jej bylo možné pro aktuální verzi použít.
Instalace a poznámky k rozchození této verze TACACS+
Zde jen pro pořádek uvádím poznámky k instalaci + případné problémy, s kterými jsem se potýkal a které mohou nastat uživateli, který by se s TACACS+ (v. F4.0.4.19) setkal také poprvé.
Instalace TACACS+ F4.0.4.19 v Debianu
- instalace potřebných knihoven:
# apt-get install libwrap0-dev gcc make libc6-dev
- nakopírování archívu a vlastní instalace:
# cp tacacs+-F4.0.4.19.tar.gz /usr/src # cd /usr/src # tar xvfz tacacs+-F4.0.4.19.tar.gz # cd tacacs+-F4.0.4.19 # ./configure # make install
Komplikace po instalaci
Po nainstalování a následném spuštění tac_plus se mi objevila následující chyba:
tac_plus: error while loading shared libraries: libtacacs.so.1: cannot open shared object file: No such file or directory
Řešení jsem nalezl na stránkách www.shrubbery.net :
# ldconfig -v
Teď již jsem tac_plus mohl bez problémů spustit.
Testování konfiguračního souboru TACACS+ z verze F4.0.3.alpha.8.gts4 ve verzi F4.0.4.19
Při standardním spuštění tac_plus s přiloženým konfiguračním souborem
# tac_plus -C tac_plus.cfg
se vypsala následující chybová hláška:
on line 3ecognised token
Dále jsem postupně upravoval pomocnou kopii konfiguračního souboru dle výskytu chyb a následně testoval a objevil jsem následující chyby:
- Problémy s bílými znaky - většinou problémy s odřádkováním, kdy i u korektního zápisu a korektní syntaxe (dle nápovědy) vyskočí chybová hláška. Tento problém jsem většinou vyřešil při úpravě konfiguračního souboru v textovém editoru v debianu, kdy jsem nahradil původní odřádkování novým odřádkováním a některé prázdné řádky zcela zrušil. Tento problém pravděpodobně vzniknul při předchozí editaci, nebudu jej tedy brát jako zásadní narozdíl od následujících problémů.
- Neznámý token authorization - kdy se vypíše následující chybová hláška:
Error: Unrecognised token authorization on line <number>
- Duplikovaná hodnota member - pokud se na jednom místě nachází member 2x za sebou. Pak se vypíše:
Error: Duplicate value for <string> '1.hodnota' and '2.hodnota' on line <number>
- Neznámé keyword when - kdy se vypíše následující chybová hláška:
Error: Unrecognised keyword when on line <number>
- Neznámé keyword enlist - kdy se vypíše následující chybová hláška:
Error: Unrecognised keyword enlist on line <number>
Problémy 2 - 5 vypadají na změnu gramatiky konfiguračního souboru v této verzi. Při zběžném shlédnutí manuálu ke gramatice TACACS+
# man tac_plus.conf
jsem opravdu tyto výrazy nikde nenašel. Pro toto testování jsem použil:
#tac_plus -C tac_plus.cfg -P
Řešení pomocí parametrů - náhled na parametry TACACS+
Nejdříve jsem se zaměřil na parametry testované verze TACACS+, zda by jejich pomocí nešel tento problém vyřešit. Veškeré informace o parametrech tac_plus jsem čerpal z nápovědy
# man tac_plus
Syntaxe zápisu tac_plus s příslušnými parametry je následující:
tac_plus -C <configfile> [-GghiLPSstv] [-B <bind_address>] [-d <level>] [-l <logfiles>] [-p <tcp_port>] [-u <wtmpfile>] [-w <wholog>]
Dále stručný popis těchto parametrů (aby nevznikly nepřesnosti vlivem překladu, uvedu zde originální nepřeložený popis z výše uvedené nápovědy):
- -C <configfile> - Specify the configuration file name. This is required.
- -B <bind address> - Specify the address on which the daemon should bind.
- -G - Remain in the foreground, but not single-threaded nor logging to the tty.
- -d <level> - Switch on debugging. By default the output will appear in the log file and syslog.
- -g - Single threaded mode. The deamon will only accept and service a single connections at a time without closing file descriptors. All log messages appear on standard output.
- -h - Display help messages.
- -i - tac_plus will be run from inetd. In inetd mode, the configuration file is parsed every time tac_plus starts.
- -l <logfile> - Specify an alternate log file location. This file is only used when the -d option is used. The logs are still posted to syslog.
- -L - Lookup DNS PTR (Domain Name System PoinTeR) record of client addresses. The resulting FQDN(Fully Qualified Domain Name), if it resolves, will be used in log messages, libwrapp(tcp_wrappers) checks, and for matching host clauses of the configuration file.
- -P - Parse the configuration file, echo it to standard output while parsing, and then exit. tac_plus will exit non-zero when a parser error occurs.
- -p <port> - Listen on the specified port number instead of the default port 49 for incoming tcp connections.
- -S - Enables or allows client single-connection mode, where-by the client will create one connection and interleave queries.
- -s - Causes the daemon to always reject authentication requests which contain a minor version number of zero (SENDPASS). This enhances security in the event that someone discovers your encryption key. SENDPASS requests permit requesters to obtain CHAP, PAP and ARAP passwords from the daemon, iff the encryption key is known.
- -t - Log all information, debugging or error messages to /dev/console in addition to logging to syslog. Useful for debugging.
- -u <wtmpfile> - Write wtmp entries to the specified wtmp file.
- -v - Display version information and exit.
- -w <wholog> - Specify the location of the max session file.
Všechny výše zmiňované parametry jsem zkoušel při testování. Jediné parametry, které přímo souvisí s načítáním konfiguračního souboru jsou -C a -P (význam zřejmý viz výše), kdy ani jeden z těchto parametrů neřeší problém neznámých výrazů v konfiguračním souboru. Ostatní parametry již svým popisem evidentně s načítáním konfiguračního souboru nesouvisí, mají význam již spíše za běhu tac_plus (takže bráno po bezchybném načtení konfiguračního souboru). I při testování každého z těchto dalších parametrů jsem si ověřil, že nemají na načtení konfiguračního souboru žádný vliv. Jak je tedy vidět, zřejmě tento problém nebude řešitelný použitím nějakého parametru. Proto se v další části zaměřím na gramatiku konfiguračního souboru této aktuální verze TACACS+ a zda bych nenašel alternativní výrazy k těm, které tato verze z dodaného konfiguráku nezná.
Porovnání verzí TACACS+ - F4.0.3.alpha.8.gts4 a TACACS+ - F4.0.4.19
V této části jsem se snažil prostudovat dokumentace a manuály k oběma verzím TACACS+ a nalézt v aktuální verzi alternativy pro problémová klíčová slova a tokeny (viz výše) ze starší verze používané ve škole.
Při podrobnějším prostudování souboru tac_plus-F4.0.3.alpha.8.gts4.diff jsem našel v čem bude asi hlavní problém. Tento soubor je vlastně patch k verzi TACACS+ F4.0.3. Obsahuje implementaci vlastních klíčových slov a vlastních konstrukcí, které nejsou ve standardních verzí TACACS+ zahrnuty (alespoň tedy ve verzích F4.0.3. a F4.0.4.19, které jsem podrobněji zkoumal, nejsou).
Konkrétně vybráno z changelogu verze F4.0.3.alpha.8.gts4:
- multiple "member" keyword memberships supported
- "enlist" keyword supported to specify reverse memberships
- "host" entity unified with "user"/"group" entities
- "when" blocks implemented for NAS host based configuration
- "authorization = recursive" implemented for full recursivity
- line-trailing white spaces removed
Jak je vidět, všechny problémy v konfiguračním souboru zmíněné výše souvisí se změnami v tomto patchi oproti standardním verzím TACACS+. Protože tato klíčová slova mají vlastní složitější implementaci (to znamená, že přímo nenahrazují určitá klíčová ze standardní verze, ale mají buď novou funkčnost nebo stávající funkčnost nějakým způsobem rozšiřují) bude nalezení alternativy k nim ve standardní verzi F4.0.4.19 poměrně složité.
Neznámý token authorization (příkaz authorization = recursive)
Tato konstrukce (platná pouze ve verzi F4.0.3.alpha.8.gts4) je něco jako globální rekurzivní autorizace. Umožňuje tzv. Full recursivity (bližší popis v příslušné dokumentaci, zde to není až tak důležité).
Tento příkaz je možné ve standardní verzi (tj. i v testované verzi F4.0.4.19) vynechat, protože vnitřní rekurzivní autorizace je zde implicitně podporována. Rekurzivní autorizace je zde chápána např. jako proces, kdy pokud demon nenalezne potřebné autorizační parametry přímo v deklaraci uživatele, tak se podívá po těchto parametrech v group, kde je daný uživatel umístěn.
na příkladě:
user = fred { member = group1 } group = group1 { . . }
=> Pokud nenalezne demon autorizační parametry přímo v deklaraci uživatele fred tak se podívá do skupiny group1 jíž je fred členem
( member = group1
).
Duplikace klíčového slova member
Toto je další vylepšení/změna v GTS patchi (= vícenásobné použití klíčového slova member).
Pokud mám vícenásobný member například u user, pomůžu si pomocnými group. Řešení demonstrováno na příkladě:
user = fred { login = des AbCd pap = des AbCd member = group1 member = group2 }
=> toto vícenásobné member by fungovalo v GTS patchi.
user = fred { login = des AbCd pap = des AbCd member = group1 } group = group1 { member = group2 } group = group2 { . . }
=> takhle se přepíše dvojnásobný member tak, aby fungoval i ve standardní verzi TACACS+
Neznámá klíčová slova enlist a when a s tím související změna u host
Protože spolu tato klíčová slova úzce souvisí, uvádím je zde spolu. Tato klíčová slova se opět vyskytují pouze v GTS verzi, kde jsou implementována.
Klíčové slovo enlist je vhodné použít, pokud chceme, aby daná skupina (group) obsahovala jen některé členy (users, hosts nebo groups), ale nechceme pro ně specifikovat žádné atributy. To je nejlépe proveditelné právě pomocí enlist:
group = city_X_NASes { enlist = host first.NAS.X.city enlist = host first.NAS.X.city }
Máme následující srovnání:
- member - Aktuální entita je připojena jako CHILD ke specifické PARENT entitě.
- enlist - Specifická entita je připojena jako CHILD k aktuální PARENT entitě.
Klíčové slovo host je sice použito i ve standardní verzi, ale zde v GTS patchi je jeho použití rozšířeno tak, aby fungovalo i s entitami group a user.
Význam klíčového slova when je, jak lze předpokládat - podmínka. Má strukturu:
when = CONDITION { BLOCK }
Konkrétně:
group = my_group { enlist = host 192.168.1.1 } group = other_group { } user = my_name { login = des ABCD when = group my_group { member = other_group } }
kdy member = other_group
se provede pouze tehdy, pokud user = my_name
(logicky - nachází se to v bloku tohoto uživatele) a host - 192.168.1.1
(prostě všechny host, group nebo user ze skupiny my_group)
Bohužel, pro tuto konstrukci jsem nenašel žádnou alternativu ve standardním TACACS+ serveru. Bylo mi to i potvrzeno spoluautorem GTS patche.
Závěr
Na závěr bych jen v krátkosti shrnul čeho bylo dosaženo:
Tuto aktuální verzi jsem do jisté míry prozkoumal, objevil a vyřešil jsem nějaké problémy již při instalaci, které jsem zde zmínil, i když se samotným tématem moc nesouvisí. Dále jsem prozkoumal parametry a jejich použití, které jsem zde také uvedl a ověřil jsem si, že parametry mi tento problém nevyřeší. Proto jsem se vrhl na prozkoumávání gramatiky konfiguračního souboru a určení problematických míst, které jsem zde také uvedl. Nakonec jsem srovnával tyto dvě verze a hledal alternativy v té aktuální. Bohužel, pro některé problémy jsem je nenašel. Hlavním důvodem zde je hlavně to, že starší verze je s GTS patchem, který zde zavádí své "nestandardní" (nestandardní vůči původní verzi TACACS+) klíčová slova a funkčnosti, ke kterým není ve standardní verzi TACACS+ žádná alternativa.
Myslím si, že nejlepší řešením bude zůstat u verze F4.0.3.alpha.8.gts4, pokud poskytuje požadovanou funkčnost. Při prozkoumávání verze F4.0.4.19 jsem nenarazil na moc odlišností od verze F4.0.3, která je opatchována GTS patchem a hlavně si myslím, že by jiná řešení byla zbytečně složitá.