Kontrola bezicich sluzeb (watchmen)

Dan Lukes dan at obluda.cz
Thu Sep 9 18:11:57 CEST 2010


On 09/09/10 17:28, Miroslav Prýmek:
>
> On 9.9.2010, at 16:35, Dan Lukes wrote:
>> No, jedna cesta je "vepsat" do onoho programu funkcionalitu getty - to
>> znamena vzit posledni parametr, zavolat nejake ty chown() a chmmod() - a
>> hlavne - revoke() a mozna jeste par dalsich veci - to by se nejlepe
>> ukradlo ze samotneho getty.
>>
>> Nenech se zmast jeho rozsahlosti - velkou vetsinu jeho funkcnosti ty
>> nepotrebujes, bylo by to jen par radek.
>
> Aha, ja jsem myslel, ze kolem toho "pripojeni na terminal" je nejaka magie
> podobne jako u emulatoru terminalu... Ze proste getty dela neco tajemnyho :)

To samozrejme getty dela, nebo spis - muze delat - jenze to je docela 
obycejne proto, ze pro nej je terminalem nejen ta rozsirena PC 
klavesnice s VGA monitorem, ale take prehrsel nejruznejsich terminalu 
pripojenych seriovou linkou. Nekdy se znamou rychlosti, jindy ma 
terminal priprietarni zpusob jak rychlost "autodetekovat". A aby to 
jeste bylo komplikovanejsi - terminal je pripojeny nikoliv nutne lokalne.

getty je navrzeno i na variantu, ze na tom seriaku nas pripojeny modem a 
na ten odnekud zavolas - a tam nekde mas (zase modemem) teprve pripojeny 
ten terminal. A ten modem musi getty spravne inicializovat a obsluhovat.

A aby toho jeste nebylo dost - getty pocita, ze takhle na dalku na nej 
nikoliv nutne mluvis textove - muzes do toho modemu zacit piskat PPP - a 
i na to umi zareagovat.

Nahlednuto z tohohle uhlu je prekvapive jak male ty zdrojaky jsou.

Jo, prapredci (getty je, z velke casti, jeden z nejstarsich pudovnich 
kodu, ktere muzes ve zdrojacich FreeBSD najit) nebyli zadni pitomci.

Jenze - pro tvoje ucely z toho nepotrebujes prakticky nic. Nemam to chut 
ted pokusne psat, ale bude tam neco jako, ze vezmes jmeno zarizeni na 
kterem bezis (argv[2]), upravis u nej vlastnika a prava (chmod/chown) 
nasilim uzavres vsechny descriptory, kter eby na nej nekdo mohl mit 
otevrene (revoke() - to kvuli bezpecnosti), otevres ho tak abys ziskal 
tri standardni descriptory a vyrobis nejmene environmentovou promennou 
TERM i kdyz mozna by jich bezny program uvital trochu vic (man 7 
environ). Nakonec zavolat tcsetattr() (u fixniho znameho typu terminalu 
budou i poskytovane parametry konstanty) a pak uz muzes pokracovat 
"normalnim kodem" tak, jak byl v programu puvodne.

					Dan




More information about the Users-l mailing list