如何将用户帐户转移到新的 Linux 机器?

如何将用户帐户转移到新的 Linux 机器?

我目前有一个 Linux 机器托管我们的内部 Subversion 存储库。访问此存储库是通过 svn+ssh 进行的,并针对机器上的用户帐户进行身份验证。我最近买了一个崭新的机器(也安装了 Linux),想将 Subversion 存储库转移到它上面(因为它在使用 RAID 1+0 配置的六个磁盘上有更多的空间)。

我必须做什么才能将所有用户、组和文件信息从当前计算机转移到新计算机,以尽量减少对存储库当前用户的影响?我目前的想法是从 /etc/passwd 和 /etc/group 文件(和影子文件?)复制相关条目,并复制 /home 中的用户文件夹。我遗漏了什么吗?

编辑:附加信息。旧机器是 Ubuntu 8,新机器是 Ubuntu 9。大约有十几个用户和十几个自定义组。

答案1

cyberciti.biz 文章

传统的 Linux 用户管理需要以下文件/目录:

  • 密码文件 /etc/passwd- 包含每个用户帐户的各种信息

  • /etc/shadow- 包含用户账户的加密密码信息和可选的密码有效期信息。

  • /etc/组- 定义用户所属的组

  • /etc/gshadow- 组影子文件(包含组的加密密码)

  • /var/spool/邮件- 一般用户的电子邮件都存储在这里。

  • /家- 所有用户数据都存储在这里。

您需要将上述所有文件和目录从旧服务器备份到新的 Linux 服务器。

答案2

我们谈论的是多少个用户?

如果只有几个,那么在新系统上运行“useradd”会更安全,确保为要迁移的每个用户指定相同的 uid 和 gid。

然后,在新机器上创建具有相同 uid/gid 的账户后,禁用旧机器上的登录,并使用 rsync 传输其主目录。唯一剩下的步骤是在迁移后重置密码。

复制 /etc/passwd 和 /etc/group 之类的文件时,如果弄乱了,您将完全无法登录新系统(或 root 用户)。此外,不同的 unix 版本对这些文件的解释可能不同,因此您应该非常小心。一个小小的失误就可能导致以“guest”用户身份登录或出现任何其他安全漏洞。

答案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

相关内容