要升級 Linux Server 時, 要連同帳號一同轉移, 步驟如下:
1. 複製舊 Server 檔案:
/etc/passwd – 內含帳號資訊, 如家目錄, shell 等.
/etc/shadow – 內含帳號加密的密碼.
/etc/group – 定義用戶群組
/etc/gshadow – 內含群組加密資訊.
/home – 用戶預設的家目錄.
將上面檔案及目錄備份:
# mkdir /root/move/
# export UGIDLIMIT=500
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534)’ /etc/passwd > /root/move/passwd.mig
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534)’ /etc/group > /root/move/group.mig
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534) {print $1}’ /etc/passwd | tee – |egrep -f – /etc/shadow > /root/move/shadow.mig
# cp /etc/gshadow /root/move/gshadow.mig
# tar -zcvpf /root/move/home.tar.gz /home
# export UGIDLIMIT=500
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534)’ /etc/passwd > /root/move/passwd.mig
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534)’ /etc/group > /root/move/group.mig
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534) {print $1}’ /etc/passwd | tee – |egrep -f – /etc/shadow > /root/move/shadow.mig
# cp /etc/gshadow /root/move/gshadow.mig
# tar -zcvpf /root/move/home.tar.gz /home
上面有幾行用了 awk, 只會備份 UID 大過 500 的帳號, Redhat / Centos 500 以下的都是系統帳號, Debian 要改為 1000.
然後將 /root/move 下面的內容以安全途徑傳送到新 Server, 例如 scp:
# scp -r /root/move/* user@newserver.com:/root/old_server_bak
新 Server 操作
先將原來的檔案備份:
# mkdir /root/newsusers.bak
# cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/newsusers.bak
# cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/newsusers.bak
將舊 Server 備份過來的檔案還原
# cd /root/old_server_bak
# cat passwd.mig >> /etc/passwd
# cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# cp gshadow.mig /etc/gshadow
# cd /
# tar -zxvf /root/old_server_bak/home.tar.gz
# cat passwd.mig >> /etc/passwd
# cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# cp gshadow.mig /etc/gshadow
# cd /
# tar -zxvf /root/old_server_bak/home.tar.gz
上面必須用雙箭頭 “>>”, 不能用單箭頭 “>”, 如果用單箭頭的話會將新 Server 的系統帳號刪除。
最後 reboot server, 之後使用者便可以使用原有密碼登入了。