Спрощення операцій з користувачами за допомогою shell-скрипта

pic

Вступ:

У цьому блозі я продемонструю операції з користувачами, а саме: створення користувача, призначення пароля, додавання користувача до групи, за допомогою shell-скрипта.

Вимоги:

  • Доступ до Linux-машини/Linux-машини, розміщеної на VirtualBox/Linux, налаштованої на WSL/AWS EC2 Linux інстанс

Завдання:

  1. Керування користувачами має здійснюватися з правами root. Тому на початку скрипта я визначив таку умову, щоб перевірити, чи виконується скрипт root-ом або іншим користувачем. Якщо користувач не root, скрипт не буде виконано.
if [[$UID -ne 0]]  
then  
 exit 1
  1. Далі я визначив наступні варіанти, які можуть бути виконані користувачем.
echo "*************************"  
echo "Ласкаво просимо до операцій з користувачем"  
echo "*************************"  
echo "A -- Створити нового користувача"  
echo "B -- Призначити пароль користувачу"  
echo "C -- Додати користувача до групи"  
echo "D -- Змінити основну групу користувача"  
echo "E -- Видалити користувача"  
echo "F -- Створити групу"  
echo "*************************"  
echo "Введіть опцію для продовження:"
  1. На наступному етапі я визначив команду “read” для зчитування введених даних та визначив варіанти для операцій.
read vars  
case $vars in
  1. Далі я визначив команди для першої опції, де скрипт перевіряє, чи існує користувач, якого я намагаюся створити. Якщо користувач існує, скрипт не продовжує роботу. В іншому випадку, скрипт створить користувача, створить його домашній каталог, надасть права доступу та виведе деталі користувача і його домашнього каталогу.
A)  
 echo "******Операція створення користувача******"  
 read -p "Введіть ім'я користувача, якого хочете створити: " user  
 echo "Перевіряємо, чи існує користувач"  
 id $user &> /dev/null  
 if [[$? -ne 0]]  
 then  
 echo "Користувач не існує. Тому створюємо нового"  
 mkdir /home/$user  
 useradd -d /home/$user $user  
 chmod 770 /home/$user  
 chown $user:$user /home/$user  
 echo " "  
 echo "Користувач створений. Ось його деталі:"  
 id $user  
 echo "Деталі домашнього каталогу користувача:"  
 ls -ld /home/$user  
 else  
 echo "Користувач $user вже існує. Не можна створити його знову"  
 fi;;
  1. Далі я визначив наступний варіант для зміни пароля користувача. Скрипт перевіряє, чи існує ім'я користувача, для якого запитано змінити пароль. Якщо ні, користувачеві буде запропоновано створити такого користувача. В іншому випадку скрипт продовжить виконання, запросить ввести пароль, потім підтвердити його введенням повторно. Якщо обидва паролі збігаються, пароль буде змінено.
B)  
 echo "******Операція зміни пароля******"  
 read -p "Введіть ім'я користувача для зміни пароля: " user1  
 id $user1 &> /dev/null  
 if [[$? -ne 0]]  
 then  
 echo "Користувач $user1 не існує, будь ласка, створіть його :("  
 else  
 echo "Введіть пароль: "  
 read -s pass1  
 echo "Введіть пароль повторно (якщо вони не співпадають, операція не буде виконана): "  
 read -s pass2  
 if [["$pass1" != "$pass2"]]  
 then  
 echo "Перевірка не пройшла!!! Тому не можна змінити пароль!!!"  
 else  
 echo "Призначаємо пароль користувачу"  
 echo "$user1:$pass1" | chpasswd 2> /dev/null  
 if [[$? -eq 0]]  
 then  
 echo " "  
 echo "Пароль для $user1 змінено"  
 else  
 echo " "  
 echo "Не вдалося змінити пароль"  
 fi  
 fi  
 fi;;
  1. Далі я визначив наступну опцію для додавання користувача до групи. Тут скрипт перевіряє, чи існує користувач. Якщо існує, буде запитано ім'я групи, до якої потрібно додати користувача. Якщо група існує, скрипт перевірить, чи вже є користувач у групі. Якщо користувач уже є в групі, скрипт не продовжить виконання, інакше — додасть користувача до групи.
    Якщо користувач і групи не існують, то операція не буде продовжена.
