Некоторые картинки не загружаются из РФ и РК, используйте VPN.

пятница, 23 февраля 2024 г.

Bash скрипт заметка

Заметка скрипт.

Интересный моменты в скрипте:

  1. Вызов функции из себя как вариант цикличности, а не рекурсии
  2. $EUID -ne 0
    Проверка на наличие root прав у текущего пользователя
  3. echo -e "[User]\nSystemAccount=true"> /var/lib/AccountsService/users/$AdminName
    Скрытие учетки в *nix-подобных системах (сервисный аккаунт)
  4. logname
    Получение имени залогинившегося пользователя, даже если он под sudo
  5. eval getent passwd {$UID_MIN..$UID_MAX} 
    eval - преобразует текст в команду
  6. getent passwd {1000..6000} | cut -d: -f1
    получение списка пользователей с UID между 1000-6000, все сервисные аккаунты имеют UID < 1000
  7. blkid -U "$(grep -vE "^#|^$" /etc/crypttab | tail -n1 | cut -d" " -f1 | cut -d"-" -f2-)"
    LUKS иногда создает устройство с именем равным LUKS-UUID_source_block_device, но вот получить именно адрес в виде /dev/sda3 не так просто
Задачи скрипта:
  1. Проверить наличие определенного пользователя
  2. Создать администратора, при его отсутствии
  3. Переименовать выбранного пользователя
  4. Сбросить ID Anydesk
  5. Изменить passphrase для шифрованного раздела
  6. Переименовать ПК
Для чего такое надо?, для клонирования подготовленной системы

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
	echo "You should use root account or sudo to connect."
	exit 1
fi

AdminName=admini

function check_add_user(){
	UserExist=$(getent passwd $AdminName)
	if [[ "$UserExist" != "" ]]; then
		echo "User \"$AdminName\" is exist"
	else
		echo "User \"$AdminName\" not found"
		read -p "Create? [y/n]: " Answer
		if [[ "$Answer" == "y" ]]; then		
			useradd $AdminName
			echo "User \"$AdminName\" added"
			passwd $AdminName
			usermod -aG sudo $AdminName	
			# Hide user on Login screen
			echo -e "[User]\nSystemAccount=true"> /var/lib/AccountsService/users/$AdminName
			systemctl restart accounts-daemon.service
		else
			echo "You canceled the operation"
		fi
	fi
}

function rename_user(){
	if [[ "$AdminName" != `logname` ]]; then
		echo "Please, log in with \"$AdminName's\" account"
		exit
	fi
    echo -e "Get list users...\n"
    UID_MIN=$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)
    UID_MAX=$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)
    eval getent passwd {$UID_MIN..$UID_MAX} | cut -d: -f1
	
	echo ""
    read -p "Enter username: " OldUserName
    UserExist=$(getent passwd $OldUserName)
    if [[ "$OldUserName" == "$AdminName" ]]; then
    	echo "Error. You cannot change the administrator name!"
    	exit
    elif [[ "$UserExist" != "" ]]; then
    	read -p "Enter new username: " NewUserName
    	if [[ "NewUserName" == "" ]]; then
    		echo "Error. You have entered an empty entry"
    		exit
    	fi
		killall -u $OldUserName
		echo "Wait 5 seconds for user processes to end..."
		sleep 5
		usermod -l $NewUserName $OldUserName
		groupmod -n $NewUserName $OldUserName
		usermod -d /home/$NewUserName -m $NewUserName
		usermod -c "$NewUserName" $NewUserName
		passwd $NewUserName
    else
    	echo "Error. You have entered an incorrect username!"
    fi
}
function reset_anydesk(){
	if test -d /etc/anydesk; then
		killall anydesk
		rm /etc/anydesk/service.conf
		dpkg-reconfigure anydesk
	else
		echo "Anydesk is not installed"
	fi
}
function change_passphrase (){
	part_uid=$(grep -vE "^#|^$" /etc/crypttab | tail -n1 | cut -d" " -f1 | cut -d"-" -f2-)
	if [[ "part_uid" == "" ]]; then
		echo "Crypt partition not found"
	else
		devName=$(blkid -U "$part_uid")
		if [[ "$devName" == "" ]]; then
			echo "Error. Device not found"
		else
			cryptsetup --verbose open --test-passphrase $devName
			read -p "Please enter key slot (слот ключа): " keySlot
			re='^[0-9]+$'
			if ! [[ "$keySlot" =~ $re ]] ; then
				echo "Error. Not a number"
			else
				cryptsetup luksChangeKey $devName -S $keySlot
			fi
		fi
	fi
}
function rename_pc (){
	newName="parrot$(date '+%Y%m%d%H%M%S')"
	hostnamectl set-hostname $newName
	echo "Set new name $newName"
}
function WorkMode(){
	echo -e "\n\nWhat would you like to do?"
	echo -e "\n [1] - Rename user"
	echo " [2] - Reset anydesk"
	echo " [3] - Change LUKS passphrase"
	echo " [4] - Rename PC"
	echo -e "\n [0] - EXIT \n"
	read -p "Your choice: " WorkMode

	if [[ "$WorkMode" == "1" ]]; then 
		echo "You are select rename user"
	    rename_user
	elif [[ "$WorkMode" == "2" ]]; then 
		echo "You are select reset anydesk"
		reset_anydesk
	elif [[ "$WorkMode" == "3" ]]; then 
		echo "You are select change LUKS passphrase"
		change_passphrase
	elif [[ "$WorkMode" == "4" ]]; then 
		echo "You are select change PC name"
		rename_pc
	elif [[ "$WorkMode" == "0" ]]; then 
		exit
	else
		echo "Incorrect input...exit..."
	fi
	WorkMode
}

check_add_user
WorkMode

Комментариев нет:

Отправить комментарий