Move or Migrate User Accounts From Old Linux Server To A New Linux Server
Move or Migrate User Accounts From Old Linux Server To A New Linux Server
Main menu
BASH Shell
Linux
CentOS
Debian / Ubuntu
Ubuntu Linux
Suse
RedHat and Friends
Slackware Linux
UNIX
AIX
Mac os x
FreeBSD
FreeBSD Jails (VPS)
Openbsd
Solaris
Troubleshooting
Nginx
Networking
MySQL
See all tutorial topics
Blog
About
Contact us
Forum
RSS/FEED
Q. How do I Move or migrate user accounts to from old Linux server a new Cent OS
Linux server including mails? This new system a fresh installation.
A. You can migrate users from old Linux server to new Linux sever with standard
commands such as tar, awk, scp and others. This is also useful if you are using old
Linux distribution such as Redhat 9 or Debian 2.x.
* /etc/shadow - contains the encrypted password information for user's accounts and optional the password
aging information.
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 1/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
* /etc/gshadow - group shadow file (contains the encrypted password for group)
You need to backup all of the above files and directories from old server to new Linux server.
First create a tar ball of old uses (old Linux system). Create a directory:
# mkdir /root/move/
Setup UID filter limit:
# export UGIDLIMIT=500
Now copy /etc/passwd accounts to /root/move/passwd.mig using awk to filter out system account (i.e. only
copy user accounts)
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd >
/root/move/passwd.mig
Copy /etc/group file:
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group >
/root/move/group.mig
Copy /etc/shadow file:
# awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd
| tee - |egrep -f - /etc/shadow > /root/move/shadow.mig
Copy /etc/gshadow (rarely used):
# cp /etc/gshadow /root/move/gshadow.mig
Make a backup of /home and /var/spool/mail dirs:
# tar -zcvpf /root/move/home.tar.gz /home
# tar -zcvpf /root/move/mail.tar.gz /var/spool/mail
Where,
Users that are added to the Linux system always start with UID and GID values of as specified by
Linux distribution or set by admin. Limits according to different Linux distro:
RHEL/CentOS/Fedora Core : Default is 500 and upper limit is 65534 (/etc/libuser.conf).
Debian and Ubuntu Linux : Default is 1000 and upper limit is 29999 (/etc/adduser.conf).
You should never ever create any new system user accounts on the newly installed Cent OS Linux. So
above awk command filter out UID according to Linux distro.
export UGIDLIMIT=500 - setup UID start limit for normal user account. Set this value as per your
Linux distro.
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd >
/root/move/passwd.mig - You need to pass UGIDLIMIT variable to awk using -v option (it assigns
value of shell variable UGIDLIMIT to awk program variable LIMIT). Option -F: sets the field
separator to : . Finally awk read each line from /etc/passwd, filter out system accounts and generates
new file /root/move/passwd.mig. Same logic is applies to rest of awk command.
tar -zcvpf /root/move/home.tar.gz /home - Make a backup of users /home dir
tar -zcvpf /root/move/mail.tar.gz /var/spool/mail - Make a backup of users mail dir
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 2/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Use scp or usb pen or tape to copy /root/move to a new Linux system.
# scp -r /root/move/* [email protected]:/path/to/location
Please note that you must use >> (append) and not > (create) shell redirection.
Now reboot system; when the Linux comes back, your user accounts will work as they did before on old
system:
# reboot
Please note that if you are new to Linux perform above commands in a sandbox environment. Above
technique can be used to UNIX to UNIX OR UNIX to Linux account migration. You need to make couple
of changes but overall the concept remains the same.
Further readings
Tweet
13
Like 11
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 3/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
You should follow me on twitter here or grab rss feed to keep track of new changes.
Featured Articles:
Hi
I followed your instuction on CentOS 4.4. When I reboot I lost my root user and gdm din’t start.
I could login from all user but not root.
Can you help to give me some advices please?
Pordee
Reply
You made mistake somewhere. But don’t worry you can login into single user mode (rescue mode)
and reset root account password.
http://www.cyberciti.biz/faq/linux-reset-forgotten-root-password/
Reply
Great! The following line is probably a typo as I’m assuming you mean to back this up with a copy,
otherwise you nuke the password files (probably what happened to nixcraft)
Reply
ssdon,
Reply
There is an error in the article. In the step where you back up the passwd, group, shadow, and
gshadow files from the new system to the newuser.bak directory, use the cp command, not mv.
Reply
Your instructions worked perfectly when migrating accounts from Redhat 4ES to another Redhat 4ES.
I added a couple of steps to move all the aliases and aliase folders to the new server. Thanks
Reply
Thanks,
I am looking for a payrise after rescuing a dying server. It has worked for me perfectly.
Reply
It may sound complicated, however, I am much more happy to do this with Linux than with
Mickey$oft O/S’s, in fact, I am much more happy to do ANYTHING with Linux over Windoze!
Reply
If you had used LDAP for user accounts, then you wouldn’t have needed to migrate user accounts ….
Also, you could skip the whole tar aspect by just using rsync, e.g. rsync -e ssh -avtP /home/
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 5/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
newserver:/home
Reply
Thanks for the howto. This is really close to what I have been looking for. In my particular situation
LDAP and NIS do not fit as well as your howto does. Also thanks for the comments of everyone, as
they are helpful.
Reply
you might wanne consider runing sshfs on your new server, then u can login to the old (if sshd is
running) and simply copy the requierd data true fx. mc, and get all the file rights w you…
its fast is simpel, and you only need to have secure shell intstalled on the old box`s to make it work…
(and most boxses have… ;)
Reply
I have a problem, for starters, it look lie I was kind of doing the right thing myself but this blog really
helps, thanks. Anyway everything works fine untill I get to the bit where I am extraction all the users
data from the home.tar.gz. (kind of important bit) and it fails with text flying up the screen saying
“Cannot change ownership to uid 511, gid 511″ and “Cannot mkdir: Permission denied” and ” Cannot
open: Permission denied”
I am loged in as root and the home directory of the new server has these permissions:
I’m not sure how it is possible to obtaim more permissions than that. I have tried with other privilages
on the home directory and it still does it.
Many thanks
Phil
Reply
/var/spool/cron
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 6/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Reply
Hi!
I tried your howto, and everything went along great until i rebooted and tried to log on with the users i
just copied over. root works fine. The passwords are not accepted, and i cannot change them with
passwd. “passwd: Authentication token manipulation error”. Im using fedora core 6.
Please help
Aleks
Reply
Reply
hi i am new user in linux i am getting every answer from ur site.you are providing great solution on
every problem its being great to refer your site thanks for every thing
Reply
Hi,
I have a small query my new system already has couple of user accounts now I want to transfer the
user accounts from the old system I have checked both the systems there is no conflicts in UID,GID so
shall I go ahead with it.
Subhanjan
Reply
Hi,
The things worked beautifully for me.
Thanks to the author.One more thing cant I script the steps that are done by the command awk?
Subhanjan
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 7/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
I was able to migrate the home folders and accounts from RedHad Linx to Fedora but it seems that I
cannot log in with the migrated accounts although I am able to see them under USERS. Am I missing
anything? Please help.
Reply
I am very much thankful that I got migration solution of user. How to transfer printer settings of each
user from one m/c to another? we have localy connected the printers to thin clients.
Reply
Thank you so much. This is beautiful. I’m trying to upgrade to a new physical box, different distro,
switch to ldap, and from Samba 2 to Samba 3. All this without messing up the working server. I’ve
messed up the new box several times, and your migration page is very helpful in avoiding mistakes
during this stage. BTW, I used rsync instead of tar for the home directories.
Reply
now i am using centos 3 in a dell server now in that server i am running sendmail squid and iptables ftp
now i want to migrate the server in to new dell server running in centos 5
Reply
hi
everyone i have question im a newbie admin can anyone give me advise or help me if how can i
backup my old linux email server III to new one or migrate to cent mail..tnx what are the important files
to back up for linux suse email server III?
Reply
hii,
i followed the procedure above, after all steps. USers password is not getting accepted, what could
have went wrong ?
Eliena Andrews
Reply
I cut and pasted the commands into an SSH terminal & checked the passwd.mig and shodow.mig to
find they were empty!
I double checked the lines and they were correct (values ect.)
Plus I end up with a file called “-” which I’m guessing comes from the “/etc/shadow” line “tee -” (typo
maybe?)
Id really like to get this working as it would be quite helpful with my project. My Level is slightly above
newbie Admin.
Kev
Reply
First of all i just wanna say thank you guys! This is my first time to get into the linux world! ….
I follow the instruction regarding how to’s .. then after rebooting my new centos5 box error message
appears:
“The user database cannot be read. The problem is most likely caused by a mismatch between
/etc/passwd and /etc/shadow or /etc/group and /etc/shadow. The program will exit now.”
I follow the instructions twice and i got same message error. I dont know how to fix this one. Please
help me…
Thanks.
Reply
this how to works great :) But now Im stuck i need to migrate from Redhat to Debian the UGIDLIMIT
are different on this distros? any advice ?
thanks
Reply
Great instructions easy to follow!!! Worked like a charm!! Thanks for making this available – I
have it bookmarked for when I do this again!
Reply
RE: Augusto need to migrate from Redhat to Debian the UGIDLIMIT are different on this
distros
this advice would be useful for me too. Is it possible to adjust the /etc/passwd and /etc/group files?
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 9/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
so did this:
awk -F: '($1 ~ /(tomcat|apache)/)' /etc/passwd > /root/move/passwd.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd >>
/root/move/passwd.mig
and then couldn’t figure out what the tee gave me and I was moving a set of users not based on UID
so did this:
awk -F: '{print $1}' /root/move/passwd.mig |egrep -f - /etc/shadow >
/root/move/shadow.mig
HTH
Reply
Fabulous! Routine worked great! Thanks for posting it, saved me a ton of time.
Reply
Also – a couple of commands to check out if you are having problems with “User database cannot be
read” error: pwconv, grpconv and pwck. Works like a charm – now… :)
Reply
OK, I followed instructions… got stuck with users not being able to log in. If instructions were not
correct, how do I fix it now?
Reply
Excellent! I followed the instructions and did a fresh install of openSuse 11.0 on to 10.3. I have my old
/home on a separate partition and didn’t mount it during install because Suse wants an initial user which
would have overwritten my original first user (UsId=1000). I installed, logged in as root, deleted the
initial user, changed the mount of /home to point to my old /home partition, did the transfer of backed
up passwd files etcetera, rebooted and bingo!
My only worry was, when it came to generating the initial user during install, I had a choice of
encryption algorithms for the password. Obviously if I’d chosen the wrong one I’d be stuck (though I
could probably log in as root and reset the users’ passwords).
So my question is: is it possible to tell what encryption algorithm was used for password storage before
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 10/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
starting?
Alan.
Reply
I am wanting to mirror users/groups to from one Ubuntu server to another. I see that Ubuntu starts off
with a user with UID 1000 (created with the name you give it in setup), I guess I should not try to
migrate this user since it already exists on the destination machine i.e. I should set UGIDLIMIT=1001?
What if one re-runs this action later to update the mirror? Do users gets duplicated cos surely one gets
multiple entries for same user in /etc/passwd?
Reply
Reply
My $0.02: For those who are concerned about UID’s and GID’s…
…you can change UID’s and GID’s on the old system before migration using:
Make a backup of the old files first and then change the group GID then change any appropriate users
attached to those groups if necessary. Test to make sure all is well. You can do this preemptively if you
are going to from a system that starts custom groups at 500 to one that starts custom groups at 1000
or if you don’t want any UID/GID conflicts with your target system. Be the superuser and it would also
be prudent to make the changes while none of the users are attached.
Reply
Very very helpful. I’m going to be needing to do this soon and didn’t really know how to proceed.
Thanks!
KP
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 11/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
in the command:
cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/newsusers.bak
should be:
Reply
Thanks.
Reply
copied the mbox’s from one unix box and the /etc/passwd and /etc/shadow and it worked perfectly.
thanks
Reply
Thanks the howto is very useful.But how to migrate the virtual users and domains accounts to a new
server
Reply
Reply
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 12/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Reply
Reply
@Juan,
Solaris uses the same files /etc/passwd and friends. So it should work with a little modification.
Reply
Also check for aliases because a common multiple recipients solution uses that technique
Reply
Reply
I was getting a “-” file created in /root/move when trying to get the shadow.mig, but I’m not now, and
I’m not sure what I did!
If anyone does get the “-” file, add some spaces around the “tee” command and try again… That’s
what I did and it went away!
Reply
no, wait, I wasn’t looking in the current directory – I actually don’t get rid of the “-” file…
Reply
Thanks for this guide, managed to migrate a large webserver without any major problem thanks to
you!
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 13/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
From some reason the tar commands don’t work under Red Hat Linux.
it did not manage to tar or untar the files.
Reply
Everything worked great. All my users & machines show up in User Manager.
Reply
In Ubuntu, I had a problem following these instructions. When the screensaver was locked, you
couldn’t unlock the screen without going to “Switch User” and then put in the password there. In
addition, half of the time your gdm session would immediately crash and you’d have to log in from
scratch again.
The problem was that the “shadow” user wasn’t able to read the /etc/shadow and /etc/gshadow files.
The /etc/shadow and the /etc/gshadow files need to be chown’d to root:shadow, and chmod’d to 640
like this:
Reply
I tried to move account details from SUSE to Fedora/RH and password is not working :(
I
Reply
I created account successfully, can login but login take time and gives error:
/usr/bin/xauth: timeout in locking authority file /home/testuser/.Xauthority
Any help?
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 14/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
how to create the another root user and how to change the root ?
Reply
how to transfer the files from one root to another root user in same system using ubunto or fedora?
Reply
This worked perfect for me migrating users from an old FC3 box to a new Ubuntu 10.04 LTS one. I
did run into a problem when I tried to do it a second time. The instructions as they are will result in
duplicate entries in the /etc/passwd file. If you want to do this more than once, the *.mig files will need
some manual massaging before catting into the destination passwd file. (This may go without saying for
most of you, but for me it wasn’t something I thought of ahead of time). I was able to clean it up, but it
was a pain.
Reply
For the /etc/shadow file, better use following to prevent ambiguous match, say a local account named
db will also match system account dbus
# awk -v LIMIT=$UGIDLIMIT -F: ‘($3>=LIMIT) && ($3!=65534) {print $1}’ /etc/passwd | sed -
r -e ‘s/(.*)/^\1:/’ | egrep -f – /etc/shadow > /root/move/shadow.mig
Reply
It worked perfect from FC 11 to FC 15. Btw, may I add the fact that the host keys must be
imported/ecported also. Reason: it is possible to have some users which are using their accounts
(SFTP) with the help of an automaitc SFTP client. IN order to keep everything transparent for them,
the host keys of the machine must be imported/exported (etc/ssh).
Maybe is better to test it and include it in this tutorial. Btw, the a lot for doing this.
Paul
Reply
cool post;
it save a lot of time man.
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 15/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Reply
ok
i think that you should awk at the new system for combine the new file that you had cp
Reply
I am migrating accounts between an RHEL 5 server and RHEL 6 server and noticed that etc/gshadow
file entries for even the same group are listed differently between the two servers. For example: ntp:!::
on rhel 6 and ntp:x:: on rhel 5. Your wonderful article shows that the gshadow file is copied in its
entirely (as is) from the old server to the new server. This means that the entries on the new server will
be completely replaced. Would it be better to append entries from the original gshadow that don’t
exist on the new server instead of replacing it with the entire file from the old server? Thanks in
advance.
Reply
Un saludo afectuoso..
Reply
Great help!
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 16/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Thanks
Reply
Francisco: (My Spanish is good enough to understand you, but not enough to answer…)
Your script grabs every user name above UGIDLIMIT and then grabs every matching line from
gshadow.
1. If a user matches the UGID, and is in a group that already exists on the new machine, e.g., adm,
disk, lp, man, dialout, lpadmin,… then you get two entries for those groups in the new gshadow.
2. There is a small (but non-zero) chance that a user’s name is a substring of a group that doesn’t
match UGID, then you would get false positives: roo, kern, hal, ack, kit, and other 3-letter initials that
some users might (perhaps unwisely) use. The grep should check for lines with words that match
exactly the usernames.
Reply
I keep getting permission denied when i attempt to create the shadow.mig ???
-rw-r—– 1 root shadow 982 2012-04-19 13:28 shadow are my permission group has read
Reply
Wow, you know you’ve got a great tutorial when it’s copied verbatim by a bunch of others who don’t
give one bit of credit to the original.
I have found this on at least 5 other sites with only ONE giving credit to Vivek and cyberciti.biz.
Reply
Is there a reason you use !=65534 instead of =LIMIT) && ($3=LIMIT) && ($3<=UPRLIMIT)'
Seems like without <= , your awk would pick up values above 65534 (or 29999 for some systems)
of course, there *shouldn't* be a user 65535 so it should work fine as you've specified. (my systems
seem to all have nfsnobody at 65534)
Maybe my shell scripting is a little rusty, but I think the "export" is unnecessary here, unless you want to
put the migration commands in a shell script and run it in a subshell. With export there, any other
subshells you run (until you log out) will also see that export. (Don't ask me how I know that…ouch)
Reply
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 17/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Reply
Reply
think you……..
Reply
I followed your instructions to migrate from redhat kernel 2.4 to centos 6 and for the most part, they
worked great. The only problem I am experiencing is when I go into the user manager I get the error “I
couldnt find the numerical IDs of these groups:” and it lists about 10 groups. (ident, mailnull, netdump,
news, nscd, pcap, piranha, pvm, rpm, squid, xfs) I didnt see these groups in /etc/group or
/etc/gshadow and I am not sure that any of the corresponding programs are loaded on the new
machine. Any help on this would be greatly appreciated. Thanks!
Reply
Reply
ahhhhhh…. I answered my own question after re-reading my last post. All of the programs I listed had
GIDs lower than 500. I edited the the /etc/group file (vigr) and inserted the missing values. All is well
now. Thanks for the awesome post.
Reply
Unfortunately this tutorial doesn’t working when I tried migrate user with mailboxes from Fedora do
CentOS, because when I start postfix + dovecot a lot of error with permissions denied occured in
maillog and email klients could not connect :(
Reply
thank you
Reply
Thank you
Reply
Hi
A very simple and effective approach, which I followed. Then, to copy all directories in /home
directory, I used next command as root:
rsync -avz /home/ 192.168.0.15:/home
Where /home/ refers to the source machine, and 192.168.0.15 is the IP address of the destination one.
All file permissions and ownerships were preserved. Also please make sure you include all slashes
shown.
rsync must be installed in both the source and the destination boxes. Both machines are servers which
run Debian Squeeze.
Thanks
Reply
Leave a Comment
Name *
E-mail *
Website
You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li>
<u> <ul> <kbd> <blockquote> <pre> <a href="" title="">
Submit
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 19/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
Tagged as: awk command, encrypted password, etc passwd, linux distribution, linux server, linux system, old server, scp
command, tar ball, user account migration, user accounts
nixCraft
Like
Related Faqs
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 20/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 21/22
4/20/13 Move or migrate user accounts from old Linux server to a new Linux server
©2006-2013 nixCraft. All rights reserved. Cannot be reproduced without written permission.
Privacy Policy | Terms of Service | Questions or Comments | Sitemap
www.cyberciti.biz/faq/howto-move-migrate-user-accounts-old-to-new-server/ 22/22