C)  
 echo "******Додавання користувача до групи******"  
 read -p "Введіть ім'я користувача, якого потрібно додати до групи: " user2  
 id $user2 &> /dev/null  
 if [[$? -eq 0]]  
 then  
 read -p "Введіть ім'я групи: " grp1  
 cat /etc/group | grep $grp1 &> /dev/null  
 if [[$? -eq 0]]  
 then  
 id $user2 | awk '{print $3}' | grep $grp1 &> /dev/null  
 if [[$? -ne 0]]  
 then  
 echo "Додаємо користувача до групи"  
 usermod -a -G $grp1 $user2  
 echo " "  
 echo "Користувач доданий до групи, перевірте деталі"  
 id $user2  
 else  
 echo " "  
 echo "Користувач вже доданий до групи $grp1"  
 id $user2  
 fi  
 else  
 echo " "  
 echo "Група $grp1 не існує"  
 fi  
 else  
 echo " "  
 echo "Невірне ім'я користувача!! Будь ласка, перевірте ім'я користувача"  
 fi;;
  1. Далі я визначив наступну опцію для зміни основної групи користувача. Скрипт перевіряє, чи існує користувач. Якщо існує, буде запитано ім'я групи, яку потрібно призначити основною. Якщо група існує, скрипт перевіряє, чи вже є ця група основною для користувача. Якщо так, скрипт не продовжить виконання. В іншому випадку основна група користувача буде змінена. Якщо користувач і групи не існують, операція не буде продовжена.
D)  
 echo "******Зміна основної групи користувача******"  
 read -p "Введіть ім'я користувача: " user3  
 id $user3 &> /dev/null  
 if [[$? -eq 0]]  
 then  
 read -p "Введіть ім'я групи, яку потрібно призначити основною: " grp2  
 cat /etc/group | grep $grp2 &> /dev/null  
 if [[$? -eq 0]]  
 then  
 id $user3 | awk '{print $2}' | grep $grp2 &> /dev/null  
 if [[$? -ne 0]]  
 then  
 echo "Оновлюємо основну групу"  
 usermod -g $grp2 $user3  
 echo " "  
 echo "Основна група змінена. Перевірте статус нижче"  
 id $user3  
 else  
 echo " "  
 echo "Група $grp2 вже є основною групою"  
 id $user3  
 fi  
 else  
 echo " "  
 echo "Група $grp2 не існує"  
 fi  
 else  
 echo " "  
 echo "Невірне ім'я користувача!! Будь ласка, перевірте ім'я користувача"  
 fi;;
  1. Я визначив наступний варіант для видалення користувача. Спочатку перевіряється, чи існує користувач. Якщо існує, запитується підтвердження від користувача для виконання операції. Якщо підтвердження отримано, робиться резервна копія домашнього каталогу користувача і сам користувач разом з його основною групою буде видалений.
E)  
 echo "******Видалення користувача******"  
 read -p "Введіть ім'я користувача для видалення: " user4  
 id $user4 &> /dev/null  
 if [[$? -ne 0]]  
 then  
 echo "Ім'я користувача $user4 некоректне!!! Будь ласка, надайте правильні дані!!!"  
 else  
 read -p "Користувач буде видалений назавжди разом з його домашнім каталогом. Ви впевнені, що хочете його видалити? [YES/NO]: " response  
 if [[$response == "YES"]]  
 then  
 echo "Робимо резервну копію домашнього каталогу користувача"  
 mkdir /home/backup_$user4_$(date +%d%m%y%H%M%S)  
 cp -r /home/$user4 /home/backup_$user4_$(date +%d%m%y%H%M%S)  
 ls -ld /home/backup_$user4_$(date +%d%m%y%H%M%S)  
 id $user4 &> /dev/null  
 if [[$? -eq 0]]  
 then  
 echo "**Видаляємо користувача**"  
 userdel -r $user4 &> /dev/null  
 groupdel -r $user4 &> /dev/null  
 echo " "  
 echo "Користувач $user4 видалений"  
 else  
 echo "Дякуємо! Користувач $user4 не буде видалений"  
 fi  
 fi  
 fi;;
  1. Я визначив наступний варіант для створення групи. Скрипт запросить ім'я групи через термінал та перевірить, чи така група вже існує. Якщо так, скрипт не буде продовжувати виконання.
    Якщо група не існує, буде продовжено створення групи.
