| ## Managing Accounts with pw
## Nathan Underwood <>
For many of you who are new to FreeBSD, the only user currently on your
system is likely going to be yourself; but, what happens when you want to
take advantage of the multi-user capabilities of a UNIX-based system?
For many experienced BSD-based users, the adduser command is the only
utility they have ever used. While adduser does the job just fine, it is
a bit cumbersome and requires answering a series of questions for each
user. What if there was a way to quickly add users with one simple
command? There is a way, and it is already available for use in FreeBSD;
one just has to know how to use it. Pw is the tool, and it has a few
advantages over adduser. It is faster (written in C rather than Perl), it
is more easily configurable, and it has many more command line arguments,
to name a few.
From the pw man page:
Pw was written to mimic many of the options used in the SYSV
shadow support suite, but is modified for passwd and group
fields specific to the 4.4BSD operating system, and combines
all of the major elements into a single command.
So, now you have a brief history of pw, but you are probably asking, "How
do I use it...and how easy is it?". Well, this is the great part. It is
easy, and anyone can set it up and be adding users in rapid succession
in no time at all. All that is required is a /etc/pw.conf file, some
skeleton files in /usr/share/skel, and a couple of commands at the prompt.
There are two ways to get started, and I recommend whichever you feel
comfortable with, or a combination of both.
If you have never read the man pages for the program that you are trying
to use, you are either very brave or very ignorant. Man pages are the
best way to introduce yourself to a particular program. This doesn't
necessarily mean that you have to read the entire man page, but they are
often an invaluable source of information.
$ man pw
This will give you loads of info about pw and its various command line
$ man pw.conf
An excellent man page for help on writing your pw.conf file.
After doing this, you may not have to read the rest of this article! But,
if you want some clear examples, continue on.
Configuring for pw
I certainly recommend reading the man pages, for they will give you a
better understanding of what the next section explains. To start, we need
a pw.conf file in our /etc directory. (On a side note, you will have to
be the superuser to complete most of the following tasks.) In the
following example, I am using the bash shell, which you may not have
installed on your system. Substitute the path to whatever shell you want
to use and include the shell name (ie. tcsh, csh, etc.)
The pw.conf file:
# /etc/pw.conf for generic use
# Minimum and Maximum uid
# Define the minimum and maximum user id's for your users. These
# numbers can be of your choosing, I wouldn't recommend starting with
# less than a uid of 100 since some programs (that you might not have
# installed yet) require uid's below 100. If you start creating users
# with extremely low (below 100) uid's, you are asking for trouble.
# This will set it so that you have to use the passwd command
# after the user is created to set the password. Other options are
# explained in the man pages. This is the most simple use.
# The default group
# This set the default group for all users, you may override it with
# -g "groupname" at the command line; or, you may comment it
# it out to create a separate group for each user. I have set the
# default group here as users.
# Re-using gaps in uid sequences
# If you delete a user and have this set in your file, the next user
# added will receive the deleted person's user id.
# Set root for home directories
# This allows you to set the root directory where all your user
# directories will be created. I have chosen /home as the
# root in this example, thus giving any user the path /home/username.
# The default shell
# This is important to set if you want to use anything other than
# /bin/sh for your shell. There are 3 items here: the path to
# the directory where the default shell resides, the available shells
# to use (I've only listed bash), and the actual default shell.
# In this example I've chosen the bash shell.
Don't forget to put it in your /etc directory! While there are more
options you can add to your pw.conf file such as extra groups and
sending out a welcome letter, the above are most crucial to adding a user
to the system.
That's it! Now you're probably asking, "Well, what does it create and how
do I use it?". To add a user to your system after you have written your
pw.conf and placed it in your /etc directory, you will need to make sure
that some skeleton files are already in the default place that pw looks
for them in. In FreeBSD, this location is /usr/share/skel. On a virgin
FreeBSD setup, these files will be:
$ cd /usr/share/skel/
$ ls -l
-rw-r--r-- 1 bin bin 509 Dec 1 01:34 dot.cshrc
-rw-r--r-- 1 bin bin 561 Dec 1 01:34 dot.login
-rw-r--r-- 1 bin bin 139 Dec 1 01:34 dot.login_conf
-rw------- 1 bin bin 351 Dec 1 01:34 dot.mail_aliases
-rw-r--r-- 1 bin bin 313 Dec 1 01:34 dot.mailrc
-rw-r--r-- 1 bin bin 749 Dec 1 01:34 dot.profile
-rw------- 1 bin bin 257 Dec 1 01:34 dot.rhosts
-rw-r--r-- 1 bin bin 832 Dec 1 01:34 dot.shrc
These are the files that will be inserted in any users home directory that
you create. You may add any files to this directory that you want
to be in your users home directories by default (eg. dot.muttrc or
dot.bashrc). *When you run pw, the "dot" at the beginning of the files
in the skel directory will be removed, leaving the familiar .muttrc or
.bashrc*. You are now ready to begin to rapidly add users.
The pw useradd command
If your user's username was going to be "foo" for example, at the command
line you would type:
$ pw useradd foo -c "Mr. Foo" -m
You've just added a user! Now for an explanation:
||adds user "username" ("foo" in our example)
|-c "Real Name"
||gecos info (Our user's real name is Mr. Foo)
||creates the users home dir with /usr/share/skel contents
Setting the password
The only other thing you will have to do is create a password for the
user, which is simply done:
$ passwd foo
Making sure with pw usershow
Lastly, to make sure that you have created the account with the
information you thought, use the pw usershow command and check it out.
For example, to check on the user we just created (the following will
look slightly different on your system, depending on your personal changes
to the pw.conf file), we will do:
$ pw usershow foo
foo:*:1001:1001::0:0: Mr. Foo :/home/foo:/usr/local/bin/bash
It was a success, and with this tool under your belt you can spend more
time having fun on your system and less time adding users.
The pw userdel command
Yes, there will come a time when you want to delete users, and pw makes it
extremely simple to do so. All we have to do to delete poor Mr. Foo is:
$ pw userdel foo -r
The -r removes all of foo's files and deletes his home directory.
You have now learned to effectively manage accounts with pw; however,
experiment and read the man pages, for there are a myriad of options and
other account management features that you can utilize with pw. I hope
you will take the time to experiment and read the man pages. Happy adding
Return to Issue #2