web-dev-qa-db-ja.com

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

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

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

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

5
Anthony Cramp

cyberciti.biz記事から

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

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

  • / etc/shadow-ユーザーのアカウントの暗号化されたパスワード情報と、オプションのパスワードエージング情報が含まれます。

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

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

  • / var/pool/mail-通常、ユーザーの電子メールはここに保存されます。

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

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

6

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

数が少ない場合は、新しいシステムで「useradd」を実行する方がはるかに安全です。移行するユーザーごとに同じuidとgidを指定してください。

次に、同じマシンで同じuid/gidを使用してアカウントを作成したら、古いマシンでのログインを無効にし、rsyncを使用してホームディレクトリに転送します。残りの唯一のステップは、移行後にパスワードをリセットすることです。

/ etc/passwdや/ etc/groupのようなものをコピーする際の問題は、失敗した場合、自分(またはroot)が新しいシステムにログインできないようにすることです。さらに、UNIXフレーバーによって、これらのファイルの解釈が異なる可能性があるため、注意が必要です。 1つの小さな伝票で、ユーザー「ゲスト」またはその他のセキュリティホールとしてログインを開くことができます。

4
slacy

非常に速く何かを書いた非常に汚いこれのために。 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
0
Zabuzzman