Overeni uzivatele proti NW bez zadavani hesla

Miroslav BENES mbenes na tenez.cz
Středa Březen 26 15:17:11 CET 2003


Preji krasny den !

Resim tu jeden problem. Povedlo se mi (teoreticky) dojit az do
konce, ale veskere pripominky jsou vitany.

Potrebuji, aby se uzivatele :
a) prihlasili k aplikacnimu serveru (linux) - pokud mozno bez
zadavani hesla
b) aplikacni server si overi, s kym mluvi (presneji receno jak
je dotycny clovek prihlasen k NW serveru)
c) do nejakeho adresare je na linuxu primapovan HOME adresar NW
uzivatele, takze vysledky prace na aplikacnim serveru jsou
ukladany na NW tak, jak je uzivatel zvykly.


Problemem je bod b). Pokud bych uzivatele nutil zadat
prihlasovaci jmeno a heslo (coz by bylo "nejcistsi"),
zkomplikoval bych tim jednak vsem uzivatelum prihlasovani ale
hlavne bych "spotreboval" 2x vice pripojovaci kapacity na NW.
Jednodussi je tedy overeni "kdo jsem" az po prihlaseni.

Pro zminene overovani me napadlo :

b1) zjistim si IP adresu klienta
b2) zjistim si MAC adresu stanice klienta
b3) zjistim si, jak je uzivatel na teto stanici prihlasen k NW

ad b1) IP adresa klienta
========================
Toto se da zjitit z promenne shelu :
SSH_CLIENT='10.2.57.0 2539 22'
Doufam ze se tomuto udaji da verit :)
MYIP=`set | \
	grep SSH_CLIENT | \
	tr \' \  | \
	awk '{printf("%s",$2)}'`

ad b2) MAC sitovky klienta
==========================
Napada me :
 - udelat ping na $MYIP
 - zavolat arp -n
 - vybrat si spravny radek

ping -c1 $MYIP 2>&1 >/dev/null
MYMAC=`/sbin/arp -n | \
    grep $MYIP | \
    awk '{printf("%s",$3)}' | \
    tr : \  | \
    awk '{printf("%s%s%s%s%s%s",$1,$2,$3,$4,$5,$6)}'`


ad b3) jmeno uzivatele na NW
============================
 - zavolat nwuserlist -a
 - vybrat si odpovidajici zaznamy

Vzhledem k tomu, ze se v seznamu objevuji nesmysly - viz
priklad, je potreba jeste mezivysledek procistit :

$ nwuserlist -a -S nwserver -U xxxxx -P xxxx | grep A024A7C10F
57: MBENES 00000010:00A024A7C10F:4010
St 26. březen 2003, 07:24:54 CET
62: NOT_LOGGED_IN 00000010:00A024A7C10F:4014
St 26. březen 2003, 07:24:54 CET



Cely skript pak vypada takto :

#!/bin/bash

MYIP=`set | \
     grep SSH_CLIENT | \
     tr \' \  | \
     awk '{printf("%s",$2)}'`

echo $MYIP

ping -c1 $MYIP 2>&1 >/dev/null

MYMAC=`/sbin/arp -n | \
    grep $MYIP | \
    awk '{printf("%s",$3)}' | \
    tr : \  | \
    awk '{printf("%s%s%s%s%s%s",$1,$2,$3,$4,$5,$6)}'`


echo $MYMAC

MYNWNAME=`nwuserlist -a -S tenez -U admin -P mana | \
    grep $MYMAC | \
    grep -v NOT_LOGGED_IN | \
    awk '{printf("%s",$2)}' | \
    tr [:upper:] [:lower:]`

echo $MYNWNAME



Je tam celkem 4x grep, 3x tr, 4x awk. Da se to nekde zjednodusit
? Nebo existuje snad jiny zpusob, ktery by udelal totez
jednodussim a primejsim zpusobem ?

A nesel by pri pripojovani putty -> linux predavat nejaky
parametr (kter by se pak dal zpracovat ve skriptu...} ?


Diky predem za kazdou odpoved.



--------------------------
Miroslav BENES
E-mail   : mbenes na tenez.cz
TENEZ Chotebor, a.s
--------------------------



Další informace o konferenci Linux