Буває, що відділ кадрів надсилає CSV з десятками нових людей, а вам потрібно швидко додати їх до системи. Не лякайтеся 😊 Я, Kernelka, покажу, як безпечно та акуратно зробити масовий імпорт користувачів: створити акаунти, домашні директорії, додати до груп і виставити правильні права доступу Linux. Усе — через термінал Linux, з перевіреним підходом та готовими bash скрипти.
Що підготувати перед стартом
Вам знадобиться CSV-файл зі стовпчиками (у такому порядку):
- login — системний логін (без пробілів)
- full_name — ПІБ або опис
- password — тимчасовий пароль (краще одразу хеш, SHA-512)
- groups — додаткові групи, через крапку з комою (напр.,
sudo;developers) - shell — оболонка (напр.,
/bin/bash) - home — шлях до домашньої директорії (напр.,
/home/login)
Рекомендація з безпеки: не зберігайте паролі у відкритому вигляді. Краще одразу підготуйте SHA-512 хеші. Зробити це можна так:
# Згенерувати хеш пароля (запитає пароль інтерактивно)
openssl passwd -6
# Або в один рядок (обережно з історією shell!)
openssl passwd -6 'MyTempSecret123!'
Якщо тимчасово потрібні звичайні паролі — скрипт нижче теж впорається: він автоматично перетворить їх у хеші перед створенням користувача.
Основний How-to: надійний bash-скрипт для масового імпорту
Скрипт читає CSV, створює відсутні групи, додає або оновлює користувачів, створює домашні директорії, виставляє права та змушує змінити пароль при першому вході. Запускати його слід від імені root (або через sudo). Це чиста автоматизація задач для щоденної роботи з користувачі та групи Linux.
#!/usr/bin/env bash
set -euo pipefail
CSV="${1:-users.csv}"
DEFAULT_SHELL="/bin/bash"
DEFAULT_GROUPS="" # напр., "sudo" — за потреби
if [[ ! -f "$CSV" ]]; then
echo "[ERR] Не знайдено файл $CSV" >&2
exit 1
fi
# Очікувані колонки CSV: login,full_name,password,groups,shell,home
# Групи розділяються крапкою з комою: sudo;developers
while IFS=',' read -r login full_name raw_pass groups shell home; do
# Пропускаємо порожні рядки та коментарі
[[ -z "${login:-}" || "${login:0:1}" == "#" ]] && continue
shell="${shell:-$DEFAULT_SHELL}"
groups="${groups:-$DEFAULT_GROUPS}"
home="${home:-/home/$login}"
# Якщо пароль уже у форматі SHA-512 ($6$...), беремо як є; інакше — хешуємо
if [[ "${raw_pass:-}" =~ ^\$6\$ ]]; then
hash="$raw_pass"
else
hash="$(openssl passwd -6 "${raw_pass:-Temp123!}")"
fi
# Переконуємося, що додаткові групи існують
IFS=';' read -ra GS <<< "${groups:-}"
for g in "${GS[@]}"; do
[[ -z "$g" ]] && continue
if ! getent group "$g" >/dev/null; then
groupadd "$g"
echo "[INFO] Створено групу: $g"
fi
done
if id -u "$login" >/dev/null 2>&1; then
echo "[INFO] Користувач $login існує — оновлюю атрибути"
usermod -c "$full_name" -d "$home" -s "$shell" -G "$groups" -p "$hash" "$login"
mkdir -p "$home"
chown -R "$login:$login" "$home"
else
# -m створює домівку, -U створює приватну групу користувача
useradd -m -U -d "$home" -s "$shell" -c "$full_name" -G "$groups" -p "$hash" "$login"
echo "[OK] Додано: $login"
fi
chmod 700 "$home"
chown -R "$login:$login" "$home"
# Змусити змінити пароль при першому вході
chage -d 0 "$login" || true
done < "$CSV"
echo "[DONE] Масовий імпорт завершено"
Приклад підготовки файлу (створить users.csv):
cat > users.csv <<'CSV'
# login,full_name,password,groups,shell,home
ivanov,Ivan Ivanov,$6$abcd...$...,sudo;/bin/bash,/home/ivanov
petrenko,Petro Petrenko,Temp123!,developers;/bin/bash,/home/petrenko
CSV
# Запуск імпорту (потрібні root-права)
sudo bash import-users.sh users.csv
Альтернативні способи
1) Пара newusers + chpasswd
Існує класична утиліта newusers, якій потрібен спеціальний формат (подібний до /etc/passwd). Якщо у вас уже є хеші паролів, можна швидко сконвертувати CSV і завантажити користувачів пакетно. Плюс — мінімум коду, мінус — жорсткіший формат і уважність до двокрапок.
2) Ansible для великих середовищ
Коли у вас десятки серверів, краще використовувати Ansible: модуль user додає користувачів і групи декларативно. Це зручно для контролю стану та повторюваності, але виходить за межі короткого гайда.
3) Швидкі one-liners
Для невеликої партії акаунтів можна обійтися короткими командами, але будьте уважні до лапок і пробілів:
# Приклад: додати одного користувача з хешем
sudo useradd -m -U -s /bin/bash -c "Ivan Ivanov" -G sudo -p "$6$abcd...$..." ivanov
sudo chage -d 0 ivanov
GUI-спосіб (Webmin)
Якщо ви віддаєте перевагу графічним інструментам, подивіться на Webmin (веб-інтерфейс адміністрування Linux). У модулі “Users and Groups” є функція створення кількох користувачів за шаблоном або з файлу. Алгоритм:
- Встановіть Webmin та зайдіть у веб-панель як адміністратор.
- Перейдіть до “System → Users and Groups”.
- Скористайтеся “Create Multiple Users” (або імпортом), вкажіть формат і опції домівок/оболонки/груп.
- Перевірте результати та права домівок (700 для приватності).
Це не такий гнучкий варіант, як скрипт, але зручний, якщо ви нечасто робите імпорти.
FAQ
CSV з Windows має дивні символи наприкінці рядків. Що робити?
Це CRLF. Запустіть dos2unix users.csv перед імпортом.
Помилка: “useradd: group 'developers' does not exist”
Скрипт вище сам створює відсутні групи. Якщо робите вручну — додайте sudo groupadd developers перед створенням користувачів.
Чи безпечно зберігати паролі в CSV?
Ні. Краще використовувати хеші SHA-512 або вимикати паролі й використовувати SSH-ключі. Якщо все ж маєте тимчасові паролі — змушуйте їх змінювати при першому логіні (chage -d 0).
Домашні директорії отримали не ті права
Додайте/перевірте кроки chmod 700 /home/USER і chown -R USER:USER /home/USER. Так ви забезпечите приватність користувача.
Користувач уже існує. Перезаписати групи чи додати?
usermod -G перезаписує список груп. Щоб додати до існуючих, використовуйте usermod -a -G newgroup USER вручну або змініть логіку в скрипті.
Як задати приватну групу користувача?
Ключ -U в useradd створить окрему групу з такою ж назвою. Це гарна практика для керування правами на файли.
Що з локалями/діакритикою у full_name?
-c (GECOS) зазвичай сприймає UTF-8 без проблем. Головне — без ком у полі опису, якщо використовуєте CSV через кому.
Порада від Kernelka
Перш ніж запускати імпорт на бойовому сервері, перевірте все у тестовому середовищі (наприклад, у контейнері або віртуальній машині). Зробіть dry-run: спочатку замініть виклики useradd/usermod на echo, подивіться, які команди будуть виконані, і лише потім запускайте по-справжньому. Так ви збережете нерви та час 😉
Підсумок
- Готуйте акуратний CSV і, за можливості, одразу використовуйте хеші паролів.
- Скрипт автоматизує створення акаунтів, домівок, груп і зміну пароля при першому вході.
- Дотримуйтеся безпеки: права 700 на домашні директорії, мінімум зайвих груп.
- Для рідкісних імпортів можна використати Webmin або
newusers. - Тестуйте на стенді та робіть dry-run перед бойовим запуском.
Ось так просто ви опануєте масове створення акаунтів у Linux і відчуєте силу термінал Linux та bash скрипти у повсякденній роботі з права доступу Linux і користувачі та групи Linux.