ユーザー アカウントを新しい Linux マシンに転送するにはどうすればよいですか?

ユーザー アカウントを新しい Linux マシンに転送するにはどうすればよいですか?

現在、社内の Subversion リポジトリをホストしている Linux ボックスがあります。このリポジトリへのアクセスは svn+ssh 経由で行われ、マシン上のユーザー アカウントに対して認証が行われます。最近、新しいボックス (Linux もインストール済み) を入手したので、Subversion リポジトリをそのボックスに移行したいと考えています (RAID 1+0 を使用して構成された 6 つのディスクにより多くのスペースがあるため)。

リポジトリの現在のユーザーへの影響を最小限に抑えるために、現在のマシンから新しいマシンにすべてのユーザー、グループ、およびファイル情報を転送するにはどうすればよいでしょうか? 現在考えているのは、/etc/passwd および /etc/group ファイル (およびシャドウ ファイル?) から関連するエントリをコピーし、/home のユーザー フォルダーをコピーすることです。何か見落としている点はありますか?

編集: 追加情報。古いボックスは Ubuntu 8、新しいボックスは Ubuntu 9 です。約 12 人のユーザーと 12 のカスタム グループがあります。

答え1

からcyberciti.biz の記事:

従来の Linux ユーザー管理には、次のファイル/ディレクトリが必要です。

  • /etc/passwd- 各ユーザーアカウントのさまざまな情報が含まれています

  • /etc/シャドウ- ユーザーのアカウントの暗号化されたパスワード情報と、オプションでパスワード有効期限情報が含まれます。

  • /etc/グループ- ユーザーが所属するグループを定義します

  • /etc/gshadow- グループ シャドウ ファイル (グループの暗号化されたパスワードが含まれています)

  • /var/スプール/メール- 通常、ユーザーのメールはここに保存されます。

  • /家- すべてのユーザーデータはここに保存されます。

上記のすべてのファイルとディレクトリを古いサーバーから新しい Linux サーバーにバックアップする必要があります。

答え2

何人のユーザーについて話しているのでしょうか?

少数であれば、移行する各ユーザーに同じ uid と gid を指定して、新しいシステムで「useradd」を実行する方がはるかに安全です。

次に、新しいマシンに同じ uid/gid を持つアカウントが作成されたら、古いマシンでのログインを無効にし、rsync を使用してホーム ディレクトリを転送します。移行後に残っている手順は、パスワードをリセットすることだけです。

/etc/passwd や /etc/group などのコピーの問題は、間違えると、自分自身 (または root) が新しいシステムにログインできなくなることです。さらに、UNIX の種類によってこれらのファイルの解釈が異なる場合があるため、十分に注意する必要があります。ちょっとしたミスで、ユーザー「guest」としてログインできてしまうなど、さまざまなセキュリティ ホールが発生する可能性があります。

答え3

非常に素早く何かを書いてとても汚いこのために。CentOSサーバーの移行に役立ちましたが、ほとんどの最新のLinuxマシンで機能するはずです。ニーズに合わせて採用してください。

当然ですが、自己責任でご使用ください。

転送ユーザー.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

関連情報