Вступ:
У цьому блозі я продемонструю операції з користувачами, а саме: створення користувача, призначення пароля, додавання користувача до групи, за допомогою shell-скрипта.
Вимоги:
- Доступ до Linux-машини/Linux-машини, розміщеної на VirtualBox/Linux, налаштованої на WSL/AWS EC2 Linux інстанс
Завдання:
- Керування користувачами має здійснюватися з правами root. Тому на початку скрипта я визначив таку умову, щоб перевірити, чи виконується скрипт root-ом або іншим користувачем. Якщо користувач не root, скрипт не буде виконано.
if [[$UID -ne 0]]
then
exit 1
- Далі я визначив наступні варіанти, які можуть бути виконані користувачем.
echo "*************************"
echo "Ласкаво просимо до операцій з користувачем"
echo "*************************"
echo "A -- Створити нового користувача"
echo "B -- Призначити пароль користувачу"
echo "C -- Додати користувача до групи"
echo "D -- Змінити основну групу користувача"
echo "E -- Видалити користувача"
echo "F -- Створити групу"
echo "*************************"
echo "Введіть опцію для продовження:"
- На наступному етапі я визначив команду “read” для зчитування введених даних та визначив варіанти для операцій.
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 вже існує. Не можна створити його знову"
fi;;
- Далі я визначив наступний варіант для зміни пароля користувача. Скрипт перевіряє, чи існує ім'я користувача, для якого запитано змінити пароль. Якщо ні, користувачеві буде запропоновано створити такого користувача. В іншому випадку скрипт продовжить виконання, запросить ввести пароль, потім підтвердити його введенням повторно. Якщо обидва паролі збігаються, пароль буде змінено.
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
- Весь скрипт буде виконуватися через цикл 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.
Тепер давайте продемонструємо скрипт.
Створення користувача:
Спроба створити вже існуючого користувача:
Введення паролю в прихованому режимі та призначення його користувачу:
Спроба призначити неправильний пароль:
Спроба призначити пароль користувачу, якого не існує:
Додавання існуючого користувача до існуючої групи:
Спроба додати неіснуючого користувача до існуючої групи:
Спроба додати існуючого користувача до неіснуючої групи:
Спроба додати користувача до групи, до якої він вже доданий:
Зміна основної групи користувача:
Спроба змінити основну групу неіснуючого користувача:
Спроба додати неіснуючу групу як основну групу існуючого користувача:
Спроба призначити основну групу, яка вже є основною групою:
Видалення користувача:
Спроба видалити неіснуючого користувача:
Спроба створити вже існуючу групу:
Створення нової групи:
Висновок:
Як видно, всі демонстрації успішно завершені, і всі вимоги виконано.
Дякую за ваш час! Якщо вам сподобалась моя робота і ви хочете заохотити мене публікувати більше такого контенту, ви можете купити мені каву.
Перекладено з: Simplify user operation with shell script