Advertisement
adziavitski

bash studies task 2

Nov 28th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 10.20 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. #Template created by Artsiom Dziavitski
  3. #################OOOOOOOOOOOOOOOOOOOOOOOOOO################
  4. export LANG=ru_RU.UTF-8
  5.  
  6. #Env block#
  7. LOCKFILE="/tmp/script.lock"
  8. GRPLIST="test_group my_group lalala_group" ##First group will be primary, other is secondary
  9. SUSERNAME="super_user"
  10. USERSCOUNT=5
  11. USERTMPLT="test"
  12.  
  13. #COLORS
  14. RED='\033[0;31m'
  15. GREEN='\033[0;32m'
  16. BLUE='\033[0;36m'
  17. NC='\033[0m' # No Color
  18.  
  19. #ALIAS
  20. shopt -s expand_aliases
  21. alias echo="echo -e"
  22. alias red_echo="echo '${RED}'"
  23. alias green_echo="echo '${GREEN}'"
  24. alias blue_echo="echo '${BLUE}'"
  25. alias nocolor_echo="echo '${NC}'"
  26. ###########
  27.  
  28. #Func block#
  29. #
  30. func_create_lock_file () {
  31. ##############################
  32. local path="$1"
  33. ##############################
  34. if [ -f /usr/bin/lockfile ]
  35. then {
  36.     lockfile "${path}"
  37. }
  38. else {
  39.     touch "${path}"
  40.     chmod 444 "${path}"
  41. }
  42. fi
  43. if [ "$?" -gt "0" ]
  44. then {
  45.     red_echo "Lockfile ${path} not created. May be script already started"
  46.     nocolor_echo
  47.     exit 1001
  48.     }
  49. fi
  50. }
  51. func_check_lock_file () {
  52. #execution: func_check_lock_file ${LOCKFILE}
  53. ##############################
  54. local path="$1"
  55. ##############################
  56. if [ -f "${path}" ]
  57. then {
  58.     red_echo "Lockfile already exist."
  59.     nocolor_echo
  60.     exit 100
  61.     }
  62. else {
  63.     blue_echo "Creating lockfile."
  64.     nocolor_echo
  65.     func_create_lock_file ${LOCKFILE}
  66.     }
  67. fi
  68. }
  69. func_delete_lock_file () {
  70. #execution: func_delete_lock_file ${LOCKFILE}
  71. ##############################
  72. local path="$1"
  73. ##############################
  74. if [ -f "${path}" ]
  75. then {
  76.     rm -f "${path}"
  77.     #ls -al ${path}
  78. }
  79. else {
  80.     red_echo "Lockfile ${path} not found."
  81.     nocolor_echo
  82.     exit 102
  83. }
  84. fi
  85. }
  86. #
  87. #
  88.  
  89. func_hello () {
  90.  
  91. blue_echo "Скрипт с 3 заданиями"
  92. blue_echo "Для запуска задания необходимо запустить скрипт с параметром task1, или task2, или task3. Так же можно удалить файл блокировки запустив скрипт с параметром rmlock."
  93. nocolor_echo
  94. }
  95.  
  96. func_template () {
  97. echo "${BLUE} Ambassador: This is MADNESS!!!! ${NC} O_o"
  98. echo "${RED} Leonidas:    NO! THIS IS SPARDAAAAAAAA!!!!!!!  (┛ò__ó)┛ ${NC}"
  99. }
  100.  
  101. func_isroot () {
  102. ##############################
  103.     local usr=""
  104. ##############################
  105.     usr="$(whoami)"
  106.     if [ "${usr}" != "root" ]
  107.     then {
  108.         red_echo "User $usr is not root. Please use sudo to run this script."
  109.         nocolor_echo
  110.         func_delete_lock_file ${LOCKFILE}
  111.         exit 200
  112.     }
  113.     else {
  114.         blue_echo "You have root permissions. All ok."
  115.         nocolor_echo
  116.     }
  117.     fi
  118.  
  119.  
  120. }
  121.  
  122. func_addgrp () {
  123. ##############################
  124.     local grp=""
  125. ##############################
  126.     for grp in $1
  127.     do
  128.         groupadd "$grp"
  129.     done
  130. }
  131.  
  132. func_rmgrp () {
  133. ##############################
  134.     local grp=""
  135. ##############################
  136.     for grp in $1
  137.     do
  138.         groupdel "$grp"
  139.     done
  140. }
  141.  
  142. func_addsuperuser () {
  143. ##############################
  144.     local supername="$1"
  145. ##############################
  146.     useradd --create-home "${supername}"
  147.     if grep -Fq "${supername}" /etc/sudoers
  148.     then {
  149.         echo "${supername} access to sudo was allredy granted"
  150.     }
  151.     else {
  152.         echo "${supername}    ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
  153.     }
  154.     fi
  155.     echo "ADDED SUPERUSER:"
  156.     echo " ______________________________________________________";echo "|   USERNAME   |         HOMEDIR       |      SHELL    |"; echo "|------------------------------------------------------|"
  157.     grep "${supername}" /etc/passwd | cut -d ':' -f1,6,7|sed "s/:/   |    /g" | sed "s/^/| /" | sed "s/$/  |/"
  158.     echo "--------------------------------------------------------";
  159. }
  160.  
  161. func_rmsuperuser () {
  162. ##############################
  163.     local supername="$1"
  164. ##############################
  165.     sed -i "/$supername/d" /etc/sudoers
  166.     /usr/sbin/userdel --remove "$supername" 2>/dev/null
  167.     blue_echo "User ${supername} deleted"
  168.     nocolor_echo
  169. }
  170.  
  171.  
  172. func_addusers () {
  173. ##############################
  174.     local numberof=$1
  175.     local tmplt_name="$2"
  176.     local tmplt_comm="test user"
  177.     local tmplt_pass="password"
  178.     local tmplt_primg=""
  179.     local tmplt_secg=""
  180.     local count="1"
  181. ##############################
  182.     tmplt_primg="$(echo "$GRPLIST"| awk '{ print $1 }')"
  183.     tmplt_secg="$(echo "$GRPLIST"| cut -d ' ' -f2- |sed 's/ /,/g' )"
  184.     while [ "$count" -le "$numberof" ]
  185.     do
  186.         sudo -u $SUSERNAME -s <<EOF
  187.                     sudo /usr/sbin/useradd --create-home --gid "$tmplt_primg" --groups "$tmplt_secg" --comment "${tmplt_comm}" "$tmplt_name""$count"
  188. EOF
  189.         echo "$tmplt_name""$count":"$tmplt_pass" | /usr/sbin/chpasswd 2>/dev/null
  190.         ((count++))
  191.     done
  192.    
  193.     echo "ADDED USERS:"
  194.     echo " _____________________________________________________________";echo "|USERNAME |     COMMENT    |      HOMEDIR     |     SHELL     |"; echo "|-------------------------------------------------------------|"
  195.     grep "${tmplt_name}" /etc/passwd | cut -d ':' -f1,5,6,7|sed "s/:/   |    /g" | sed "s/^/| /" | sed "s/$/  |/"
  196.     echo "---------------------------------------------------------------";
  197. }
  198.  
  199. func_rmusers () {
  200. ##############################
  201.     local numberof=$1
  202.     local tmplt_name="$2"
  203.     local count="1"
  204. ##############################
  205.     while [ "$count" -le "$numberof" ]
  206.     do
  207.         blue_echo "User ""$tmplt_name""$count deleted."
  208.         nocolor_echo
  209.         /usr/sbin/userdel --remove "$tmplt_name""$count" 2>/dev/null
  210.         #let "count++"
  211.         ((count++))
  212.     done
  213. }
  214.  
  215. func_filemanipulations () {
  216. ##############################
  217.     local numberof=$1
  218.     local tmplt_name="$2"
  219.     local superfile=""
  220.     local userfile=""
  221.     local fileline=""
  222.     local homedir=""
  223.     local username=""
  224.     local user_secgrp=""
  225. ##############################
  226.  
  227.     homedir="$(grep $SUSERNAME /etc/passwd|cut -d ":" -f 6)"
  228.     sudo -u $SUSERNAME -s <<EOF
  229.     dd if=/dev/zero of="${homedir}/_file" bs=1024 count=100 2>/dev/null
  230. EOF
  231.     echo "CREATED FILES"
  232.     echo " _________________________________________________________________________________________";echo "|         FILEPATH         |  SIZE Kb  |      OWNER      |     GROUP     |   PERMISSIONS  |"; echo "|-----------------------------------------------------------------------------------------|"
  233.     ls --block-size=k -al "${homedir}/_file" | awk -v OFS=':' '{print $9, $5, $3, " "$4"  ", $1}'|sed "s/:/   |    /g"| sed "s/^/| /" | sed "s/$/  |/"
  234.     superfile="${homedir}/_file"
  235.     homedir=""
  236.     fileline="$(grep "${tmplt_name}" /etc/passwd)"
  237. #   echo "File manipulations STAGE2"
  238.     while read -r homedir
  239.     do
  240.         username="$(echo "${homedir}"| cut -d ":" -f 1)"
  241.         user_secgrp="$(grep "${username}" /etc/group | head -n 1 | cut -d ":" -f 1)"
  242.         homedir="$(echo "${homedir}"| cut -d ":" -f 6)"
  243.         userfile="${homedir}/$(basename "${superfile}")"
  244.         cp -f "${superfile}" "${userfile}"
  245.         chown "${username}:${user_secgrp}" "${userfile}"
  246.         chmod 345 "${userfile}"
  247.  
  248.     ls -al --block-size=k "${userfile}"| awk -v OFS=':' '{print $9"     ", $5, "  "$3"   ", $4, $1}'|sed "s/:/   |    /g"| sed "s/^/| /" | sed "s/$/  |/"
  249.     done <<< "$fileline"
  250.     echo "-------------------------------------------------------------------------------------------"
  251. }
  252.  
  253. func_shellchange () {
  254. ##############################
  255.     local trueuser=""
  256.     local stringnum=""
  257.     local line=""
  258. ##############################
  259.     trueuser="$(who am i | awk '{print $1}')"
  260.     echo "trueuser is: ${trueuser}"
  261.  
  262. ####sed#####
  263.     cp -f /etc/passwd /root/passwd.copy
  264.     stringnum="$(grep -n "${trueuser}" /root/passwd.copy|head -n 1| awk -F ':' '{print $1}')"
  265.     echo "stringnum is: ${stringnum}"
  266.     echo "Before SED:"
  267.     grep "${trueuser}" /root/passwd.copy
  268.     sed -i "${stringnum}s/bash/sh/g" /root/passwd.copy
  269.     echo "After SED:"
  270.     grep "${trueuser}" /root/passwd.copy
  271.     echo "===================================================================================================="
  272. ###awk######
  273.    red_echo  "A TUTA4KI S AWK JA NE PRIDUMAL KAK NATIVNO ZAMENIT STROKU. ¯\_(ツ)_/¯ . NADO BUDET AWK PODU4IT."
  274.    nocolor_echo
  275.     cp -f /etc/passwd /root/passwd.copy
  276.     awk -v pro="${trueuser}" '{FS = ":"} {OFS = ":"} {if($1==pro) {gsub(/bash/,"sh",$7); print}}' /root/passwd.copy
  277.    echo "===================================================================================================="
  278. ###bash#####
  279.     cp -f /etc/passwd /root/passwd.copy
  280.     cat /dev/null > /root/passwd.copy_t
  281.     while read -r line
  282.     do
  283.         if [ "$(echo "${line}" | grep -c "${trueuser}" )" -eq 1 ]
  284.         then {
  285.             echo "${line/bash/sh}" >> /root/passwd.copy_t
  286.         }
  287.         else {
  288.             echo "${line}" >> /root/passwd.copy_t
  289.         }
  290.         fi
  291.     done < /root/passwd.copy
  292.     echo "Before BASH:"
  293.     grep "${trueuser}" /root/passwd.copy
  294.     mv /root/passwd.copy_t /root/passwd.copy
  295.     echo "After BASH:"
  296.     grep "${trueuser}" /root/passwd.copy
  297.     echo "===================================================================================================="
  298. rm -f /root/passwd.copy
  299. }
  300.  
  301. func_killall () {
  302. ##############################
  303.     local procname=""  
  304.     local pids=""
  305.     local pid=""
  306. ##############################
  307.  
  308.     if [ -z "${procname}" ]
  309.     then {
  310.         echo "Enter process name to kill"
  311.         read -r procname
  312.             if [ -z "${procname}" ]
  313.                 then {
  314.                     echo "no process name to kill. Exit"
  315.                     exit 0
  316.                 }
  317.                 else {
  318.                     echo "Your process name to kill is: ${procname}"
  319.                     pids="$(ps a |awk -v pro="${procname}" '{FS = " "} {if($5==pro) {print $1}}')"
  320.                     if [ ! -z "${pids}" ]
  321.                     then {
  322.                     for pid in ${pids}
  323.                     do
  324.                     echo "Your process id to kill is: ${pid}"
  325.                     kill -9 "${pid}"
  326.                     done
  327.                     }
  328.                     else {
  329.                     echo "No running process with name ${procname} to kill."
  330.                     }
  331.                     fi
  332.                 }
  333.                 fi
  334.     }
  335.     else {
  336.         echo "process name to kill is: ${procname}"    
  337.     }
  338.     fi
  339. }
  340.  
  341. ############
  342. #func_delete_lock_file ${LOCKFILE}
  343.  
  344. ####BEGIN####
  345.  
  346.  
  347. #func_template
  348.  
  349. case $1 in
  350.  
  351. task1)
  352. func_check_lock_file ${LOCKFILE}
  353. func_isroot
  354. func_shellchange
  355. func_delete_lock_file ${LOCKFILE}
  356. ;;
  357.  
  358. task2)
  359. func_check_lock_file ${LOCKFILE}
  360. func_isroot
  361. func_addgrp "$GRPLIST"
  362. func_addsuperuser "$SUSERNAME"
  363. func_addusers "${USERSCOUNT}" "${USERTMPLT}"
  364. func_filemanipulations "${USERSCOUNT}" "${USERTMPLT}"
  365. func_rmusers "${USERSCOUNT}" "${USERTMPLT}"
  366. func_rmsuperuser ${SUSERNAME}
  367. func_rmgrp "$GRPLIST"
  368. func_delete_lock_file ${LOCKFILE}
  369.  
  370. ;;
  371. task3)
  372. func_check_lock_file ${LOCKFILE}
  373. func_killall
  374. func_delete_lock_file ${LOCKFILE}
  375. ;;
  376. rmlock)
  377. func_delete_lock_file ${LOCKFILE}
  378. ;;
  379. *)
  380. func_hello
  381. ;;
  382. esac
  383.  
  384. exit 0
  385. #####END#####
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement