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