Linux પર AnyConnect: લોગિન ક્રમને સુરક્ષિત રીતે સ્ક્રિપ્ટ કરવો
Cisco AnyConnect નું vpn બાઈનરી stdin માંથી જવાબો વાંચે છે, અને પુનરાવર્તનયોગ્ય લોગિન માટે એ પૂરતું છે. ક્રમ બનાવો, ફાઈલ સુરક્ષિત કરો, ચકાસો અને થોભો.
Cisco AnyConnect સાથે આવતું vpn ક્લાયન્ટ વાતચીતની જેમ વર્તે છે: તે એક પ્રોમ્પ્ટ છાપે છે, એક લાઈનની રાહ જુએ છે, પછી આગળનો છાપે છે. એ વાતચીતને ફાઈલ કે પાઈપમાંથી ખવડાવો અને એ જ બાઈનરી દેખરેખ વિના ચાલે છે. તકનીક એક રીડાયરેક્ટ અને જવાબોની ક્રમબદ્ધ યાદી છે, અને સ્ક્રિપ્ટ ભરોસાપાત્ર છે કે નહીં તે રીડાયરેક્ટ નહીં, એ યાદી જ નક્કી કરે છે.
વ્યવહારમાં બે વસ્તુઓ આને તોડે છે. જ્યારે ગેટવે કંઈક વધારાનું પૂછે ત્યારે પ્રોમ્પ્ટનો ક્રમ બદલાય છે, અને સંગ્રહિત પાસવર્ડ એક ટાઈપિંગ ભૂલને એકાઉન્ટ લોકઆઉટમાં ફેરવે છે. ક્રમને આવૃત્તિબદ્ધ ડેટા તરીકે ગણો જેને દરેક ગેટવે ફેરફાર પછી સરખાવી શકાય. ફરી પ્રયાસ કરવાને બદલે મોટેથી નિષ્ફળ જાઓ, કારણ કે લૂપ એ જ રીતે છે જેનાથી ખોટો ટાઈપ કરેલો પાસવર્ડ લોક થયેલું એકાઉન્ટ બને છે.
એક ક્રમ, ક્લાયન્ટ જે ક્રમમાં પૂછે છે તે જ ક્રમમાં
ક્લાયન્ટને એક વાર ઈન્ટરેક્ટિવ રીતે ચલાવો અને દરેક પ્રોમ્પ્ટ જે ક્રમમાં દેખાય તે ક્રમમાં લખો. એ ટ્રાન્સક્રિપ્ટ જ જવાબ-ફાઈલ બને છે. જ્યારે તમે ફાઈલને બાઈનરીમાં રીડાયરેક્ટ કરો ત્યારે પહેલી લાઈન જ કનેક્શન કમાન્ડ હોવી જોઈએ, એટલે ક્રમ વપરાશકર્તાનામને બદલે હોસ્ટનામથી શરૂ થાય છે.
connect vpn.example.com
0
<username>
<password>
y
exit
ખાલી 0 ગેટવે યાદી આપે ત્યારે પહેલી કનેક્શન પ્રોફાઈલ પસંદ કરે છે; તમારો ગેટવે જે ઈન્ડેક્સ છાપે તે વાપરો. y લોગિન બેનર સ્વીકારે છે, એટલે બેનર ન હોય તો એ લાઈન કાઢી નાખો અને તમારો ગેટવે વધારાનો પ્રશ્ન પૂછે ત્યાં એક લાઈન ઉમેરો. અંતમાં exit એ છે જે છેલ્લો જવાબ વપરાઈ જાય પછી ક્લાયન્ટને સ્વચ્છ રીતે પૂરો થવા દે છે.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
બિન-ઈન્ટરેક્ટિવ મોડ અહીં વૈકલ્પિક નથી. -s વિના ક્લાયન્ટ ટર્મિનલ પર કબજો લઈ શકે છે અને રીડાયરેક્ટ કરેલું ઇનપુટ અવગણી શકે છે; તેની સાથે જવાબો સ્ટ્રીમમાંથી વંચાય છે અને પ્રક્રિયા પાછી ફરે છે. જ્યાં બાઈનરીને વધેલા હક્કોની જરૂર હોય ત્યાં કૉલને sudo -n માં લપેટો જેથી સ્ક્રિપ્ટ પાસવર્ડ પ્રોમ્પ્ટ પર અટકવાને બદલે તરત જ નિષ્ફળ જાય.
જવાબ-ફાઈલ ક્યાં લીક થાય છે
પાસવર્ડ ધરાવતી ફાઈલ એ ક્રેડેન્શિયલ છે, એટલે તેને ક્રેડેન્શિયલની પરવાનગીઓ આપો: મોડ 600, જે એકાઉન્ટ કામ ચલાવે તેની માલિકીમાં, અને કદી પણ શેર કરેલી કે સિંક કરેલી ડિરેક્ટરીમાં નહીં. પછીથી સુધારવાને બદલે મોડ પહેલેથી લાગુ કરીને બનાવો, કારણ કે લખાણ અને chmod વચ્ચે ફાઈલ થોડી વાર બધા માટે વાંચી શકાય તેવી હોય છે.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
બીજો અડધો ભાગ argv છે. આર્ગ્યુમેન્ટ તરીકે આપેલો પાસવર્ડ પ્રોસેસની યાદી બનાવતા દરેક સ્થાનિક વપરાશકર્તાને દેખાય છે, અને તે શેલ ઇતિહાસમાં પણ જાય છે. તેને તેના બદલે ફાઈલ ડિસ્ક્રિપ્ટર કે એન્વાયર્નમેન્ટ વેરિયેબલમાંથી વાંચો, અને પેલોડને ક્વોટ કરો જેથી શેલ તેની અંદર કંઈ વિસ્તારી ન શકે.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
ક્વોટિંગ પર ધ્યાન રાખો. ડબલ ક્વોટની અંદર ! ધરાવતો પાસવર્ડ ક્લાયન્ટ તેને જોવાને પહેલાં જ ઈન્ટરેક્ટિવ શેલ દ્વારા વિસ્તારી શકાય છે, અને નિષ્ફળતા પ્રોટોકોલ સમસ્યા જેવી લાગતી સામાન્ય event-not-found ભૂલ તરીકે આવે છે.
ટનલ સાબિત કરો, પછી તેને બંધ કરો
કનેક્ટેડ સ્થિતિ ફક્ત એ સાબિત કરે છે કે ક્લાયન્ટ માને છે કે તેની પાસે સેશન છે. એવો હોસ્ટ પસંદ કરો જે ફક્ત કોર્પોરેટ નેટવર્કની અંદરથી જ જવાબ આપે અને બીજું કંઈ કરવાને પહેલાં એક વાર તેને ચકાસો. ત્યાં નિષ્ફળતા રૂટિંગ કે પોલિસી ખામી છે, અને લોગિન ફરી ચલાવવાથી તે બદલાશે નહીં.
/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect
ડિસ્કનેક્ટ પહેલાં અને પછી સ્ટેટ આઉટપુટ તપાસો. જૂના સેશન સાથે છોડી દીધેલો ક્લાયન્ટ આગળનું કનેક્શન નકારી શકે છે જ્યારે સ્ક્રિપ્ટ હજી સફળતાનો અહેવાલ આપે છે, અને ફક્ત એક્ઝિટ કોડ જોશો તો આ નિષ્ફળતાનો પ્રકાર અદૃશ્ય રહે છે. બીજા વાંચન પર એકલા ભરોસો કરવાને બદલે બંને વાંચનની સરખામણી કરો. શેલ પ્રોફાઈલમાં એલિયાસ રોજિંદા વપરાશ માટે પૂરતા છે, જ્યારે શેડ્યૂલ કરેલી કોઈપણ વસ્તુ અન્ય કોઈપણ દેખરેખ વિનાના કામ જેટલી જ ક્રેડેન્શિયલ અને ઓળખ સમીક્ષા લાયક છે.
જ્યારે સ્થિર યાદી સુરક્ષિત રહેવાનું બંધ કરે
જવાબ-ફાઈલ આજના પ્રોમ્પ્ટ ક્રમને એન્કોડ કરે છે. બદલાયેલું બેનર, ફરજિયાત પાસવર્ડ ફેરફાર કે બીજા-ફેક્ટરનો પડકાર તેને એવા લૂપમાં ફેરવે છે જે એકાઉન્ટ લોક કરી શકે છે, એટલે સ્ક્રિપ્ટે ફરીથી શરૂ કરવાને બદલે પહેલા અણધાર્યા જવાબ પર બહાર નીકળવું જોઈએ.
ક્લાયન્ટે જે છાપ્યું તે કેપ્ચર કરો, બિન-શૂન્ય સ્થિતિ પરત કરો અને નિર્ણય કૉલરને સોંપો. જ્યાં ગેટવે બીજા ફેક્ટરની માંગ કરે છે, પ્રામાણિક જવાબ એ છે કે તે પ્રોફાઈલ માટે દેખરેખ વિનાનું લોગિન ઉપલબ્ધ નથી, એમ નહીં કે ક્રમને વધુ એક લાઈનની જરૂર છે.
રોટેશન પણ એ જ સમીક્ષાનો ભાગ છે. જો ક્રેડેન્શિયલ સંગ્રહિત હોય તો નક્કી કરો કે કોણ તેને વાંચી શકે, ક્યારે બદલાય, અને હોસ્ટ ફરી બનાવાય ત્યારે તેને શું દૂર કરે. જે સ્ક્રિપ્ટ એક વર્ષ ચાલે કારણ કે કોઈએ પાસવર્ડને અડ્યો નહીં, તે ડિઝાઈન નથી, પણ રોટેશન નીતિની રાહ જોતો અકસ્માત છે.
જે પ્રોફાઈલ AnyConnect નથી
Cisco ની બે જૂની ક્રેડેન્શિયલ શૈલીઓ આ સાથે ભળી જાય છે. vpnc પ્રોફાઈલ IPSec ID માંગે છે, જે વાસ્તવમાં જૂથનું નામ છે, પછી જૂથ રહસ્ય, પછી તમારા પોતાના ક્રેડેન્શિયલ, અને ત્રણેય ગેટવે ચલાવનાર પાસેથી આવે છે. જૂનું Cisco IPsec AnyConnect કરતાં અલગ પ્રોટોકોલ છે, એટલે vpnc ફક્ત-AnyConnect સેવા સુધી પહોંચી શકતું નથી; openconnect --protocol=anyconnect એ કામ માટે ખુલ્લું ક્લાયન્ટ છે.
.pcf ફાઈલ જૂના ક્લાયન્ટ પ્રોફાઈલનું વર્ણન કરે છે. તેમાંનું હોસ્ટ, જૂથનું નામ અને જૂથ પાસવર્ડ Cisco IPsec બોલતા ક્લાયન્ટમાં હાથે ફરી દાખલ કરી શકાય છે, જોકે ફાઈલ સાર્વત્રિક આયાત નથી અને કોઈપણ બિન-ડિફૉલ્ટ પોર્ટ કે ટનલિંગ મોડ સામાન્ય રીતે સ્થાનાંતરણમાં અદૃશ્ય થાય છે.
ગેટવે ખરેખર શું આપે છે તેનાથી શરૂ કરો, પછી એ પ્રોટોકોલ બોલતું ક્લાયન્ટ પસંદ કરો. બીજી સાઈટથી પ્રોફાઈલ કોપી કરવી એ જ રસ્તો છે જેનાથી લોકો એવા ક્રેડેન્શિયલ ડિબગ કરવા પહોંચે છે જે કદી સમસ્યા ન હતા.