make — create @userdb@
makeuserdb
[-f filename
]
pw2userdb
vchkpw2userdb
[--vpopmailhome=dir
] [--todir=dir
]
makeuserdb creates @userdb@.dat
from
the contents of @userdb@
.
@userdb@
's contents are described later in this document.
Maildrop,
Courier, and other applications use
@userdb@.dat
as a
substitute/complement for your system password file.
The usual purpose for
@userdb@.dat
is to specify "virtual" accounts - accounts
that do
not have an associated system login.
Usually (but not necessarily) all virtual accounts share the same
system userid.
@userdb@.dat
may also replace
your system password file. Because the system password file is a text file,
when there's a large number of accounts it will be significantly faster to
search
@userdb.dat@
, which is a binary database,
instead of a flat text file that the system password file usually is.
The makeuserdb command can be safely executed during normal system activity.
The -f
option creates
from
filename
.dat
, instead of the
default filename
@userdb@.dat
from
@userdb@
.
@userdb@
@userdb@
is a plain text file that can be created using
any text editor. Blank lines are ignored. Lines that start with the #
character are comments, and are also ignored.
Other lines define properties of a single
"account", one line per account.
@userdb@
may be a directory instead of a plain file.
In that case all files in @userdb@
are essentially
concatenated, and are treated as a single file.
Each line takes the following format:
name
<TAB>field
=value
|field
=value
...
name
is the account name.
name
MUST contain only lowercase characters
If Courier is
configured to treat lowercase and uppercase account names as
identical, name
is followed by exactly one tab
character, then a list of field/value pairs separated by vertical slashes.
field
is the name of the field,
value
is the field value.
Fields and values themself cannot contain slashes or control characters.
Fields may be
specified in any order. Here are all the currently defined fields. Note that
not every field is used by every application that reads
@userdb@.dat
.
uid
-value
is a (possibly) unique numerical user ID for this account.
gid
-value
is a (possibly) unique numerical group ID for this account.
home
-value
is the account's home directory.
shell
-value
is the account's default login shell.
systempw
-value
is the account's password. See userdbpw(8) for details on how to set up this field.
pop3pw, esmtppw, imappw...
-value
specifies a separate password used only for authenticating access using a specific service, such as POP3, IMAP, or anything else. If not defined,systempw
is always used. This allows access to an account to be restricted only to certain services, such as POP3, even if other services are also enabled on the server.
value
specifies the location of the account's Maildir mailbox. This is an optional field that is normally used when userdb is used to provide aliases for other mail accounts. For example, one particular multi-domain E-mail service configuration that's used by both Qmail and Courier servers is to deliver mail for a mailbox in a virtual domain, such as "user@example.com", to a local mailbox called "example-user". Instead of requiring the E-mail account holder to log in as "example-user" to download mail from this account, a userdb entry for "user@example.com" is set up with
quota
-value
specifies the maildir quota for the account's Maildir. This has nothing to do with actual filesystem quotas. Courier has a software-based Maildir quota enforcement mechanism which requires additional setup and configuration. See maildirquota(7) for additional information.
@userdb@shadow.dat
All fields whose name ends with 'pw' will NOT copied to
@userdb@.dat
. These fields will be copied to
@userdb@shadow.dat
.
makeuserdb creates @userdb@shadow.dat
without any group and world permissions.
Note that makeuserdb reports an error
if @userdb@ has any group
or world permissions.
/etc/passwd
and vpopmail to @userdb@
format
pw2userdb reads the /etc/passwd
and
/etc/shadow
files and converts all entries to the
@userdb@
format,
printing the result on standard output.
The output of pw2userdb
can be saved as @userdb@ (or as some file in this
subdirectory).
Linear searches of /etc/passwd
can
be very slow when you have
tens of thousands of accounts.
Programs like maildrop always look in
@userdb@
first.
By saving the system password file in
@userdb@
it is possible to significantly reduce the
amount of
time it takes to look up this information.
After saving the output of pw2userdb, you must still run
makeuserdb to create
@userdb@.dat
.
vchkpw2userdb converts a vpopmail-style
directory hierarchy to the @userdb@
format.
This is an external virtual domain management package that's often used
with Qmail servers.
Generally, an account named 'vpopmail' is reserved for this purpose.
In
that account the file users/vpasswd
has the same
layout as
/etc/passwd
, and performs a similar function, except
that all userid in users/vpasswd
have the same userid.
Additionally, the
domains
subdirectory stores virtual accounts for
multiple domains. For example,
domains/example.com/vpasswd
has the passwd file for the domain example.com
.
Some systems also have a soft link, domains/default
,
that points to a domain that's considered a "default" domain.
The vchkpw2userdb reads all this information, and tries to
convert it into the @userdb@
format. The
--vpopmailhost
option specifies the top level
directory, if it is
not the home directory of the vpopmail account.
The vchkpw2userdb script prints the results on standard
output. If specified, the --todir
option
tries to convert all
vpasswd
files one at a time, saving each one
individually in dir
. For example:
mkdir @userdb@
vchkpw2userdb --todir=@userdb@/vpopmail
makeuserdb
It is still necessary to run makeuserdb, of course, to
create the binary database file @userdb@.dat
NOTE: You are still required to create the @userdb@ entry
which maps
system userids back to accounts,
"uid
=<TAB>name
",
if that's applicable. vchkpw2userdb will not do it for
you.
NOTE: makeuserdb may complain about duplicate entries, if
your "default" entries in users/vpasswd
or
domains/default/vpasswd
are the same as anything in any
other @userdb@
file. It is also likely that you'll end
up with duplicate, but distinct, entries for every account in the default
domain. For
example, if your default domain is example.com, you'll end up with duplicate
entries - you'll have entries for both user
and
user@example.com
.
If you intend to maintain the master set of accounts using
vchkpw/vpopmail,
in order to avoid cleaning this up every time, you might want to consider
doing the following: run vchkpw2userdb once, using the
--todir
option.
Then, go into the resulting directory, and
replace one of the redundant files with a soft link to
/dev/null
.
This allows you to run
vchkpw2userdb without having to go in and
cleaning up again, afterwards.
@userdb@
@userdb@.dat
@userdb@shadow.dat
@tmpdir@/userdb.tmp
- temporary file
@tmpdir@/userdbshadow.tmp
- temporary file