我目前有一个Linux的盒子托pipe我们的内部Subversion存储库。 访问这个仓库是通过svn + ssh进行身份validation发生在机器上的用户帐户。 我最近收购了一个shiny的新机器(也安装了Linux),并希望将Subversion版本库转换到它(因为它具有使用RAID 1 + 0configuration的六个磁盘上的更多空间)。
我需要做什么才能将当前机器上的所有用户,组和文件信息传输到新机器上,从而将对当前用户的影响降至最低? 我目前的想法是从/ etc / passwd和/ etc / group文件(和影子文件?)中复制相关条目,并复制/ home中的用户文件夹。 有什么我失踪?
编辑:额外的信息。 旧盒子是Ubuntu 8,新盒子是Ubuntu 9.大约有十几个用户和十几个自定义组。
从cyberciti.biz文章 :
传统Linux用户pipe理需要以下文件/目录:
/ etc / passwd – 包含每个用户帐户的各种信息
/ etc / shadow – 包含用户帐户的encryption密码信息和可选的密码老化信息。
/ etc / group – 定义用户所属的组
/ etc / gshadow – 组影子文件(包含组的encryption密码)
/ var / spool / mail – 通常用户邮件存储在这里。
/ home – 所有用户数据都存储在这里。
您需要将上述所有文件和目录从旧服务器备份到新的Linux服务器。
我们在谈论多less用户?
如果只是less数,那么在新系统上运行“useradd”会更安全,确保为每个正在迁移的用户指定相同的uid和gid。
然后,一旦在具有相同uid / gid的新计算机上创build了帐户,则禁用旧计算机上的login,并使用rsync通过其主目录进行传输。 剩下的唯一步骤就是在迁移后重置密码。
复制/ etc / passwd和/ etc / group之类的问题是,如果你搞砸了,你将完全阻止自己(或root)login到新系统。 另外,不同的unix口味可能对这些文件有不同的解释,所以你应该非常小心。 一个小小的漏洞,你可以打开login用户“客人”或任何其他安全漏洞。
为此写了一些非常快速和非常脏的东西。 为我的CentOS服务器迁移服务,但是应该适用于大多数现代Linux机器。 采纳你的需求
显然,使用风险自负。
transferuser.sh
#!/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