I created some users with:
$ useradd john
and I forgot to specify the parameter -m
to create the home directory and to have the skeleton files copied to each user. now I want to do that, and I don't want to recreate all users (there must be an easier way). so, is there any way to create the user directories and copy the skeleton files?
I thought about creating the directories, chowning them to the corresponding user, copying all the skeleton files and chowning them to the corresponding user. but if there's a command like useradd -m
that doesn't create the user again, but create the directories, it'd be better.
Also you can use
mkhomedir_helper
You will need to create the users directory manually. This requires three steps:
/etc/passwd
, usually there will be already a /home/login entry.And finally set right permissions:
mkdir /home/YOU
cd /home/YOU
cp -r /etc/skel/. .
chown -R YOU.YOURGROUP .
chmod -R go=u,go-w .
chmod go= .
BTW: I always miss the
-m
option for useradd too. At least Debian based systems should have anadduser
command, which I recommend over useradd. If you missed-m
option it might also be worth considering todeluser
and then recreate the user with proper options.Edit: Added
-r
for copying also directories.This might sound like a silly idea, but if the users aren't actually doing anything, you could do:
cat /etc/passwd | cut -f 1 -d : >/tmp/users.list
Then edit /tmp/users.list to only contain the users you want. Then do:
However, many Redhat based distributions will create you a new home directory when you first login, providing it is specified in /etc/passwd where the directory should be.
To test that, do an "su - " and see if it does "the right thing". If it doesn't, the above script will work quite nicely, I think.
That should do the trick I believe
You can use something like pam_mkhomedir to prevent this from ever being an issue with any users in the future. pam_mkhomedir is a PAM module that automatically creates a user's home directory on login if it doesn't exist, and populates it with files from /etc/skel (or whatever skel directory you specify).
This is also a nicely scalable approach because it will continue to solve this problem if you ever switch your user repository over to a directory service like LDAP in the future.
In my case, the home volume was corrupted and I decided just rebuild it from scratch since not much data involved but I want to keep users' login information, so I recreated the home directories manually with this script:
If you edit
/etc/login.defs
to containthen home directories will be automatically created for any future users, unless you tell the system not to do so.
Another option is to use PAM for logins, and use the pam_mkhomedir module to automagically create the homedir on the first login.
Login with the user john and write from a shell:
That's it! Don't use sudo or su, you don't need root access to create some directories. From a root account, you can use:
That way, you will execute the command as john, that can be useful if you made the mistake with more than one user.
My first step after doing a
useradd
is tosu - <user>
.Creates the home directories, copies skeletons, etc - at least on the CentOS 4 box I do that on most frequently.
This is exactly what the
mkhomedir_helper $USERNAME
command does.