service login
Íà÷èíàÿ ñ ñåíòÿáðÿ 2002 ãîäà â äèñòðèáóòèâ ïðîãðàììíîãî êîìïëåêñà NeTAMS áûë âêëþ÷åí ñåðâèñ weblogin è ñîîòâåòñòâóþùèé íàáîð ñêðèïòîâ äëÿ óïðàâëåíèÿ ïðîöåäóðàìè äîñòóïà ïîëüçîâàòåëåé ÷åðåç âåá-èíòåðôåéñ. Õîòÿ ïîäîáíûé èíñòðóìåíòàðèé è ïîëüçîâàëñÿ ïîïóëÿðíîñòüþ, îí áûë äàëåê îò ñîâåðøåíñòâà. Òàê, íàñòðîéêà ýòîãî ñðåäñòâà äëÿ áîëüøîé ñåòè òðåáîâàëà çíà÷èòåëüíûé óñèëèé è óâåëè÷åíèþ ðàçìåðà êîíôèãóðàöèîííîãî ôàéëà.  ðåçóëüòàòå, áëàãîäàðÿ ìíîãî÷èñëåííûì ïîæåëàíèÿì ïîëüçîâàòåëåé, ìåõàíèçì àâòîðèçàöèè ðåøåíî áûëî èçìåíèòü. Ïðè ýòîì áûë íàïèñàíî íîâûé ñåðâèñ, à íå ïåðåäåëàí ñòàðûé. Íîâûé ñåðâèñ íàçûâàåòñÿ
login.
Îñíîâíûå ñâîéñòâà:
- Õðàíåíèå èíôîðìàöèè î äîñòóïå êëèåíòîâ â áàçå SQL.
- Âîçìîæíîñòü çàäàíèÿ ïåðñîíàëüíûõ çíà÷åíèé òàéìàóòà íåàêòèâíîñòè è àáñîëþòíîãî òàéìàóòà. Ïðè ýòîì îáà ýòè çíà÷åíèÿ ìîãóò áûòü ðàâíû íóëþ (òàéìàóòû íå äåéñòâóþò), à ñåðâèñ áóäåò çàíèìàòüñÿ èñêëþ÷èòåëüíî àâòîðèçàöèåé.
- Íàëè÷èå çíà÷åíèé òàéìàóòîâ ïî óìîë÷àíèþ, è óñòàíîâêà ãðàíè÷íûõ çíà÷åíèé. Ïîëüçîâàòåëü ìîæåò èìåòü âîçìîæíîñòü ìåíÿòü çíà÷åíèÿ ñàìîñòîÿòåëüíî (â òî âðåìÿ êàê ñêðèïò äëÿ òîãî åùå íå íàïèñàí)
- Ïåðåíîñ áëîêèðîâêè èç ñôåðû ñèñòåìíûõ ïîëèòèê íà îòäåëüíûé óðîâåíü, ÷òî ïîçâîëèò îäíîâðåìåííî èñïîëüçîâàòü ñåðâèñû login è quota
- Ïîääåðæêà òèïà þíèòà unit user, ÷òî äàåò âîçìîæíîñòü "ðîóìèíãà" ïîëüçîâàòåëåé, ò.å. àâòîðèçàöèè ñ ëþáîé ìàøèíû â ñåòè ïðè ïðèâÿçêå ñòàòèñòèêè íå ê IP-àäðåñó, à ê ïîëüçîâàòåëþ.
Ïåðâîíà÷àëüíûé çàïóñê ñåðâèñà login ïðè ðàáîòàþùåé ïðîãðàììå íåâîçìîæåí. Âàì íåîáõîäèìî âðó÷íóþ èçìåíèòü êîíôèãóðàöèîííûé ôàéë è ïåðåçàïóñòèòü NeTAMS. Äîïóñòèì, ÷òî äàííûå óæå õðàíÿòñÿ â áàçå äàííûõ MySQL, îïðåäåëåííîé â ñåðâèñå data-source ñ íîìåðîì 2:
service data-source 2
type mysql
Äëÿ ñòàðòà ñåðâèñà login íåîáõîäèìî áóäåò óêàçàòü íîìåð ñåðâèñà-õðàíèëèùà äàííûõ:
service login 0
storage 2
Ïîñëå ýòèõ îïåðàöèé çàïóñòèòå NeTAMS. Âñå îñòàëüíûå íàñòðîéêè ìîæíî âûïîëíèòü ïðè ðàáîòàþùåé ïðîãðàììå. Ïðîâåðèòü, ðàáîòàåò ëè ñåðâèñ, ìîæíî:
- Ïðîñìîòðîì ëîã-ôàéëà ïðîãðàììû
- Ïðîñìîòðîì ñïèñêà òàáëèö SQL-áàçû NeTAMS: mysqlshow netams (äîëæíà ïîÿâèòüñÿ òàáëèöà `login')
- Ïîäêëþ÷èâøèñü ê ïðîãðàììå ÷åðåç telnet-èíòåðôåéñ è âûïîëíèâ êîìàíäó show config
Êîìàíäû íàñòðîéêè ñåðâèñà login, êîòîðûå ñîõðàíÿþòñÿ â êîíôèãóðàöèîííîì ôàéëå, ïðèâîäÿò òîëüêî ê óñòàíîâêå ñîîòâåòñòâóþùèõ ïàðàìåòðîâ ñåðâèñà, íî íå áîëåå. Ñîáñòâåííî äëÿ îáåñïå÷åíèÿ àâòîðèçàöèè îòäåëüíûõ êëèåíòîâ íåîáõîäèì îòäåëüíûé íàáîð êîìàíä, êîòîðûå çàäàþòñÿ â êîíòåêñòå âñå â òîì æå ñåðâèñå login. Âñÿ èíôîðìàöèÿ î ïàðîëÿõ ïîëüçîâàòåëåé è èõ ïðàâàõ äîñòóïà è çíà÷åíèÿõ òàéìàóòîâ õðàíèòñÿ â SQL-òàáëèöå login. Åå ôîðìàò ïðèâåäåí íèæå:
+------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| unit_oid | int(10) unsigned | | PRI | 0 | |
| password | varchar(32) | YES | | NULL | |
| inact | int(10) unsigned | YES | | NULL | |
| abs | int(10) unsigned | YES | | NULL | |
| last_changed | int(10) unsigned | YES | | NULL | |
| last_opened_time | int(10) unsigned | YES | | NULL | |
| last_opened_ip | int(10) unsigned | YES | | NULL | |
| last_opened_mac | varchar(18) | YES | | NULL | |
| def_state | int(11) | YES | | NULL | |
| curr_state | int(11) | YES | | NULL | |
+------------------+------------------+------+-----+---------+-------+
- unit_oid - Èäåíòèôèêàòîð (OID) þíèòà, ÿâëÿåòñÿ óíèêàëüíûì êëþ÷îì ê áàçå äàííûõ
- password - Ïàðîëü ïîëüçîâàòåëÿ. Íèêîãäà íå ïûòàéòåñü ïîìåíÿòü åãî èçâíå ïðîãðàììû ïóòåì ïðÿìîé çàïèñè â SQL.
- inact - Âåëè÷èíà òàéìàóòà íåàêòèâíîñòè äëÿ äàííîãî ïîëüçîâàòåëÿ
- abs - Âåëè÷èíà àáñîëþòíîãî òàéìàóòà äëÿ äàííîãî ïîëüçîâàòåëÿ
- last_changed - Âðåìÿ (â ôîðìàòå UNIXTIME) ïîñëåäíåãî èçìåíåíèÿ çàïèñè
- last_opened_time - Âðåìÿ (â ôîðìàòå UNIXTIME), êîãäà áûë â ïîñëåäíèé ðàç ïðåäîñòàâëåí äîñòóï þíèòó
- last_opened_ip - IP-àäðåñ, ñ êîòîðîãî áûë ïðåäîñòàâëåí äîñòóï þíèòó
- last_opened_mac - MAC-àäðåñ, ñ êîòîðîãî áûë ïðåäîñòàâëåí äîñòóï þíèòó
- def_state - Ðåæèì äîñòóïà ýòîãî þíèòà ïî óìîë÷àíèþ (íàïðèìåð, ñðàçó ïîñëå ñòàðòà ïðîãðàììû). 0 îçíà÷àåò îòñóòñòâèå äîñòóïà, 1 îçíà÷àåò ðàçðåøåíèÿ äîñòóïà.
- curr_state - Òåêóùèé ðåæèì äîñòóïà ýòîãî þíèòà. 0 îçíà÷àåò îòñóòñòâèå äîñòóïà, 1 îçíà÷àåò ðàçðåøåíèÿ äîñòóïà. Ê ñîæàëåíèþ, ïî íàñòóïëåíèè òàéìàóòà íå ñáðàñûâàåòñÿ (áàã).
Ïðè ñòàðòå ñåðâèñà ïðîèñõîäèò ñ÷èòûâàíèå âñåõ äîñòóïíûõ çàïèñåé î þíèòàõ èç áàçû SQL/òàáëèöû "login" â ïàìÿòü ïðîãðàììû è çàïîëíåíèå ñîîòâåòñòâóþùèõ ïîëåé â ñòðóêòóðàõ, îïèñûâàþùèõ þíèòû. Åñëè äëÿ êàêîãî-òî þíèòà íåò èíôîðìàöèè î òàéìàóòàõ (ò.å. ñîîòâåòñòâóþùåé ïî èíäåêñó OID ñòðîêè â òàáëèöå), òî äëÿ äàííîãî þíèòà ñåðâèñ login íå áóäåò ðàáîòàòü è âîïðîñ î äîñòóïå áóäåò îïðåäåëÿòüñÿ ðàáîòîé äðóãèõ ìåõàíèçìîâ (fw-policy, sys-policy, quota è ïð.). Ýòî îáåñïå÷èâàåò "ïðîçðà÷íóþ" ðàáîòó óæå íàñòðîåííîé ñèñòåìû.
Äëÿ ñëó÷àÿ, êîãäà â áàçå äàííûõ åñòü çàïèñü î þíèòå, èíôîðìàöèÿ î òàéìàóòàõ è ïàðîëå êîïèðóåòñÿ â ñîîòâåòñòâóþùèå ïîëÿ äàííûõ î þíèòå. Ïðè ýòîì òåêóùåå ñîñòîÿíèå äîñòóïà (u->logindata->c_state) ñòàíîâèòñÿ ðàâíûì çíà÷åíèþ ïî óìîë÷àíèþ (def_state èç òàáëèöû). Êàæäûå delay ñåêóíä ñåðâèñ ïðîâåðÿåò âîçìîæíîñòü äîñòóïà, è ïðè íåîáõîäèìîñòè îòêëþ÷àåò þíèò îáíóëåíèåì ïåðåìåííîé u->logindata->c_state. Îíà ïðîâåðÿåòñÿ ïðè êàæäîì ïðîõîæäåíèè ïàêåòà ñåðâèñîì data-source.
Íå ïûòàéòåñü ðåäàêòèðîâàòü SQL-òàáëèöó login èçâíå ñâîèìè ïðîãðàììàìè. Âñå çàïèñè äîëæíû âíîñèòüñÿ ñêðèïòàìè èëè âðó÷íóþ ÷åðåç telnet-èíòåðôåéñ ïðîãðàììû. Äëÿ ýòîãî ñóùåñòâóåò òðè êîìàíäû ñåðâèñà login: set, login è logout. Èõ ïîâåäåíèå è ïàðàìåòðû îïèñàíû íèæå.
Äëÿ ïîëíîãî êîíòðîëÿ íàä ïðîöåññîì ëîãèíîâ è çàïèñè âñåé ñëóæåáíîé èíôîðìàöèè â ëîã-ôàéë è êîíñîëü ñëóæèò íîâûé ïàðàìåòð âñòðîåííîãî îòëàä÷èêà "debug login"
Äëÿ âûâîäà èíôîðìàöèè î ëîãèíàõ ñëóæèò êîìàíäà (ãëîáàëüíàÿ, ÍÅ ñåðâèñà login) "show login {name AAA | oid BBBB}"
Íàïèñàíèå àäìèíèñòðàòîðñêîãî âåá-èíòåðôåéñà ïî ïðèâÿçêå þíèòîâ ê ñåðâèñó ëîãèíîâ è êëèåíòñêîãî ïî óïðàâëåíèþ ïàðîëÿìè è ïàðàìåòðàìè îñòàâëÿåòñÿ íà ïîòðåáèòåëÿ ïðîãðàììû NeTAMS. Â íàñòîÿùèé ìîìåíò ðåàëèçîâàí òîëüêî ïðèìèòèâíûé ñêðèïò âåá-àâòîðèçàöèè ïî ïàðîëþ. Îí èäåò â êîìïëåêòå ïîñòàâêè NeTAMS â êàòàëîãå cgi-bin/ è íàçûâàåòñÿ login.cgi. Ñêðèïò òðåáóåò ôàéëîâ logo-small.gif è netams_api.pl (ïîñëåäíåé âåðñèè), êîòîðûå íàõîäÿòñÿ â òîì æå êàòàëîãå.
Äëÿ ðàáîòû ñêðèïòà íóæåí âåá-ñåðâåð, èíòåðïðåòàòîð Perl è ïðÿìûå ðóêè àäìèíèñòðàòîðà. Ðåêîìåíäóåòñÿ:
- Èñïîëüçîâàòü ïðîòîêîë HTTPS äëÿ äîñòóïà ê ñêðèïòó àâòîðèçàöèè
- Íàñòðîèòü äîñòóï ê ñòàòèñòèêå è ê ñêðèïòó "â îáõîä" NeTAMS, ÷òîáû íå ñ÷èòàëñÿ äàííûé ñëóæåáíûé òðàôèê è ðàáîòàëà âîçìîæíîñòü ëîãèíà ïðè ïðåäâàðèòåëüíî îòêëþ÷åííîì ïîëüçîâàòåëå.
- Ñäåëàòü ïðîñòîé URL è ðàçäàòü åãî êëèåíòàì äëÿ âûñòàâëåíèÿ èêîíêè íà desktop, íàïðèìåð https://loginserver/login.cgi
Íåîáõîäèìî èñïðàâèòü íåñêîëüêî ïåðâûõ ñòðî÷åê ñêðèïòà ñ óêàçàíèåì ïàðàìåòðîâ ïîäêëþ÷åíèÿ è ïóòåé äî êàòàëîãà ñî ñòàòèñòèêîé; ìîæíî òàêæå èñïðàâèòü åãî HTML-èíòåðôåéñ.
Íàïèñàíèå ñêðèïòà àâòîìàòè÷åñêîãî ëîãèíà ïîëüçîâàòåëÿ ïðè âõîäå â âèíäîâñ, èëè ïðè àâòîðèçàöèè â äîìåíå Windows (÷åðåç ñêðèïò ïðîôèëÿ èëè ãðóïïîâóþ ïîëèòèêó) îñòàâëÿåòñÿ íà ñîâåñòè çàèíòåðåñîâàííûõ ëèö.
default-inact N
Óñòàíàâëèâàåò çíà÷åíèå âðåìåíè íåàêòèâíîñòè êëèåíòà ïî óìîë÷àíèþ. Ïðèìåíÿåòñÿ, åñëè ïðè íàñòðîéêå ïàðàìåòðîâ ñåðâèñà login äëÿ çàäàííîãî þíèòà íå áûëî óêàçàíî êîíêðåòíîå âðåìÿ íåàêòèâíîñòè. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 0.
default-abs N
Óñòàíàâëèâàåò çíà÷åíèå âðåìåíè àáñîëþòíîãî òàéìàóòà êëèåíòà ïî óìîë÷àíèþ. Ïðèìåíÿåòñÿ, åñëè ïðè íàñòðîéêå ïàðàìåòðîâ ñåðâèñà login äëÿ çàäàííîãî þíèòà íå áûëî óêàçàíî êîíêðåòíîå âðåìÿ àáñîëþòíîãî òàéìàóòà. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 0.
max_inact N
Ìàêñèìàëüíî äîïóñòèìàÿ âåëè÷èíà âðåìåíè òàéìàóòà íåàêòèâíîñòè, èñïîëüçóåòñÿ ïðè ïðîâåðêå êîððåêòíîñòè ââåäåííîãî ïîëüçîâàòåëåì (îïåðàòîðîì) çíà÷åíèÿ. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 43200 ñåê = 12*60*60.
min_inact N
Ìèíèìàëüíî äîïóñòèìàÿ âåëè÷èíà âðåìåíè òàéìàóòà íåàêòèâíîñòè, èñïîëüçóåòñÿ ïðè ïðîâåðêå êîððåêòíîñòè ââåäåííîãî ïîëüçîâàòåëåì (îïåðàòîðîì) çíà÷åíèÿ. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 60 ñåê.
max_abs N
Ìàêñèìàëüíî äîïóñòèìàÿ âåëè÷èíà âðåìåíè àáñîëþòíîãî òàéìàóòà, èñïîëüçóåòñÿ ïðè ïðîâåðêå êîððåêòíîñòè ââåäåííîãî ïîëüçîâàòåëåì (îïåðàòîðîì) çíà÷åíèÿ. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 1036800 ñåê = 24*12*60*60.
min_abs N
Ìèíèìàëüíî äîïóñòèìàÿ âåëè÷èíà âðåìåíè àáñîëþòíîãî òàéìàóòà, èñïîëüçóåòñÿ ïðè ïðîâåðêå êîððåêòíîñòè ââåäåííîãî ïîëüçîâàòåëåì (îïåðàòîðîì) çíà÷åíèÿ. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 60 ñåê.
min_passwd_length N
Ìèíèìàëüíî äîïóñòèìàÿ äëèíà ïîëüçîâàòåëüñêîãî ïàðîëÿ. Ïî óìîë÷àíèþ ðàâíî 3 ñèìâîëîì, îäíàêî â íàñòîÿùèé ìîìåíò ïðîâåðêè íå ïðîèçâîäèòñÿ.
delay N
Èíòåðâàë âðåìåíè ìåæäó ïåðèîäè÷åñêèìè ïðîâåðêàìè âñåõ þíèòîâ íà íàñòóïëåíèå òàéìàóòà. Çàäàåòñÿ â ñåêóíäàõ. Ïî óìîë÷àíèþ çíà÷åíèå 10 ñåê.
relogin {yes|no}
Ðàçðåøàòü ëè ïîâòîðíûé ëîãèí äëÿ àáîíåíòà, êîòîðûé ñ÷èòàåòñÿ óæå çàëîãèíåííûì? Ïî óìîë÷àíèþ "äà".
set-user-ip
Óêàçûâàåò íà íåîáõîäèìîñòü â ñëó÷àå óñïåøíîé àâòîðèçàöèè ïåðåçàïèñàòü IP-àäðåñ þíèòà (åñëè îí èìååò òèï user) íà òåêóùèé; ïðè íàñòóïëåíèè òàéìàóòà èëè îñòàíîâå äîñòóïà àäðåñ ñáðàñûâàåòñÿ â 0.0.0.0. Ïðèíèìàåò çíà÷åíèÿ yes èëè 1 (äåëàòü ïåðåçàïèñûâàíèå) èëè no èëè 0 (íå äåëàòü). Ïî óìîë÷àíèþ ðàâíî 0.
set {name AAA | oid BBBB}
[password CCCC]
[inact DDDD]
[abs EEEE]
[mac 0a:0b:0c:0d:0e:0f]
[strict|nostrict]
Çàïèñûâàåò â ñòðóêòóðó äàííûõ þíèòà â ïàìÿòè è îäíîâðåìåííî â SQL-áàçó ïàðàìåòðû þíèòà (îïðåäåëÿåòñÿ ïî èìåíè èëè íîìåðó OID):
- Ïàðîëü (password)
- Òàéìàóò íåàêòèâíîñòè (inact)
- Àáñîëþòíûé òàéìàóò (abs)
- Óñòàíîâëåííûé ïðèâÿçàííûé MAC-àäðåñ þíèòà (mac)
- Ïàðàìåòð áåçóñëîâíîé ïðèâÿçêè (strict) èëè åãî îòìåíà (nostrict)
Âñå çíà÷åíèÿ òàéìàóòîâ çàäàþòñÿ â ñåêóíäàõ. Îíè äîëæíû áûòü èëè ðàâíû íóëþ, èëè áûòü â ðàìêàõ ìåæäó ìèíèìàëüíûì è ìàêñèìàëüíûì çíà÷åíèåì. Åñëè êàêàÿ-òî èç âåëè÷èí òàéìàóòîâ (èëè îáå) ðàâíû íóëþ, òî ïðîâåðêà ýòîãî òèïà òàéìàóòà äëÿ äàííîãî þíèòà íå ïðîèçâîäèòñÿ. Åñëè êàêàÿ-òî èç âåëè÷èí íå óêàçàíà, áóäåò âçÿòî çíà÷åíèå ïî óìîë÷àíèþ (îïðåäåëåííîå ñîîòâåòñòâåííî èëè â çàãîëîâî÷íîì ôàéëå src/netams.h èëè ïàðàìåòðàìè óïðàâëåíèÿ ñåðâèñîâ default-inact èëè default-abs).
login {name AAA | oid BBBB}
password CCCC
[ip A.B.C.D]
[mac JJ:JJ:JJ:JJ:JJ:JJ]
Ñëóæèò äëÿ àâòîðèçàöèè þíèòà è îòêðûòèÿ ê íåìó äîñòóïà. Îáÿçàòåëüíî óêàçûâàòü èìÿ èëè OID þíèòà, à òàêæå ïàðîëü. Çíà÷åíèÿ IP- è MAC-àäðåñà äîëæíû ïîäñòàâëÿòüñÿ âíåøíèì ñêðèïòîì àâòîðèçàöèè.
 ñëó÷àå óêàçàíèÿ íåïðàâèëüíîãî èìåíè þíèòà ïîëó÷èòñÿ:
login:0#login name r546-1a
parse: FAIL: unit with name= r546-1a is not exist
Íåïðàâèëüíîãî ïàðîëÿ:
login:0#login name r546-1 password 123
parse: FAIL: password incorrect
Óñïåøíîé àâòîðèçàöèè:
login:0#login name r546-1 password 123456
parse: OK: login success from ip:0.0.0.0, mac:00:00:00:00:00:00
Ïðè ýòîì â ëîã-ôàéëå ñåðâåðà ïîÿâèòñÿ ñîîòâåòñòâóþùàÿ çàïèñü.
logout {name AAA | oid BBBB}
password CCCC
[ip A.B.C.D]
[mac JJ:JJ:JJ:JJ:JJ:JJ]
Êîìàíäà îòêëþ÷åíèÿ ïîëüçîâàòåëÿ, ïàðàìåòðû òàêèå æå, êàê è ó login.