Якщо у вас випадково видалився обліковий запис або група, не панікуйте 🛟 Я покажу, як акуратно відновити користувача та групу в Linux, повернути той самий UID/GID, домашню директорію та права доступу. Працюватимемо у термінал Linux і торкнемося теми права доступу Linux та резервне копіювання системи, щоб усе працювало як раніше.
Покрокова інструкція відновлення
1. Перевіряємо резервні копії та знімки системи
Найпростіший шлях — відкотити файли ідентифікаторів із бекапу. Нас цікавлять:
- /etc/passwd, /etc/group — облікові записи та групи;
- /etc/shadow, /etc/gshadow — хеші паролів і метадані;
- /var/backups/passwd-, group-, shadow- — автоматичні копії деяких дистрибутивів.
# Подивитися наявні резервні копії
ls -l /var/backups/{passwd,group,shadow}*
# Знайти UID/GID видаленого користувача у копії
awk -F: '$1=="username"{print "USER:",$1,"UID:",$3,"GID:",$4,"HOME:",$6,"SHELL:",$7}' /var/backups/passwd-
# Якщо є Timeshift/Borg/Restic — відновіть лише потрібні файли з /etc
# (приклад із Borg)
borg mount /path/to/repo /mnt/borg
awk -F: '$1=="username"' /mnt/borg/latest/etc/passwd
Зафіксуйте собі: ім'я користувача, UID, первинну групу або GID, домашню директорію та оболонку.
2. Витягуємо старі параметри без бекапів (якщо треба)
Коли бекапів нема, UID можна знайти по «осиротілих» файлах на диску — вони залишаються з числовим власником.
# Скануємо файлову систему в межах кореневого розділу (уникаємо /proc, /sys, /dev)
sudo find / -xdev -nouser -o -nogroup 2>/dev/null | head
# Подивитись UID файла
ls -n /path/to/file # покаже числовий UID/GID
Так ви зможете визначити потрібний UID/GID і прив'язати їх до відновленого акаунта.
3. Відновлюємо групу з тим самим GID
Спочатку створюємо групу (якщо вона була окрема й видалена):
# Приклад: група mygroup із GID 1234
sudo groupadd -g 1234 mygroup
Якщо первинна група була така ж, як ім'я користувача, замініть mygroup на username та вкажіть знайдений GID.
4. Відновлюємо користувача з тим самим UID
Тепер додаємо користувача, не створюючи нову домашню директорію, якщо стара лишилася:
# Якщо /home/username вже існує
sudo useradd -u 1001 -g 1234 -M -d /home/username -s /bin/bash username
# Якщо /home/username відсутня — дайте -m, щоб створити її
sudo useradd -u 1001 -g 1234 -m -d /home/username -s /bin/bash username
Відновлюємо пароль або змушуємо його змінити при першому вході:
echo 'username:TempP@ss' | sudo chpasswd
sudo chage -d 0 username
Повертаємо членство в додаткових групах (звірте зі старим /etc/group-):
# Додайте потрібні групи, наприклад sudo, docker, audio
sudo usermod -aG sudo,docker,audio username
5. Відновлюємо домашню директорію та ключі SSH
Якщо є бекап домашньої директорії — розпакуйте його з правильними правами:
# Приклад відновлення з tar-архіву
sudo tar -xpf /backups/home-username.tar -C /
# Перевіряємо власника та права
sudo chown -R username:mygroup /home/username
sudo find /home/username -type d -exec chmod 700 {} +
sudo find /home/username -type f -name authorized_keys -exec chmod 600 {} +
Не забудьте про SSH:
sudo mkdir -p /home/username/.ssh
sudo chown -R username:mygroup /home/username/.ssh
sudo chmod 700 /home/username/.ssh
sudo chmod 600 /home/username/.ssh/authorized_keys
6. Повертаємо власників файлів по всій системі
Якщо UID користувача було використано у багатьох місцях поза /home, проіндексуйте файлову систему й поверніть власника. Обережно: не чіпайте системні псевдофайлові системи.
# Для кожного розділу окремо (приклад для / та /data)
sudo find / -xdev -uid 1001 -exec chown -h username:mygroup {} +
sudo find /data -xdev -uid 1001 -exec chown -h username:mygroup {} +
# Поштова скринька, якщо використовується локальна пошта
sudo touch /var/mail/username
sudo chown username:mail /var/mail/username
Якщо у вас використовуються ACL, перевірте їх:
# Подивитись ACL
getfacl -R /home/username | less
# При потребі — відновлення з вашого бекапу ACL через setfacl --restore
У системах з SELinux виконайте:
sudo restorecon -RFv /home/username
7. Перевіряємо вхід і середовище
Увійдіть як відновлений користувач (TTY/SSH) та переконайтесь, що оболонка, PATH і налаштування працюють. Перевірте sudo, cron/systemd user timers, відновіть конфіги в ~/.config за потреби.
Альтернативні способи
- Відновлення /etc/passwd-, /etc/group- з файлової системи ext4 за допомогою extundelete або testdisk (потрібне відмонтування розділу та робота з копією диска).
- Якщо користувачі керуються центрально (LDAP/SSSD), перевірте каталог — можливо, локальне відновлення не потрібне.
- systemd-homed: якщо акаунт керувався через homed, використовуйте homectl і резервні JSON-метадані для відновлення.
GUI-спосіб (коли доречно)
У GNOME «Налаштування → Користувачі» або KDE «Система → Користувачі» можна створити обліковий запис і додати до груп. Але точний UID/GID у GUI зазвичай не задається — після створення відкоригуйте в терміналі:
# Змінити UID/GID існуючого користувача та оновити власників у файлах
sudo usermod -u 1001 -g 1234 -d /home/username -m username
sudo find / -xdev -uid 1001 -exec chown -h username:mygroup {} +
Тобто GUI — для швидкого створення, а точне відновлення ідентифікаторів і прав завершуємо у термінал Linux.
FAQ
- UID уже зайнятий іншим користувачем. Що робити?
Або змініть UID того іншого (ризиковано), або створіть відновлюваному новий UID і масово замініть власника файлів зі старого UID на нового через find + chown. - Немає /var/backups/*- файлів.
Скануйте файлову систему на osirotili файли (nouser/nogroup), шукайте UID у логах (наприклад, auth.log), або дістаньте знімок з вашого інструмента резервне копіювання системи. - Домашня директорія була зашифрована (eCryptfs/LUKS)?
Для eCryptfs спробуйте sudo ecryptfs-recover-private. Для LUKS спочатку розблокуйте том, потім монтуйте і відновлюйте дані як звичайно. - Зник доступ sudo.
Додайте користувача до групи sudo (або wheel у RPM-дистрибутивах): sudo usermod -aG sudo username. - Файли були на кількох розділах/NFS.
Запускайте find окремо на кожному розділі з -xdev. Для NFS врахуйте відображення UID/GID на сервері. - Злетіли cron-завдання.
Перевірте /var/spool/cron/crontabs/username та systemd user timers (~/.config/systemd/user). Відновіть власника і права. - SSH не пускає.
Перевірте права: ~/.ssh 700, authorized_keys 600; власник — відновлений користувач.
Порада від Kernelka
Щоб не страждати наступного разу, робіть маленькі, але регулярні бекапи ідентифікаторів та груп. Ось простий скрипт-«нагадувач» для ваших bash скрипти 💡
#!/usr/bin/env bash
set -euo pipefail
DST=/root/ids-$(date +%F)
sudo mkdir -p "$DST"
sudo cp -a /etc/passwd "$DST"/
sudo cp -a /etc/group "$DST"/
sudo cp -a /etc/shadow "$DST"/
sudo cp -a /etc/gshadow "$DST"/
echo "IDs snapshot saved to $DST"
Збережіть його як /usr/local/sbin/backup-ids.sh, додайте у cron або systemd timer — і ви завжди матимете свіжу «точку відкату» для користувачі та групи Linux.
Підсумок
- Знайдіть старі UID/GID у бекапах або по осиротілих файлах.
- Спершу відновіть групу з правильним GID, потім користувача з UID.
- Поверніть власників файлів і перевірте ACL/SELinux контексти.
- Відновіть домашню директорію, SSH-ключі, sudo і cron.
- Налаштуйте регулярні бекапи /etc/passwd, /etc/group тощо — це економить нерви і час 🔧

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.