
В настоящее время у меня есть Linux-бокс, на котором размещен наш внутренний репозиторий Subversion. Доступ к этому репозиторию осуществляется через svn+ssh с аутентификацией, выполняемой по учетным записям пользователей на машине. Недавно я приобрел блестящий новый ящик (также с установленным Linux) и хочу перенести на него репозиторий Subversion (так как на нем больше места на шести дисках, настроенных с использованием RAID 1+0).
Что мне нужно сделать, чтобы перенести всю информацию о пользователях, группах и файлах с текущей машины на новую, чтобы минимизировать влияние на текущих пользователей репозитория? Мои текущие мысли - скопировать соответствующие записи из файлов /etc/passwd и /etc/group (и теневых файлов?), а также скопировать папки пользователей в /home. Есть ли что-то, что я упускаю?
EDIT: Дополнительная информация. Старый ящик — Ubuntu 8, новый ящик — Ubuntu 9. Есть около дюжины пользователей и дюжина пользовательских групп.
решение1
Для традиционного управления пользователями Linux требуются следующие файлы/каталоги:
/etc/пароль- содержит различную информацию для каждой учетной записи пользователя
/etc/тень- содержит зашифрованную информацию о паролях для учетных записей пользователей и, опционально, информацию об устаревании паролей.
/etc/группа- определяет группы, к которым принадлежат пользователи
/etc/gshadow- файл тени группы (содержит зашифрованный пароль для группы)
/var/spool/mail- Обычно здесь хранятся адреса электронной почты пользователей.
/дом- Все данные пользователей хранятся здесь.
Вам необходимо сделать резервную копию всех вышеуказанных файлов и каталогов со старого сервера на новый сервер Linux.
решение2
О каком количестве пользователей идет речь?
Если их немного, будет гораздо безопаснее просто запустить «useradd» на новой системе, убедившись, что вы указали одинаковые uid и gid для каждого пользователя, которого вы переносите.
Затем, как только учетные записи будут созданы на новой машине с тем же uid/gid, отключите входы на старой машине и используйте rsync для переноса их домашних каталогов. Единственным оставшимся шагом будет сброс их паролей после миграции.
Проблема с копированием таких вещей, как /etc/passwd и /etc/group, заключается в том, что если вы все испортите, вы полностью заблокируете себе (или root) вход в новую систему. Кроме того, разные версии unix могут по-разному интерпретировать эти файлы, поэтому будьте очень осторожны. Одна маленькая оплошность, и вы можете открыть вход в систему как пользователь "гость" или любое количество других дыр в безопасности.
решение3
Написал что-то очень быстро иочень грязныйдля этого. Мне понадобилось для миграции серверов CentOS, но должно работать и для большинства современных машин Linux. Приспособьте под свои нужды
Разумеется, используйте на свой страх и риск.
трансферюзер.ш
#!/bin/sh
# Transfer user from old passwd / shadow to existing system. Create homedir if
# necessary
# configurables
OLDETC=/path/to/extract/old/etc
# end configurables
if [ $# -ne 1 ]; then
echo "Usage: $0 <username>"
exit 1
fi
NEWUSER=$1
OLDPWD=${OLDETC}/passwd
OLDSHDW=${OLDETC}/shadow
OLDGRP=${OLDETC}/group
OLDGSHDW=${OLDETC}/gshadow
id $NEWUSER > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "ERROR: user $NEWUSER already exist on this system"
exit 2
fi
grep -q "${NEWUSER}:" $OLDPWD
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo "ERROR: user $NEWUSER does not exist in $OLDPWD"
exit 3
fi
# all seems good, lets blindly transfer user
grep "${NEWUSER}:" $OLDPWD >> /etc/passwd
grep "${NEWUSER}:" $OLDSHDW >> /etc/shadow
grep "${NEWUSER}:" $OLDGRP >> /etc/group
grep "${NEWUSER}:" $OLDGSHDW >> /etc/gshadow
/usr/sbin/mkhomedir_helper ${NEWUSER}
# check consistency:
pwck -r
grpck -r