Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- #Template created by Artsiom Dziavitski
- #################OOOOOOOOOOOOOOOOOOOOOOOOOO################
- export LANG=ru_RU.UTF-8
- #Env block#
- LOCKFILE="/tmp/script.lock"
- GRPLIST="test_group my_group lalala_group" ##First group will be primary, other is secondary
- SUSERNAME="super_user"
- USERSCOUNT=5
- USERTMPLT="test"
- #COLORS
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- BLUE='\033[0;36m'
- NC='\033[0m' # No Color
- #ALIAS
- shopt -s expand_aliases
- alias echo="echo -e"
- alias red_echo="echo '${RED}'"
- alias green_echo="echo '${GREEN}'"
- alias blue_echo="echo '${BLUE}'"
- alias nocolor_echo="echo '${NC}'"
- ###########
- #Func block#
- #
- func_create_lock_file () {
- ##############################
- local path="$1"
- ##############################
- if [ -f /usr/bin/lockfile ]
- then {
- lockfile "${path}"
- }
- else {
- touch "${path}"
- chmod 444 "${path}"
- }
- fi
- if [ "$?" -gt "0" ]
- then {
- red_echo "Lockfile ${path} not created. May be script already started"
- nocolor_echo
- exit 1001
- }
- fi
- }
- func_check_lock_file () {
- #execution: func_check_lock_file ${LOCKFILE}
- ##############################
- local path="$1"
- ##############################
- if [ -f "${path}" ]
- then {
- red_echo "Lockfile already exist."
- nocolor_echo
- exit 100
- }
- else {
- blue_echo "Creating lockfile."
- nocolor_echo
- func_create_lock_file ${LOCKFILE}
- }
- fi
- }
- func_delete_lock_file () {
- #execution: func_delete_lock_file ${LOCKFILE}
- ##############################
- local path="$1"
- ##############################
- if [ -f "${path}" ]
- then {
- rm -f "${path}"
- #ls -al ${path}
- }
- else {
- red_echo "Lockfile ${path} not found."
- nocolor_echo
- exit 102
- }
- fi
- }
- #
- #
- func_hello () {
- blue_echo "Скрипт с 3 заданиями"
- blue_echo "Для запуска задания необходимо запустить скрипт с параметром task1, или task2, или task3. Так же можно удалить файл блокировки запустив скрипт с параметром rmlock."
- nocolor_echo
- }
- func_template () {
- echo "${BLUE} Ambassador: This is MADNESS!!!! ${NC} O_o"
- echo "${RED} Leonidas: NO! THIS IS SPARDAAAAAAAA!!!!!!! (┛ò__ó)┛ ${NC}"
- }
- func_isroot () {
- ##############################
- local usr=""
- ##############################
- usr="$(whoami)"
- if [ "${usr}" != "root" ]
- then {
- red_echo "User $usr is not root. Please use sudo to run this script."
- nocolor_echo
- func_delete_lock_file ${LOCKFILE}
- exit 200
- }
- else {
- blue_echo "You have root permissions. All ok."
- nocolor_echo
- }
- fi
- }
- func_addgrp () {
- ##############################
- local grp=""
- ##############################
- for grp in $1
- do
- groupadd "$grp"
- done
- }
- func_rmgrp () {
- ##############################
- local grp=""
- ##############################
- for grp in $1
- do
- groupdel "$grp"
- done
- }
- func_addsuperuser () {
- ##############################
- local supername="$1"
- ##############################
- useradd --create-home "${supername}"
- if grep -Fq "${supername}" /etc/sudoers
- then {
- echo "${supername} access to sudo was allredy granted"
- }
- else {
- echo "${supername} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
- }
- fi
- echo "ADDED SUPERUSER:"
- echo " ______________________________________________________";echo "| USERNAME | HOMEDIR | SHELL |"; echo "|------------------------------------------------------|"
- grep "${supername}" /etc/passwd | cut -d ':' -f1,6,7|sed "s/:/ | /g" | sed "s/^/| /" | sed "s/$/ |/"
- echo "--------------------------------------------------------";
- }
- func_rmsuperuser () {
- ##############################
- local supername="$1"
- ##############################
- sed -i "/$supername/d" /etc/sudoers
- /usr/sbin/userdel --remove "$supername" 2>/dev/null
- blue_echo "User ${supername} deleted"
- nocolor_echo
- }
- func_addusers () {
- ##############################
- local numberof=$1
- local tmplt_name="$2"
- local tmplt_comm="test user"
- local tmplt_pass="password"
- local tmplt_primg=""
- local tmplt_secg=""
- local count="1"
- ##############################
- tmplt_primg="$(echo "$GRPLIST"| awk '{ print $1 }')"
- tmplt_secg="$(echo "$GRPLIST"| cut -d ' ' -f2- |sed 's/ /,/g' )"
- while [ "$count" -le "$numberof" ]
- do
- sudo -u $SUSERNAME -s <<EOF
- sudo /usr/sbin/useradd --create-home --gid "$tmplt_primg" --groups "$tmplt_secg" --comment "${tmplt_comm}" "$tmplt_name""$count"
- EOF
- echo "$tmplt_name""$count":"$tmplt_pass" | /usr/sbin/chpasswd 2>/dev/null
- ((count++))
- done
- echo "ADDED USERS:"
- echo " _____________________________________________________________";echo "|USERNAME | COMMENT | HOMEDIR | SHELL |"; echo "|-------------------------------------------------------------|"
- grep "${tmplt_name}" /etc/passwd | cut -d ':' -f1,5,6,7|sed "s/:/ | /g" | sed "s/^/| /" | sed "s/$/ |/"
- echo "---------------------------------------------------------------";
- }
- func_rmusers () {
- ##############################
- local numberof=$1
- local tmplt_name="$2"
- local count="1"
- ##############################
- while [ "$count" -le "$numberof" ]
- do
- blue_echo "User ""$tmplt_name""$count deleted."
- nocolor_echo
- /usr/sbin/userdel --remove "$tmplt_name""$count" 2>/dev/null
- #let "count++"
- ((count++))
- done
- }
- func_filemanipulations () {
- ##############################
- local numberof=$1
- local tmplt_name="$2"
- local superfile=""
- local userfile=""
- local fileline=""
- local homedir=""
- local username=""
- local user_secgrp=""
- ##############################
- homedir="$(grep $SUSERNAME /etc/passwd|cut -d ":" -f 6)"
- sudo -u $SUSERNAME -s <<EOF
- dd if=/dev/zero of="${homedir}/_file" bs=1024 count=100 2>/dev/null
- EOF
- echo "CREATED FILES"
- echo " _________________________________________________________________________________________";echo "| FILEPATH | SIZE Kb | OWNER | GROUP | PERMISSIONS |"; echo "|-----------------------------------------------------------------------------------------|"
- ls --block-size=k -al "${homedir}/_file" | awk -v OFS=':' '{print $9, $5, $3, " "$4" ", $1}'|sed "s/:/ | /g"| sed "s/^/| /" | sed "s/$/ |/"
- superfile="${homedir}/_file"
- homedir=""
- fileline="$(grep "${tmplt_name}" /etc/passwd)"
- # echo "File manipulations STAGE2"
- while read -r homedir
- do
- username="$(echo "${homedir}"| cut -d ":" -f 1)"
- user_secgrp="$(grep "${username}" /etc/group | head -n 1 | cut -d ":" -f 1)"
- homedir="$(echo "${homedir}"| cut -d ":" -f 6)"
- userfile="${homedir}/$(basename "${superfile}")"
- cp -f "${superfile}" "${userfile}"
- chown "${username}:${user_secgrp}" "${userfile}"
- chmod 345 "${userfile}"
- ls -al --block-size=k "${userfile}"| awk -v OFS=':' '{print $9" ", $5, " "$3" ", $4, $1}'|sed "s/:/ | /g"| sed "s/^/| /" | sed "s/$/ |/"
- done <<< "$fileline"
- echo "-------------------------------------------------------------------------------------------"
- }
- func_shellchange () {
- ##############################
- local trueuser=""
- local stringnum=""
- local line=""
- ##############################
- trueuser="$(who am i | awk '{print $1}')"
- echo "trueuser is: ${trueuser}"
- ####sed#####
- cp -f /etc/passwd /root/passwd.copy
- stringnum="$(grep -n "${trueuser}" /root/passwd.copy|head -n 1| awk -F ':' '{print $1}')"
- echo "stringnum is: ${stringnum}"
- echo "Before SED:"
- grep "${trueuser}" /root/passwd.copy
- sed -i "${stringnum}s/bash/sh/g" /root/passwd.copy
- echo "After SED:"
- grep "${trueuser}" /root/passwd.copy
- echo "===================================================================================================="
- ###awk######
- red_echo "A TUTA4KI S AWK JA NE PRIDUMAL KAK NATIVNO ZAMENIT STROKU. ¯\_(ツ)_/¯ . NADO BUDET AWK PODU4IT."
- nocolor_echo
- cp -f /etc/passwd /root/passwd.copy
- awk -v pro="${trueuser}" '{FS = ":"} {OFS = ":"} {if($1==pro) {gsub(/bash/,"sh",$7); print}}' /root/passwd.copy
- echo "===================================================================================================="
- ###bash#####
- cp -f /etc/passwd /root/passwd.copy
- cat /dev/null > /root/passwd.copy_t
- while read -r line
- do
- if [ "$(echo "${line}" | grep -c "${trueuser}" )" -eq 1 ]
- then {
- echo "${line/bash/sh}" >> /root/passwd.copy_t
- }
- else {
- echo "${line}" >> /root/passwd.copy_t
- }
- fi
- done < /root/passwd.copy
- echo "Before BASH:"
- grep "${trueuser}" /root/passwd.copy
- mv /root/passwd.copy_t /root/passwd.copy
- echo "After BASH:"
- grep "${trueuser}" /root/passwd.copy
- echo "===================================================================================================="
- rm -f /root/passwd.copy
- }
- func_killall () {
- ##############################
- local procname=""
- local pids=""
- local pid=""
- ##############################
- if [ -z "${procname}" ]
- then {
- echo "Enter process name to kill"
- read -r procname
- if [ -z "${procname}" ]
- then {
- echo "no process name to kill. Exit"
- exit 0
- }
- else {
- echo "Your process name to kill is: ${procname}"
- pids="$(ps a |awk -v pro="${procname}" '{FS = " "} {if($5==pro) {print $1}}')"
- if [ ! -z "${pids}" ]
- then {
- for pid in ${pids}
- do
- echo "Your process id to kill is: ${pid}"
- kill -9 "${pid}"
- done
- }
- else {
- echo "No running process with name ${procname} to kill."
- }
- fi
- }
- fi
- }
- else {
- echo "process name to kill is: ${procname}"
- }
- fi
- }
- ############
- #func_delete_lock_file ${LOCKFILE}
- ####BEGIN####
- #func_template
- case $1 in
- task1)
- func_check_lock_file ${LOCKFILE}
- func_isroot
- func_shellchange
- func_delete_lock_file ${LOCKFILE}
- ;;
- task2)
- func_check_lock_file ${LOCKFILE}
- func_isroot
- func_addgrp "$GRPLIST"
- func_addsuperuser "$SUSERNAME"
- func_addusers "${USERSCOUNT}" "${USERTMPLT}"
- func_filemanipulations "${USERSCOUNT}" "${USERTMPLT}"
- func_rmusers "${USERSCOUNT}" "${USERTMPLT}"
- func_rmsuperuser ${SUSERNAME}
- func_rmgrp "$GRPLIST"
- func_delete_lock_file ${LOCKFILE}
- ;;
- task3)
- func_check_lock_file ${LOCKFILE}
- func_killall
- func_delete_lock_file ${LOCKFILE}
- ;;
- rmlock)
- func_delete_lock_file ${LOCKFILE}
- ;;
- *)
- func_hello
- ;;
- esac
- exit 0
- #####END#####
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement