Вопрос: Как можно переместить/скопировать пользовательские аккаунты со старого сервера на новый. Cent OS Linux. Свежая установка.
Ответ: Задача не самая простая, но вполне решаемая при помощи стандартных команд типа tar, awk, scp и других. Это так же возможно даже если вы используете устаревшие дистрибутивы вроде RedHat 9 или Debian 2.x.
Следующие файлы/каталоги используются в Linux для управления пользователями:
- /etc/passwd - содержит различную информацию по всем пользовательскм аккаунтам.
- /etc/shadow - содержит зашифрованные пароли и в случае необходимости - время окончания срока действия пароля.
- /etc/group - определяет группы, в которые входят пользователи.
- /etc/gshadow - содержит зашифрованные пароли для групп.
- /var/spool/mail - здесь обычно хранится пользовательская почта.
- /home - здесь хранятся все пользовательские данные.
Вам нужно скопировать все эти файлы со старой системы на новую.
Команды, выполняемые на старой системе:
Сначала нужно создать архив со всеми необходимыми файлами. Создаём каталог:
# mkdir /root/move/
Задаём лимит UID:
# export UGIDLIMIT=500
Теперь копируем /etc/passwd в /root/move/passwd.mig используя awk чтобы выбрать только пользовательские аккаунты.
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > /root/move/passwd.mig
Копируем файл /etc/group:
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > /root/move/group.mig
Копируем /etc/shadow:
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /root/move/shadow.mig
Копируем /etc/gshadow (редко используется):
# cp /etc/gshadow /root/move/gshadow.mig
Создаём архивы папок /home и /var/spool/mail:
# tar -zcvpf /root/move/home.tar.gz /home
# tar -zcvpf /root/move/mail.tar.gz /var/spool/mail
Пояснения:
- В Linux пользователи добавляемые в систему получают UID и GID из диапазонов, установленных дистрибутивом или администратором. Эти пределы в разных дистрибутивах различаются:
- RHEL/CentOS/Fedora Core: минимальное значение 500. максимальное - 65534. (/etc/libuser.conf).
- Debian and Ubuntu Linux: минимальное значение 100, максимальное - 29999. (/etc/adduser.conf).
- Вы не должны создавать новых пользователей в новой системе самостоятельно. Иначе при переносе аккаунтов может возникнуть конфликт UID.
- export UGIDLIMIT=500 - устанавливает минимальное значени UID в системе. Установите это значение в соответствие с вашим дистрибутивом.
- awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534)’ /etc/passwd > /root/move/passwd.mig - Передамём переменную UIGIDLIMIT awk, используя опцию -v. Опция -F указывает на разделитель полей (по умолчанию пробел). awk читает файл /etc/passwd, пропускает системные учётные записи и генерирует файл /root/move/passwd.mig.
- tar -zcvpf /root/move/home.tar.gz /home - создаём архив пользовательских домашних каталогов.
- tar -zcvpf /root/move/mail.tar.gz /var/spool/mail - создаём архив поьзовательской почты.
Используйте scp или какой-либо другой способ для копирования /root/move на новую систему Linux:
# scp -r /root/move/* user@new.linuxserver.com:/path/to/location
Команды, выполняемые на новой системе:
Сначала создайте резервную копию всех учётных записей и паролей:
# mkdir /root/newsusers.bak
# cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/newsusers.bak
Теперь восстановите учётные записи со старой системы:
# cd /path/to/location
# cat passwd.mig >> /etc/passwd
# cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# /bin/cp gshadow.mig /etc/gshadow
Помните что нужно использовать >> (добавление) а не > (создани) при переносе учётных записей.
Теперь можно распаковать архив с домашними каталогами:
# cd / # tar -zxvf /path/to/location/home.tar.gz
Пардпоследний шаг: распаковка архива с почтой:
# cd / # tar -zxvf /path/to/location/mail.tar.gz
Теперь перезагрузитесь. Сразу после перезагрузки ваши учётные записи будут работать так же, как работали на старой системе:
# reboot
Если вы переносите учётные записи между разными *nix-системами - некоторые команды изменятся. Но основная идея останется такой же.