Guest User

8021x_install_config

a guest
Dec 5th, 2014
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 13.49 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # Author: Dubravko Penezic, 2011
  4. #
  5. # Skripta za instalaciju skripte za autentikaciju putem 802.1x na mrezni
  6. # prikljucak.
  7. #
  8. # Ocekuje se da je na sustavu instalirana slijedeca programska podrska
  9. # ifconfig
  10. # wpa_supplicant
  11. # dhclient
  12. # awk
  13. # sed
  14. #
  15. # te da postoji barem jedan mrezni adapter za zicnu mrezu i da je isti
  16. # u funkciji
  17. #
  18. # verzija 1.0.1
  19. #
  20. # Nastala nadogradnjom i prilagodbom:
  21. #
  22. #               eduroam configuration utility for Linux
  23. # Version 0.4-1
  24. # Written by Tomasz Wolniewicz ([email protected])
  25. # with contributions from Andrzej Angowski
  26. # German locale provided by Torsten Kersting
  27.  
  28. # varijable
  29. ver="1.0.1"
  30. 8021x_CONF_PATH="/etc/8021x_wired"
  31. 8021x_SBIN_PATH="/sbin"
  32. 8021x_BIN_PATH="/usr/bin"
  33.  
  34. # xterm oznake teksta bold
  35. if [ "$TERM" = "xterm" ] ; then
  36.   bf="";
  37.   n="";
  38. fi
  39.  
  40. # functions
  41. # ispis teksta na ekran, lprint samo tekst, lprintln cijeli redak
  42. # s prelaskom u novi red
  43. #
  44.  
  45. lprint() {
  46.   echo -n $1;
  47. }
  48.  
  49. lprintln() {
  50.   lprint "$1"
  51.   echo ""
  52. }
  53.  
  54. # ask user for confirmation
  55. # the first argument is the user prompt
  56. # if the second argument is 0 then the first element of yes_no array
  57. # will be the default value prompted to the user
  58.  
  59. ask() {
  60.   yes=`lprint DA`
  61.   no=`lprint NE`
  62.   if [ $2 == "0" ]; then
  63.     def=$yes
  64.   else
  65.     def=$no
  66.   fi
  67.  
  68.   while true
  69.   do
  70.   read -p "${bf}${1} ${yes}/${no}? [${def}]:$n " answer
  71.   if [ -z "$answer" ] ; then
  72.     answer=${def}
  73.   else
  74.     answer=`echo $answer | awk '{ print toupper($0) }'`
  75.   fi
  76.   case "$answer" in
  77.     ${yes})
  78.        return 0
  79.        ;;
  80.     ${no})
  81.        return 1
  82.        ;;
  83.   esac
  84.   done
  85. }
  86.  
  87. atn=`lprint "UPOZORENJE"`
  88. attention="${bf}${atn}!${n} "
  89.  
  90. # Ispisivanje pozdravne poruke
  91. echo ""
  92. lprintln "8021x_config ${ver}"
  93. lprintln "================================"
  94. echo ""
  95. lprintln "Ova skripta obavlja instalaciju skripte i konfiguraciju klijenta"
  96. lprintln "za pristup zicnoj mrezi putem autentikacijske infrastrukture ${bf}802.1x$n"
  97. echo ""
  98. echo "------------------------------------------------------------------------"
  99. lprintln "${attention}Skripta podesava parametre koje mogu koristiti samo korisnici"
  100. lprintln "institucije ${bf}PMF Split$n cija korisnicka oznaka ima oblik"
  101. lprintln "<uid>@pmfst.hr ([email protected])"
  102. echo "------------------------------------------------------------------------"
  103. echo ""
  104.  
  105. # Provjera parametara pri pozivanju skripte
  106.  
  107. set -- `getopt ih $*`
  108. for i
  109. do
  110.   case "$i" in
  111.     -h)
  112.       lprintn "Uporaba"; echo " $0 [-i]"
  113.       echo ""
  114.       echo ""
  115.       exit 2 ;;
  116.     -i)
  117.        flag="i"; shift;;
  118.     --)
  119.        shift; break;;
  120.   esac
  121. done
  122.  
  123. user=`whoami`
  124. if [ "$user" != "root" ]; then
  125.   echo  -n "${attention} "
  126.   lprintln "Ova skripta mora biti pokrenuta s root administrativnim ovlastima"
  127.   exit
  128. fi
  129.  
  130. if ! ask "`lprint 'Nastavak'`" 0 ; then exit; fi
  131. clear
  132.  
  133. # locate ifconfig
  134. #
  135. if [ -x /sbin/ifconfig ]; then
  136.   IWCONFIG="/sbin/ifconfig"
  137. elif [ -x /usr/sbin/ifconfig ]; then
  138.   IWCONFIG="/usr/sbin/ifconfig"
  139. elif [ "$flag" ! = "-i" ] ; then
  140.   lprint "Nemoguce pronaci";  echo " ifconfig"
  141.   prompt=`lprint "unesite putanju do"`
  142.   read -p "$prompt ifconfig: " IWCONFIG
  143.   if [ ! -x $IWCONFIG ] ; then
  144.     lprint "Nemoguce pronaci"; echo " $IWCONFIG";
  145.     exit
  146.   fi
  147. fi
  148.  
  149. if [ "$flag" = "i" ] ; then
  150.   read -p "ifconfig: [${IWCONFIG}] " iwcfg
  151.   if [ "$iwcfg" ] ; then
  152.     IWCONFIG=$iwcfg
  153.   fi
  154.   if [ ! -x $IWCONFIG ] ; then
  155.     lprint "Nemoguce pronaci";echo " $IWCONFIG";
  156.     exit
  157.   fi
  158. fi
  159.  
  160. # locate wired interface
  161. iface=`${IWCONFIG} 2>/dev/null | awk '/^[a-z]/ {print $1 }'`
  162.  
  163. if [ -z "${iface}" ] ; then
  164.   lprintln "Nije pronadjena niti jedan aktivni mrezni adapter za zicnu mrezu. Skripta prekida izvrsenje."
  165.   exit
  166. fi
  167.  
  168. # locate wpa_supplicant
  169. #
  170. if which wpa_supplicant 1>/dev/null 2>&1 ; then
  171.   WPA_SUPPLICANT=`which wpa_supplicant`
  172. elif [ -x /sbin/wpa_supplicant ]; then
  173.   WPA_SUPPLICANT="/sbin/wpa_supplicant"
  174. elif [ -x /usr/sbin/wpa_supplicant ]; then
  175.   WPA_SUPPLICANT="/usr/sbin/wpa_supplicant"
  176. elif [ "$flag" != "-i" ] ; then
  177.   while [ ! -x "$WPA_SUPPLICANT" -o "$WPA_SUPPLICANT" = "" ]
  178.   do
  179.     lprint "Nemoguce pronaci";echo " wpa_supplicant"
  180.     prompt=`lprint "unesite putanju do"`
  181.     read -p "$prompt wpa_supplicant: " WPA_SUPPLICANT
  182.   done
  183. fi
  184.  
  185. if [ "$flag" = "i" ] ; then
  186.   read -p "wpa_supplicant: [${WPA_SUPPLICANT}] " iwcfg
  187.   if [ "$iwcfg" ] ; then
  188.     WPA_SUPPLICANT=$iwcfg
  189.   fi
  190.   while [ ! -x "$WPA_SUPPLICANT" -o "$WPA_SUPPLICANT" = "" ]
  191.   do
  192.     lprint 101 "Nemoguce pronaci"; echo " wpa_supplicant"
  193.     read -p "$prompt wpa_supplicant: " WPA_SUPPLICANT
  194.   done
  195. fi
  196.  
  197. # locate wpa_cli
  198. #
  199. if which wpa_cli 1>/dev/null 2>&1 ; then
  200.    WPA_CLI=`which wpa_cli`
  201. fi
  202.  
  203. # select the wired interface
  204. #
  205. iface_count=`${IWCONFIG} 2>/dev/null | awk '/^[a-z]/ {print $1 }'| wc -l`
  206. if [ $iface_count -gt 1 ] ; then
  207.   lprintln "Pronadjeni slijedeci mrezni adapteri za zicnu mrezu:"
  208.   echo "$bf${iface}$n"
  209. else
  210.   lprint  "Pronadjen mrezni adapter za zicnu mrezu"
  211.   echo ": $bf${iface}$n"
  212. fi
  213.  
  214. if [ $iface_count -gt 1 ] ; then
  215.   lprintln "molim odaberite jedan"
  216.   ifc=""
  217.   while [ -z $ifc ]
  218.   do
  219.     read -p "${n}interface: ${bf}" ifc
  220.   done
  221.   iface=$ifc
  222. elif [ "$flag" = "i" ] ; then
  223.   read -p "adapter: [${iface}] " ifc
  224.   if [ "$ifc" ] ; then
  225.      iface=$ifc
  226.   fi
  227. fi
  228.  
  229. # select wired driver
  230. #
  231.  
  232. driver="wired"
  233.  
  234. if [ -x /sbin/dhcpcd ] ; then
  235. dhclient="/sbin/dhcpcd"
  236. fi
  237.  
  238. if [ -x /sbin/dhclient ] ; then
  239. dhclient="/sbin/dhclient"
  240. fi
  241.  
  242. if [ -x /sbin/pump ] ; then
  243. dhclient="/sbin/pump -i"
  244. fi
  245.  
  246. # check for gksu
  247. GKSU=""
  248. if which gksu 1>/dev/null 2>&1 ; then
  249.    GKSU=`which gksu`
  250. fi
  251.  
  252. # check for kdesu
  253. KDESU=""
  254. if which kdesu 1>/dev/null 2>&1 ; then
  255.    KDESU=`which kdesu`
  256. fi
  257.  
  258. found=`lprint "pronadjen"`;
  259.  
  260. echo ""
  261. lprintln "--------------------------------------------------------------------"
  262. lprint "Podesava 802.1x na"; echo " $bf$iface$n"
  263. echo " ${found} $bf$WPA_SUPPLICANT$n"
  264. echo " ${found} $bf$IWCONFIG$n"
  265. echo " ${found} $bf$dhclient$n"
  266. echo -n " "; lprint "podesavam drajver"; echo " $bf$driver$n"
  267. echo -n " "; lprint "kreiranje direktorija"; echo " $bf$8021x_CONF_PATH$n"
  268. echo -n " "; lprintln "kreiranje naredbe:"
  269. echo "  $bf${8021x_SBIN_PATH}/8021x_wired$n"
  270. echo "  $bf${8021x_BIN_PATH}/8021x_wired-start$n"
  271. echo "  $bf${8021x_BIN_PATH}/8021x_wired-stop$n"
  272. if [ -n "$GKSU" -o -n "$KDESU" ] ; then
  273. echo -n " "; lprintln "i kreiranje pomocne naredbe:"
  274. echo "  $bf${8021x_BIN_PATH}/x8021x_wired-start$n"
  275. echo "  $bf${8021x_BIN_PATH}/x8021x_wired-stop$n"
  276. fi
  277. echo "--------------------------------------------------------------------"
  278. echo ""
  279. lprintln "Ako zelite promjeniti pojedine parametre, zaustavite instalaciju"
  280. lprintln "i pokrenite skriptu s paramterom -i"
  281. echo ""
  282.  
  283. if ! ask "`lprint 'Nastavak'`" 1 ; then exit; fi
  284.  
  285. if [ -z "$GKSU" -a -z "$KDESU" ]; then
  286.   if which sudo 1>/dev/null 2>&1 ; then
  287.     SUDO=`which sudo`
  288.     prompt=`lprintln "zelite li koristiti ${n}sudo${bf} za pokretanje spajanja na 802.1x"`
  289.     if ask "$prompt" 1; then
  290.       lprint "Da, koristit cu"
  291.       echo " ${bf}${SUDO}$n"
  292.     else
  293.       lprint "Da, koristit cu"
  294.       echo " ${bf}su${n}"
  295.       SUDO=""
  296.     fi
  297.   fi
  298. fi
  299.  
  300. if [ -d "$8021x_CONF_PATH" ] ; then
  301.   echo -n "${attention} "
  302.   lprint "Direktorij"; echo -n " $8021x_CONF_PATH "; lprintln "postoji"
  303.   lprintln "neke datoteke ce biti modificirane"
  304.   if ! ask "`lprint 'Nastavak'`" 1 ; then exit; fi
  305. else
  306.   lprint 20 "kreiranje"; echo " $8021x_CONF_PATH"
  307.   if ! mkdir $8021x_CONF_PATH ; then
  308.     lprint 21 "problem u kreiranju direktorija"; echo " $8021x_CONF_PATH"
  309.     exit
  310.   fi
  311. fi
  312.  
  313. PASSWORD="a"
  314. PASSWORD1="b"
  315. prompt=`lprint "Unesite svoju korisnicku oznaku u obliku <uid>@pmfst.hr ([email protected])"`
  316. read -p "${prompt}: " USER
  317. while [ "$PASSWORD" != "$PASSWORD1" ]
  318. do
  319.   prompt=`lprint "unesite svoju lozinku"`
  320.   read -s -r -p "${prompt}: " PASSWORD
  321.   echo ""
  322.   prompt=`lprint "ponovno unesite svoju lozinku"`
  323.   read -s -r -p "${prompt}: " PASSWORD1
  324.   echo ""
  325.   if [ "$PASSWORD" != "$PASSWORD1" ] ; then
  326.     lprint "unesene lozinke se ne podudaraju"
  327.   fi
  328. done
  329.  
  330. eap="TTLS
  331.    password=\"${PASSWORD}\"
  332.    phase2=\"auth=PAP\""
  333.  
  334. echo "ctrl_interface=/var/run/wpa_supplicant
  335.  
  336. network={
  337.      key_mgmt=IEEE8021X
  338.      ca_cert=\"${8021x_CONF_PATH}/8021x_wired_pmfst.hr_CA.pem\"
  339.      subject_match=\"freeradius.pmfst.hr\"
  340.      identity=\"${USER}\"
  341.      eapol_flags=0
  342.      eap=$eap
  343.     }
  344.  
  345. " > ${8021x_CONF_PATH}/wpa_supplicant.conf
  346.  
  347.  
  348. #INCLUDE_CERT
  349.  
  350. chown root ${8021x_CONF_PATH}/wpa_supplicant.conf
  351. chmod 600 ${8021x_CONF_PATH}/wpa_supplicant.conf
  352.  
  353.  
  354. starting=`lprintln  "pokretanje mrezne povezanosti"`
  355. stopping=`lprintln "zaustavljanje mrezne povezanosti"`
  356. waiting=`lprintln "cekanje na povezivanje"`
  357. connected=`lprintln "povezano na"`
  358. restarting=`lprintln "restartanje"`
  359. assinging_ip=`lprintln "podesavanje IP adrese"`
  360. msg=`lprint "Koristenje"`
  361.  
  362. echo "#!/bin/sh
  363. WPA_SUPPLICANT=\"$WPA_SUPPLICANT\"" > ${8021x_SBIN_PATH}/8021x_wired
  364. if [ "$WPA_CLI" ] ; then
  365. echo "WPA_CLI=\"$WPA_CLI\"" >> ${8021x_SBIN_PATH}/8021x_wired
  366. fi
  367.  
  368. echo "DRIVER=\"${driver}\"
  369. WPA_CONF=\"${8021x_CONF_PATH}/wpa_supplicant.conf\"
  370. DHCPD=\"${dhclient}\"
  371. INTERFACE=\"${iface}\"
  372. REAUTH_TIMEOUT=\"120\"
  373. # end of configuration section
  374. dhclient=\`basename \$DHCPD\`
  375. case \"\$1\" in
  376.     start)
  377.            echo \"$starting \${INTERFACE}\"
  378.             pkill wpa_supplicant
  379.             kill \`ps -ef | awk \"/\$dhclient/ && /${iface}/ && ! /awk/ {print \$2}\"\` 1>/dev/null 2>&1
  380.         \${WPA_SUPPLICANT} -B -D \${DRIVER} -c \${WPA_CONF} -i \${INTERFACE} -P /var/run/wpa_supplicant.pid 1>/dev/null 2>&1
  381.             if [ \"\$WPA_CLI\" ] ; then
  382.             i=1
  383.         echo \"$waiting\"
  384.             while ! \$WPA_CLI status | grep -q AUTHENTICATED ; do
  385.                     sleep 1
  386.                     i=\`expr \$i + 1\`
  387.                     if [ \$i -gt 40 ] ; then
  388.                     echo \"$restarting wpa_supplicant\"
  389.             echo \"$waiting\"
  390.                     pkill wpa_supplicant
  391.                     sleep 1
  392.                 \${WPA_SUPPLICANT} -B -D \${DRIVER} -c \${WPA_CONF} -i \${INTERFACE} -P /var/run/wpa_supplicant.pid 1>/dev/null 2>&1
  393.                     i=1
  394.                     sleep 1
  395.                     fi
  396.                done
  397.         echo \"$connected 802.1x\"
  398.             else
  399.         sleep 10
  400.             fi
  401.             echo \"$assinging_ip\"
  402.         \${DHCPD} \${INTERFACE}
  403.     ;;
  404.        stop)
  405.            echo \"$stopping \${INTERFACE}\"
  406.             pkill wpa_supplicant
  407.             kill \`ps -ef | awk \"/\$dhclient/ && /${iface}/ && ! /awk/ {print \$2}\"\` 1>/dev/null 2>&1
  408.     ;;
  409.        *)
  410.         echo \"$msg \$0 {start|stop}\"
  411.         exit 1
  412.     ;;
  413. esac
  414. "  >> ${8021x_SBIN_PATH}/8021x_wired
  415. chmod 755 ${8021x_SBIN_PATH}/8021x_wired
  416. if [ -n "$GKSU" -o -n "$KDESU" ]; then
  417.   msg=`lprint "izvrseno"; echo -n " ${8021x_SBIN_PATH}/8021x_wired start "; lprint "kao root"`
  418. echo "#!/bin/sh
  419. xterm -geometry 80x5 -T '8021x_wired start' -e '${8021x_SBIN_PATH}/8021x_wired start; sleep 2'
  420. " > ${8021x_BIN_PATH}/x8021x_wired-start
  421. echo "#!/bin/sh
  422. xterm -geometry 80x5 -T '8021x_wired stop' -e '${8021x_SBIN_PATH}/8021x_wired stop; sleep 2'
  423. " > ${8021x_BIN_PATH}/x8021x_wired-stop
  424. chmod 755 ${8021x_BIN_PATH}/x8021x_wired-*
  425.  
  426. echo "#!/bin/sh
  427. if [ -n \"\$DISPLAY\" ] ; then
  428.  if env | grep -q GNOME ; then
  429.    if which gksu 1>/dev/null 2>&1 ; then
  430.     SSSU=\`which gksu\`
  431.    fi
  432.  fi
  433.  if env | grep -q KDE ; then
  434.    if which kdesu 1>/dev/null 2>&1 ; then
  435.     SSSU=\`which kdesu\`
  436.    fi
  437.  fi
  438.  if [ -n \"\$SSSU\" ] ; then
  439.    \$SSSU x8021x_wired-start 1>/dev/null 2>&1
  440.  else
  441.    echo $msg
  442.  fi
  443. else
  444.  echo $msg
  445. fi
  446. " > ${8021x_BIN_PATH}/8021x_wired-start
  447.  
  448.   msg=`lprint "pokrenuto"; echo -n " ${8021x_SBIN_PATH}/8021x_wired stop "; lprint "kao root"`
  449.  
  450. echo "#!/bin/sh
  451. if [ -n \"\$DISPLAY\" ] ; then
  452.  if env | grep -q GNOME ; then
  453.    if which gksu 1>/dev/null 2>&1 ; then
  454.     SSSU=\`which gksu\`
  455.    fi
  456.  fi
  457.  if env | grep -q KDE ; then
  458.    if which kdesu 1>/dev/null 2>&1 ; then
  459.     SSSU=\`which kdesu\`
  460.    fi
  461.  fi
  462.  if [ -n \"\$SSSU\" ] ; then
  463.    \$SSSU x8021x_wired-stop 1>/dev/null 2>&1
  464.  else
  465.    echo $msg
  466.  fi
  467. else
  468.  echo $msg
  469. fi
  470. " > ${8021x_BIN_PATH}/8021x_wired-stop
  471. else
  472. if [ -n "$SUDO" ]; then
  473. echo "#!/bin/sh
  474. if [ -n \"\$DISPLAY\" ] ; then
  475.  xterm -geometry 80x4 -T '8021x_wired start' -e \"${SUDO} ${8021x_SBIN_PATH}/8021x_wired start\"
  476. else
  477.  ${SUDO} ${8021x_SBIN_PATH}/8021x_wired start
  478. fi
  479. " > ${8021x_BIN_PATH}/8021x_wired-start
  480.  
  481. echo "#!/bin/sh
  482. if [ -n \"\$DISPLAY\" ] ; then
  483.  xterm -geometry 80x4 -T '8021x_wired stop' -e \"${SUDO} ${8021x_SBIN_PATH}/8021x_wired stop\"
  484. else
  485.  ${SUDO} ${8021x_SBIN_PATH}/8021x_wired stop
  486. fi
  487. " > ${8021x_BIN_PATH}/8021x_wired-stop
  488. else
  489. echo "#!/bin/sh
  490. if [ -n \"\$DISPLAY\" ] ; then
  491.  xterm -geometry 80x4 -T '8021x_wired start' -e \"su -c '${8021x_SBIN_PATH}/8021x_wired start'\"
  492. else
  493.  su -c '${8021x_SBIN_PATH}/8021x_wired start'
  494. fi
  495. " > ${8021x_BIN_PATH}/8021x_wired-start
  496.  
  497. echo "#!/bin/sh
  498. if [ -n \"\$DISPLAY\" ] ; then
  499.  xterm -geometry 80x4 -T '8021x_wired stop' -e \"su -c '${8021x_SBIN_PATH}/8021x_wired stop'\"
  500. else
  501.  su -c '${8021x_SBIN_PATH}/8021x_wired stop'
  502. fi
  503. " > ${8021x_BIN_PATH}/8021x_wired-stop
  504. fi
  505. fi
  506.  
  507. chmod 755 ${8021x_BIN_PATH}/8021x_wired-*
  508.  
  509. cp 8021x_wired_pmfst.hr_CA.pem ${8021x_CONF_PATH}
  510.  
  511. echo ""
  512. lprintln "${bf}Uspjesno dovrseno konfiguriranje$n"
  513. echo ""
  514. echo ""
  515. lprintln "${bf}Koristenje${n}"
  516. echo "------------------------"
  517. echo ""
  518. lprint "Pokretanje mrezne povezanosti"; echo " ${bf}8021x_wired-start${n}"
  519. lprint "Zaustavljanje mrezne povezanosti"; echo " ${bf}8021x_wired-stop${n}"
  520. echo ""
Advertisement
Add Comment
Please, Sign In to add comment