F)  
 echo "******Створення групи******"  
 read -p "Введіть ім'я групи: " grp3  
 cat /etc/group | grep $grp3 &> /dev/null  
 if [[$? -eq 0]]  
 then  
 echo "Група $grp3 вже існує!! Будь ласка, перевірте деталі нижче"  
 cat /etc/group | grep $grp3  
 else  
 echo "Продовжуємо створення групи..."  
 groupadd $grp3  
 sleep 1  
 echo "Група створена!! Перевірте деталі нижче"  
 cat /etc/group | grep $grp3  
 fi;;
  1. Наступна умова перевіряє правильність вибору опції для виконання операції.
*) echo "Будь ласка, введіть правильну опцію для виконання операції"  
esac
  1. Весь скрипт буде виконуватися через цикл while, який продовжить виконання до того часу, поки користувач не завершить його. Це дозволить уникнути виконання скрипта заново для кожної операції. Повний скрипт виглядає наступним чином:
#!/bin/bash  
#  
#Повна операція з користувачами  
#########################  

#Перевірка, чи виконано операцію від імені root користувача  
if [[$UID -ne 0]]  
then  
 exit 1  
else  
 while true  
 do  
 echo "*************************"  
 echo "Ласкаво просимо до операцій з користувачем"  
 echo "*************************"  
 echo "A -- Створити нового користувача"  
 echo "B -- Призначити пароль користувачу"  
 echo "C -- Додати користувача до групи"  
 echo "D -- Змінити основну групу користувача"  
 echo "E -- Видалити користувача"  
 echo "F -- Створити групу"  
 echo "*************************"  
 echo "Введіть опцію для продовження: "  

 read vars  
 case $vars in  
 A)  
 echo "******Операція створення користувача******"  
 read -p "Введіть ім'я користувача, якого ви хочете створити: " user  
 echo "Перевіряємо, чи існує користувач"  
 id $user &> /dev/null  
 if [[$? -ne 0]]  
 then  
 echo "Користувач не існує. Створюємо нового"  
 mkdir /home/$user  
 useradd -d /home/$user $user  
 chmod 770 /home/$user  
 chown $user:$user /home/$user  
 echo " "  
 echo "Користувач створений. Перевірте деталі нижче:"  
 id $user  
 echo "Деталі домашнього каталогу користувача:"  
 ls -ld /home/$user  
 else  
 echo "Користувач $user вже існує."
Не можна створити користувача знову

