xref: /freebsd/share/man/man5/passwd.5 (revision 8e6b01171e30297084bb0b4457c4183c2746aacc)
1.\" Copyright (c) 1988, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by the University of
15.\"	California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     From: @(#)passwd.5	8.1 (Berkeley) 6/5/93
33.\"	passwd.5,v 1.2 1994/09/20 22:44:37 wollman Exp
34.\"
35.Dd September 29, 1994
36.Dt PASSWD 5
37.Os
38.Sh NAME
39.Nm passwd
40.Nd format of the password file
41.Sh DESCRIPTION
42The
43.Nm passwd
44files are files consisting of newline separated records, one per user,
45containing ten colon (``:'') separated fields.  These fields are as
46follows:
47.Pp
48.Bl -tag -width password -offset indent
49.It name
50User's login name.
51.It password
52User's
53.Em encrypted
54password.
55.It uid
56User's id.
57.It gid
58User's login group id.
59.It class
60User's general classification (unused).
61.It change
62Password change time.
63.It expire
64Account expiration time.
65.It gecos
66General information about the user.
67.It home_dir
68User's home directory.
69.It shell
70User's login shell.
71.El
72.Pp
73The
74.Ar name
75field is the login used to access the computer account, and the
76.Ar uid
77field is the number associated with it.  They should both be unique
78across the system (and often across a group of systems) since they
79control file access.
80.Pp
81While it is possible to have multiple entries with identical login names
82and/or identical user id's, it is usually a mistake to do so.  Routines
83that manipulate these files will often return only one of the multiple
84entries, and that one by random selection.
85.Pp
86The login name must never begin with a hyphen (``-''); also, it is strongly
87suggested that neither upper-case characters or dots (``.'') be part
88of the name, as this tends to confuse mailers.  No field may contain a
89colon (``:'') as this has been used historically to separate the fields
90in the user database.
91.Pp
92The password field is the
93.Em encrypted
94form of the password.
95If the
96.Ar password
97field is empty, no password will be required to gain access to the
98machine.  This is almost invariably a mistake.
99Because these files contain the encrypted user passwords, they should
100not be readable by anyone without appropriate privileges.
101.Pp
102The group field is the group that the user will be placed in upon login.
103Since this system supports multiple groups (see
104.Xr groups 1 )
105this field currently has little special meaning.
106.Pp
107The
108.Ar class
109field is currently unused.  In the near future it will be a key to
110a
111.Xr termcap 5
112style database of user attributes.
113.Pp
114The
115.Ar change
116field is the number in seconds,
117.Dv GMT ,
118from the epoch, until the
119password for the account must be changed.
120This field may be left empty to turn off the password aging feature.
121.Pp
122The
123.Ar expire
124field is the number in seconds,
125.Dv GMT ,
126from the epoch, until the
127account expires.
128This field may be left empty to turn off the account aging feature.
129.Pp
130The
131.Ar gecos
132field normally contains comma (``,'') separated subfields as follows:
133.Pp
134.Bd -unfilled -offset indent
135name		user's full name
136office		user's office number
137wphone		user's work phone number
138hphone		user's home phone number
139.Ed
140.Pp
141This information is used by the
142.Xr finger 1
143program.
144.Pp
145The user's home directory is the full
146.Tn UNIX
147path name where the user
148will be placed on login.
149.Pp
150The shell field is the command interpreter the user prefers.
151If there is nothing in the
152.Ar shell
153field, the Bourne shell
154.Pq Pa /bin/sh
155is assumed.
156.Sh YP/NIS INTERACTION
157.Ss Enabling access to NIS passwd data
158The system administrator can configure FreeBSD to use NIS/YP for
159its password information by adding special records to the
160.Pa /etc/master.passwd
161file. These entries should be added with
162.Xr vipw 8
163so that the changes can be properly merged with the hashed
164password databases and the
165.Pa /etc/passwd
166file (
167.Pa /etc/passwd
168should never be edited manually). Alternatively, the administrator
169can modify
170.Pa /etc/master.passwd
171in some other way and then manually update the password databases with
172.Xr pwd_mkdb 8 .
173.Pp
174The simplest way to activate NIS is to add an empty record
175with only a plus sign (`+') in the name field, such as this:
176.Bd -literal -offset indent
177+:::::::::
178
179.Ed
180The `+' will tell the
181.Xr getpwent 3
182routines in FreeBSD's standard C library to begin using the NIS passwd maps
183for lookups.
184.Pp
185Note that the entry shown above is known as a
186.Pa wildcard
187entry, because it matches all users (the `+' without any other information
188matches everybody) and allows all NIS password data to be retrieved
189unaltered. However, by
190specifying a username or netgroup next to the `+' in the NIS
191entry, the administrator can affect what data is extracted from the
192NIS passwd maps and how it is interpreted. Here are a few example
193records that illustrate this feature (note that you can have several
194NIS entries in a single
195.Pa master.passwd
196file):
197.Bd -literal -offset indent
198-mitnick:::::::::
199+@staff:::::::::
200+@permitted-users:::::::::
201+dennis:::::::::
202+ken:::::::::/bin/csh
203+@rejected-users::32767:32767::::::/bin/false
204
205.Ed
206Specific usernames are listed explicitly while netgroups are signfied
207by a preceeding `@'. In the above example, users in the ``staff'' and
208``permitted-users'' netgroups will have their password information
209read from NIS and used unaltered. In other worrds, they will be allowed
210normal access to the machine. Users ``ken'' and ``dennis,'' who have
211beed named explicitly rather than through a netgroup, will also have
212their password data read from NIS, _except_ that user ``ken'' will
213have his shell remapped to
214.Pa /bin/csh .
215This means that value for his shell specified in the NIS password map
216will be overriden by the value specified in the special NIS entry in
217the local
218.Pa master.passwd
219file. User ``ken'' may have been assigned the csh shell because his
220NIS password entry specified a different shell that may not be
221installed on the client machine for political or technical reasons.
222Meanwhile, users in the ``rejected-users'' netgroup are prevented
223from logging in because their UIDs, GIDs and shells have been overridden
224with invalid values.
225.Pp
226User ``mitnick'' will be be ignored entirely because his entry is
227specified with a `-' instead of a `+'. A minus entry can be used
228to block out certain NIS password entries completely; users who's
229password data has been excluded in this way are not recognized by
230the system at all. (Any overrides specified with minus entries are
231also ignored since there is no point in processing override information
232for a user that the system isn't going to recognize in the first place.)
233In general, a minus entry is used to specifically exclude a user
234who might otherwise be granted access because he happens to be a
235member of an authorized netgroup. For example, if ``mitnick'' is
236a member of the ``permitted-users'' netgroup and must, for whatever
237the reason, be permitted to remain in that netgroup (possibly to
238retain access to other machines within the domain), the admistrator
239can still deny him access to a particular system with a minus entry.
240Also, it is sometimes easier to explicitly list those users who aren't
241allowed access rather than generate a possibly complicated list of
242users who are allowed access and omit the rest.
243.Pp
244Note that the plus and minus entries are evaluated in order from
245first to last with the first match taking precedence. This means
246that the system will only use the first entry which matches a particular user.
247If, for instance, we have a user ``foo'' who is a member of both the ``staff''
248netgroup and the ``rejected-users'' netgroup, he will be admitted to
249the system because the above example lists the entry for ``staff''
250before the entry for ``rejected-users.'' If we reversed the order,
251user ``foo'' would be flagged as a ``rejected-user'' instead and
252denied access.
253.Pp
254Lastly, any NIS password database records that do not match against
255at least one of the users or netgroups specified by the NIS access
256entries in the
257.Pa /etc/master.passwd
258file will be ignored (along with any users specified using minus
259entries). In our example shown above, we do not have a wildcard
260entry at the end of the list; therefore, the system will not recognize
261anyone except
262``ken,'' ``dennis,'' the ``staff'' netgroup and the ``permitted-users''
263netgroup as authorized users. The ``rejected-users'' netgroup will
264be recognized but all members will have their shells remapped and
265therefore be denied access.
266All other NIS password records
267will be ignored. The administrator may add a wildcard entry to the
268end of the list such as:
269.Bd -literal -offset indent
270+:::::::::/usr/local/bin/go_away
271
272.Ed
273This entry acts as a catch-all for all users that don't match against
274any of the other entries.
275.Pa /usr/local/bin/go_away
276can be a short shell script or program
277that prints a message telling the user that he is not allowed access
278to the system. This technique is sometimes userful when it is
279desireable to have the system be able to recognize all users in a
280particular NIS domain without necessarily granting them login access.
281.Pp
282The primary use of this
283.Pa override
284feature is to permit the administrator
285to enforce access restrictions on NIS client systems. Users can be
286granted access to one group of machines and denied access to other
287machines simply by adding or removing them from a particular netgroup.
288Since the netgroup database can also be accessed via NIS, this allows
289access restrictions to be administered from a single location, namely
290the NIS master server; once a host's access list has been set in
291.Pa /etc/master.passwd ,
292it need not be modified again unless new netgroups are created.
293.Sh NOTES
294.Ss Shadow passwords through NIS
295FreeBSD uses a shadow password scheme: users' encrypted passwords
296are stored only in
297.Pa /etc/master.passwd
298and
299.Pa /etc/spwd.db ,
300which are readable and writable only by the superuser. This is done
301to prevent users from running the encrypted passwords through
302password-guessing programs and gaining unauthorized access to
303other users' accounts. NIS does not support a standard means of
304password shadowing, which implies that placing your password data
305into the NIS passwd maps totally defeats the security of FreeBSD's
306password shadowing system.
307.Pp
308FreeBSD provides a few special features to help get around this
309problem. It is possible to implement password shawdowing between
310FreeBSD NIS clients and FreeBSD NIS servers. The
311.Xr getpwent 3
312routines will search for a
313.Pa master.passwd.byname
314and
315.Pa master.passwd.byuid
316maps which should contain the same data found in the
317.Pa /etc/master.passwd
318file. If the maps exist, FreeBSD will attempt to use them for user
319authentication instead of the standard
320.Pa passwd.byname
321and
322.Pa passwd.byuid
323maps. FreeBSD's
324.Xr ypserv 8
325will also check client requests to make sure they originate on a
326privileged port. Since only the superuser is allowed to bind to
327a privileged port, the server can tell if the requesting user
328is the superuser; all requests from non-privileged users to access
329the
330.Pa master.passwd
331maps will be refused. Since all user authentication programs run
332with superuser privilege, they should have the required access to
333users' encrypted password data while normal users will only
334be allowed access to the standard
335.Pa passwd
336maps which contain no password information.
337.Pp
338Note that this feature cannot be used in an environment with
339non-FreeBSD systems. Note also that a truly determined user with
340unrestricted access to your network could still compromise the
341.Pa master.passwd
342maps.
343.Ss UID and GID remapping with NIS overrides
344Unlike SunOS and other operating systems that use Sun's NIS code,
345FreeBSD allows the user to override
346.Pa all
347of the fields in a user's NIS
348.Pa passwd
349entry.
350For example, consider the following
351.Pa /etc/master.passwd
352entry:
353.Bd -literal -offset indent
354+@foo-users:???:666:666:0:0:0:Bogus user:/home/bogus:/bin/bogus
355
356.Ed
357This entry will cause all users in the `foo-users' netgroup to
358have
359.Pa all
360of their password information overriden, including UIDs,
361GIDs and passwords. The result is that all `foo-users' will be
362locked out of the system, since their passwords will be remapped
363to invalid values.
364.Pp
365This is important to remember because most people are accustomed to
366using an NIS wildcard entry that looks like this:
367.Bd -literal -offset indent
368+:*:0:0:::
369
370.Ed
371This often leads to new FreeBSD admins choosing NIS entries for their
372.Pa master.passwd
373files that look like this:
374.Bd -literal -offset indent
375+:*:0:0::::::
376
377.Ed
378Or worse, this
379.Bd -literal -offset indent
380+::0:0::::::
381
382.Ed
383.Pa DO _NOT_ PUT ENTRIES LIKE THIS IN YOUR
384.Nm master.passwd
385.Pa FILE!!
386The first tells FreeBSD to remap all passwords to `*' (which
387will prevent anybody from logging in) and to remap all UIDs and GIDs
388to 0 (which will make everybody appear to be the superuser). The
389second case just maps all UIDs and GIDs to 0, which means that
390.Pa all users will appear to be root!
391.Pp
392.Ss Compatibility of NIS override evaluation
393When Sun originally added NIS support to their
394.Xr getpwent 3
395routines, they took into account the fact that the SunOS password
396.Pa /etc/passwd
397file is in plain ASCII format. The SunOS documentation claims that
398adding a '+' entry to the password file causes the contents of
399the NIS password database to be 'inserted' at the position in
400the file where the '+' entry appears. If, for example, the
401administrator places the +:::::: entry in the middle of
402.Pa /etc/passwd,
403then the entire contents of the NIS password map would appear
404as though it had been copied into the middle of the password
405file. If the administrator places the +:::::: entry at both the
406middle and the end of
407.Pa /etc/passwd ,
408then the NIS password map would appear twice: once in the middle
409of the file and once at the end. (By using override entries
410instead of simple wildcards, other combinations could be achieved.)
411.Pp
412By contrast, FreeBSD does not have a single ASCII password file: it
413has a hashed password database. This database does not have an
414easily-defined beginning, middle or end, which makes it very hard
415to design a scheme that is 100% compatible with SunOS. For example,
416the
417.Fn getpwnam
418and
419.Fn getpwuid
420functions in FreeBSD are designed to do direct queries to the
421hash database rather than a linear search. This approach is faster
422on systems where the password database is large. However, when
423using direct database queries, the system does not know or care
424about the order of the original password file, and therefore
425it cannot easily apply the same override logic used by SunOS.
426.Pp
427Instead, FreeBSD groups all the NIS override entries together
428and constructs a filter out of them. Each NIS password entry
429is compared against the override filter exactly once and
430treated accordingly: if the filter allows the entry through
431unaltered, it's treated unaltered; if the filter calls for remapping
432of fields, then fields are remapped; if the filter calls for
433explicit exclusion (i.e. the entry matches a '-' override),
434the entry is ignored; if the entry doesn't match against any
435of the filter specifications, it's discarded.
436.Pp
437Again, note that the NIS '+' and '-' entries
438themselves are handled in the order in which they were specified
439in the
440.Pa /etc/master.passwd
441file since doing otherwise would lead to unpredicable behavior.
442.Pp
443The end result is that FreeBSD's provides a very close approximation
444of SunOS's behavior while maintaining the database paradigm, though the
445.Xr getpwent 3
446functions do behave somewhat differently that their SunOS counterparts.
447The primary differences are:
448.Bl -bullet -offset indent
449.It
450Each NIS password map record can be mapped into the password
451local password space only once.
452.It
453The placement of the NIS '+' and '-' entries does not necessarily
454affect where NIS password records will be mapped into
455the password space.
456.El
457.Pp
458In %99 of all FreeBSD configurations, NIS client behavior will be
459indistinguishable from that of SunOS or other similar systems. Even
460so, users should be aware of these architctural differences.
461.Pp
462.Ss Using groups instead of netgroups for NIS overrides
463FreeBSD offers the capability to do override matching based on
464user groups rather than netgroups. If, for example, an NIS entry
465is specified as:
466.Bd -literal -offset indent
467+@operator:::::::::
468
469.Ed
470the system will first try to match users against a netgroup called
471`operator.' If an `operator' netgroup doesn't exist, the system
472will try to match users against the normal `operator' group
473instead.
474.Ss Changes in behavior from older versions of FreeBSD
475There have been several bug fixes and improvements in FreeBSD's
476NIS/YP handling, some of which have caused changes in behavior.
477While the behavior changes are generally positive, it is important
478that users and system administrators be aware of them:
479.Bl -enum -offset indent
480.It
481In versions prior to 2.0.5, reverse lookups (i.e. using
482.Fn getpwuid )
483would not have overrides applied, which is to say that it
484was possible for
485.Fn getpwuid
486to return a login name that
487.Fn getpwnam
488would not recognize. This has been fixed: overrides specified
489in
490.Pa /etc/master.passwd
491now apply to all
492.Xr getpwent 3
493functions.
494.It
495Prior to FreeBSD 2.0.5, netgroup overrides did not work at
496all, largely because FreeBSD did not have support for reading
497netgroups through NIS. Again, this has been fixed, and
498netgroups can be specified just as in SunOS and similar NIS-capable
499systems.
500.It
501FreeBSD now has NIS server capabilities and supports the use
502of
503.Pa master.passwd
504NIS maps in addition to the standard Sixth Edition format
505.Pa passwd
506maps.
507This means that you can specify change, expiration and class
508information through NIS, provided you use a FreeBSD system as
509the NIS server.
510.El
511.Sh FILES
512.Bl -tag -width /etc/master.passwd -compact
513.It Pa /etc/passwd
514ASCII password file, with passwords removed
515.It Pa /etc/pwd.db
516.Xr db 3 -format
517password database, with passwords removed
518.It Pa /etc/master.passwd
519ASCII password file, with passwords intact
520.It Pa /etc/spwd.db
521.Xr db 3 -format
522password database, with passwords intact
523.El
524.Sh SEE ALSO
525.Xr adduser 8 ,
526.Xr chpass 1 ,
527.Xr getpwent 3 ,
528.Xr login 1 ,
529.Xr passwd 1 ,
530.Xr pwd_mkdb 8 ,
531.Xr vipw 8 ,
532.Xr yp 4
533.Sh BUGS
534User information should (and eventually will) be stored elsewhere.
535.Pp
536The YP/NIS password database makes encrypted passwords visible to
537ordinary users, thus making password cracking easier unless you use
538shadow passwords with the
539.Pa master.passwd
540maps and FreeBSD's
541.Xr ypserv 8
542server.
543.Pp
544Unless you're using FreeBSD's
545.Xr ypserv 8 ,
546which supports the use of
547.Pa master.passwd
548stype maps,
549the YP/NIS password database will be in old-style (Sixth Edition) format,
550which means that site-wide values for user login class, password
551expiration date, and other fields present in the current format
552will not be available when a FreeBSD system is used as a client with
553a standard NIS server.
554.Sh COMPATIBILITY
555The password file format has changed since 4.3BSD.
556The following awk script can be used to convert your old-style password
557file into a new style password file.
558The additional fields
559.Dq class ,
560.Dq change
561and
562.Dq expire
563are added, but are turned off by default.
564Class is currently not implemented, but change and expire are; to set them,
565use the current day in seconds from the epoch + whatever number of seconds
566of offset you want.
567.Bd -literal -offset indent
568BEGIN { FS = ":"}
569{ print $1 ":" $2 ":" $3 ":" $4 "::0:0:" $5 ":" $6 ":" $7 }
570.Ed
571.Sh HISTORY
572A
573.Nm
574file format appeared in
575.At v6 .
576The YP/NIS functionality is modeled after
577.Tn SunOS
578and first appeared in
579.Tn FreeBSD
5801.1.  The override capability is new in
581.Tn FreeBSD
5822.0.  The override capability was updated to properly support netgroups
583in
584.Tn FreeBSD
5852.0.5
586
587