B)
echo "***Операція зміни паролю"
read -p "Введіть ім'я користувача, для якого потрібно призначити пароль: " user1
id $user1 &> /dev/null
if [[$? -ne 0]]
then
echo "Користувач $user1 не існує, будь ласка, створіть його :("
else
echo "Введіть пароль: "
read -s pass1
echo "Введіть пароль ще раз (якщо не співпаде з попереднім паролем, операція не буде успішною): "
read -s pass2
if [["$pass1" != "$pass2"]]
then
echo "Перевірка не пройшла!!! Тому не можна оновити пароль!!!"
else
echo "Призначення паролю користувачу"
echo "$user1:$pass1" | chpasswd 2> /dev/null
if [[$? -eq 0]]
then
echo " "
echo "Пароль для $user1 оновлено"
else
echo " "
echo "Не вдалося оновити пароль"
fi
fi
fi;;
C)
echo "
Додавання користувача до групи"
read -p "Введіть ім'я користувача, якого потрібно додати до групи: " user2
id $user2 &> /dev/null
if [[$? -eq 0]]
then
read -p "Введіть ім'я групи: " grp1
cat /etc/group | grep $grp1 &> /dev/null
if [[$? -eq 0]]
then
id $user2 | awk '{print $3}' | grep $grp1 &> /dev/null
if [[$? -ne 0]]
then
echo "Додавання користувача до групи"
usermod -a -G $grp1 $user2
echo " "
echo "Користувач доданий до групи, перевірте деталі"
id $user2
else
echo " "
echo "Користувач вже доданий до групи $grp1"
id $user2
fi
else
echo " "
echo "Група $grp1 не існує"
fi
else
echo " "
echo "Невірне ім'я користувача! Будь ласка, перевірте ім'я користувача"
fi;;
D)
echo "
Зміна основної групи користувача"
read -p "Введіть ім'я користувача: " user3
id $user3 &> /dev/null
if [[$? -eq 0]]
then
read -p "Введіть ім'я групи, яка буде призначена основною групою: " grp2
cat /etc/group | grep $grp2 &> /dev/null
if [[$? -eq 0]]
then
id $user3 | awk '{print $2}' | grep $grp2 &> /dev/null
if [[$? -ne 0]]
then
echo "Оновлення основної групи"
usermod -g $grp2 $user3
echo " "
echo "Основна група змінена. Перевірте статус нижче"
id $user3
else
echo " "
echo "Група $grp2 вже є основною групою"
id $user3
fi
else
echo " "
echo "Група $grp2 не існує"
fi
else
echo " "
echo "Невірне ім'я користувача! Будь ласка, перевірте ім'я користувача"
fi;;
E)
echo "
Видалення користувача**"
read -p "Введіть ім'я користувача для видалення: " user4
id $user4 &> /dev/null
if [[$? -ne 0]]
then
echo "Ім'я користувача $user4 неправильне!!! Будь ласка, введіть правильні дані!!!"
else
read -p "Користувач буде видалений назавжди разом з його домашнім каталогом. Ви впевнені, що хочете його видалити? [YES/NO]: " response
if [[$response == "YES"]]
then
echo "Робимо резервну копію домашнього каталогу користувача"
mkdir /home/backup$user4$(date +%d%m%y%H%M%S)
cp -r /home/$user4 /home/backup$user4$(date +%d%m%y%H%M%S)
ls -ld /home/backup$user4$(date +%d%m%y%H%M%S)
id $user4 &> /dev/null
if [[$? -eq 0]]
then
echo "
Видаляємо користувача"
userdel -r $user4 &> /dev/null
groupdel -r $user4 &> /dev/null
echo " "
echo "Користувач $user4 видалений"
else
echo "Дякуємо! Користувач $user4 не буде видалений"
fi
fi
fi;;
F)
echo "
**Створення групи***"
read -p "Введіть ім'я групи: " grp3
cat /etc/group | grep $grp3 &> /dev/null
if [[$? -eq 0]]
then
echo "Група $grp3 вже існує!! Будь ласка, перевірте деталі нижче"
cat /etc/group | grep $grp3
else
echo "Продовжуємо створення групи..."
groupadd $grp3
sleep 1
echo "Група створена!! Перевірте деталі нижче"
cat /etc/group | grep $grp3
fi;;
*) echo "Будь ласка, введіть правильну опцію для виконання операції"
esac
done
fi
```

12.
Тепер давайте продемонструємо скрипт.

Створення користувача:

pic

Спроба створити вже існуючого користувача:

pic

Введення паролю в прихованому режимі та призначення його користувачу:

pic

Спроба призначити неправильний пароль:

pic

Спроба призначити пароль користувачу, якого не існує:

pic

Додавання існуючого користувача до існуючої групи:

pic

Спроба додати неіснуючого користувача до існуючої групи:

pic

Спроба додати існуючого користувача до неіснуючої групи:

pic

Спроба додати користувача до групи, до якої він вже доданий:

pic

Зміна основної групи користувача:

pic

Спроба змінити основну групу неіснуючого користувача:

pic

Спроба додати неіснуючу групу як основну групу існуючого користувача:

pic

Спроба призначити основну групу, яка вже є основною групою:

pic

Видалення користувача:

pic

pic

Спроба видалити неіснуючого користувача:

pic

Спроба створити вже існуючу групу:

pic

Створення нової групи:

pic

Висновок:

Як видно, всі демонстрації успішно завершені, і всі вимоги виконано.

Дякую за ваш час! Якщо вам сподобалась моя робота і ви хочете заохотити мене публікувати більше такого контенту, ви можете купити мені каву.

Перекладено з: Simplify user operation with shell script

Leave a Reply

Your email address will not be published. Required fields are marked *