xref: /freebsd/share/man/man5/passwd.5 (revision daf1cffce2e07931f27c6c6998652e90df6ba87e)
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.\" $FreeBSD$
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 login class.
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
73Lines whose first non-whitespace character is a pound-sign (#)
74are comments, and are ignored.  Blank lines which consist
75only of spaces, tabs or newlines are also ignored.
76.Pp
77The
78.Ar name
79field is the login used to access the computer account, and the
80.Ar uid
81field is the number associated with it.  They should both be unique
82across the system (and often across a group of systems) since they
83control file access.
84.Pp
85While it is possible to have multiple entries with identical login names
86and/or identical user id's, it is usually a mistake to do so.  Routines
87that manipulate these files will often return only one of the multiple
88entries, and that one by random selection.
89.Pp
90The login name must never begin with a hyphen (``-''); also, it is strongly
91suggested that neither upper-case characters nor dots (``.'') be part
92of the name, as this tends to confuse mailers.  No field may contain a
93colon (``:'') as this has been used historically to separate the fields
94in the user database.
95.Pp
96The password field is the
97.Em encrypted
98form of the password.
99If the
100.Ar password
101field is empty, no password will be required to gain access to the
102machine.  This is almost invariably a mistake.
103Because these files contain the encrypted user passwords, they should
104not be readable by anyone without appropriate privileges.
105Administrative accounts have a password field containing an asterisk
106.Ql \&*
107which disallows normal logins.
108.Pp
109The group field is the group that the user will be placed in upon login.
110Although this system supports multiple groups (see
111.Xr groups 1 )
112this field indicates the user's primary group.
113Secondary group memberships are selected in
114.Pa /etc/group .
115.Pp
116The
117.Ar class
118field is a key for a user's login class.
119Login classes are defined in
120.Xr login.conf 5 ,
121which is a
122.Xr termcap 5
123style database of user attributes, accounting, resource and
124environment settings.
125.Pp
126The
127.Ar change
128field is the number in seconds,
129.Dv GMT ,
130from the epoch, until the
131password for the account must be changed.
132This field may be left empty or set to 0 to turn off the
133password aging feature.
134.Pp
135The
136.Ar expire
137field is the number in seconds,
138.Dv GMT ,
139from the epoch, until the
140account expires.
141This field may be left empty or set to 0 to turn off the account
142aging feature.
143.Pp
144The
145.Ar gecos
146field normally contains comma (``,'') separated subfields as follows:
147.Pp
148.Bd -unfilled -offset indent
149fullname		user's full name
150office		user's office location
151wphone		user's work phone number
152hphone		user's home phone number
153.Ed
154.Pp
155This information is used by the
156.Xr finger 1
157program, and the first field used by the system mailer.
158If an ampersand
159.Ql \&&
160character appears within the fullname field, programs that
161use this field will substitute it with a capitalized version
162of the account's login name.
163.Pp
164The user's home directory is the full
165.Tn UNIX
166path name where the user
167will be placed on login.
168.Pp
169The shell field is the command interpreter the user prefers.
170If there is nothing in the
171.Ar shell
172field, the Bourne shell
173.Pq Pa /bin/sh
174is assumed.
175For security reasons, if the shell is set to a script that disallows
176access to the system (the
177.Xr nologin 8
178script, for example), care should be taken not to import any environment
179variables.  With
180.Xr sh 1 ,
181this can be done by specifying the
182.Fl p
183flag.
184Check the specific shell documentation to determine how this is
185done with other shells.
186.Sh YP/NIS INTERACTION
187.Ss Enabling access to NIS passwd data
188The system administrator can configure
189.Tn FreeBSD
190to use NIS/YP for
191its password information by adding special records to the
192.Pa /etc/master.passwd
193file. These entries should be added with
194.Xr vipw 8
195so that the changes can be properly merged with the hashed
196password databases and the
197.Pa /etc/passwd
198file (
199.Pa /etc/passwd
200should never be edited manually). Alternatively, the administrator
201can modify
202.Pa /etc/master.passwd
203in some other way and then manually update the password databases with
204.Xr pwd_mkdb 8 .
205.Pp
206The simplest way to activate NIS is to add an empty record
207with only a plus sign (`+') in the name field, such as this:
208.Bd -literal -offset indent
209+:::::::::
210
211.Ed
212The `+' will tell the
213.Xr getpwent 3
214routines in
215.Tn FreeBSD Ns 's
216standard C library to begin using the NIS passwd maps
217for lookups.
218.Pp
219Note that the entry shown above is known as a
220.Em wildcard
221entry, because it matches all users (the `+' without any other information
222matches everybody) and allows all NIS password data to be retrieved
223unaltered. However, by
224specifying a username or netgroup next to the `+' in the NIS
225entry, the administrator can affect what data are extracted from the
226NIS passwd maps and how it is interpreted. Here are a few example
227records that illustrate this feature (note that you can have several
228NIS entries in a single
229.Pa master.passwd
230file):
231.Bd -literal -offset indent
232-mitnick:::::::::
233+@staff:::::::::
234+@permitted-users:::::::::
235+dennis:::::::::
236+ken:::::::::/bin/csh
237+@rejected-users::32767:32767::::::/bin/false
238
239.Ed
240Specific usernames are listed explicitly while netgroups are signified
241by a preceding `@'. In the above example, users in the ``staff'' and
242``permitted-users'' netgroups will have their password information
243read from NIS and used unaltered. In other words, they will be allowed
244normal access to the machine. Users ``ken'' and ``dennis,'' who have
245been named explicitly rather than through a netgroup, will also have
246their password data read from NIS, _except_ that user ``ken'' will
247have his shell remapped to
248.Pa /bin/csh .
249This means that value for his shell specified in the NIS password map
250will be overridden by the value specified in the special NIS entry in
251the local
252.Pa master.passwd
253file. User ``ken'' may have been assigned the csh shell because his
254NIS password entry specified a different shell that may not be
255installed on the client machine for political or technical reasons.
256Meanwhile, users in the ``rejected-users'' netgroup are prevented
257from logging in because their UIDs, GIDs and shells have been overridden
258with invalid values.
259.Pp
260User ``mitnick'' will be be ignored entirely because his entry is
261specified with a `-' instead of a `+'. A minus entry can be used
262to block out certain NIS password entries completely; users who's
263password data has been excluded in this way are not recognized by
264the system at all. (Any overrides specified with minus entries are
265also ignored since there is no point in processing override information
266for a user that the system isn't going to recognize in the first place.)
267In general, a minus entry is used to specifically exclude a user
268who might otherwise be granted access because he happens to be a
269member of an authorized netgroup. For example, if ``mitnick'' is
270a member of the ``permitted-users'' netgroup and must, for whatever
271the reason, be permitted to remain in that netgroup (possibly to
272retain access to other machines within the domain), the administrator
273can still deny him access to a particular system with a minus entry.
274Also, it is sometimes easier to explicitly list those users who aren't
275allowed access rather than generate a possibly complicated list of
276users who are allowed access and omit the rest.
277.Pp
278Note that the plus and minus entries are evaluated in order from
279first to last with the first match taking precedence. This means
280the system will only use the first entry that matches a particular user.
281If, for instance, we have a user ``foo'' who is a member of both the ``staff''
282netgroup and the ``rejected-users'' netgroup, he will be admitted to
283the system because the above example lists the entry for ``staff''
284before the entry for ``rejected-users.'' If we reversed the order,
285user ``foo'' would be flagged as a ``rejected-user'' instead and
286denied access.
287.Pp
288Lastly, any NIS password database records that do not match against
289at least one of the users or netgroups specified by the NIS access
290entries in the
291.Pa /etc/master.passwd
292file will be ignored (along with any users specified using minus
293entries). In our example shown above, we do not have a wildcard
294entry at the end of the list; therefore, the system will not recognize
295anyone except
296``ken,'' ``dennis,'' the ``staff'' netgroup and the ``permitted-users''
297netgroup as authorized users. The ``rejected-users'' netgroup will
298be recognized but all members will have their shells remapped and
299therefore be denied access.
300All other NIS password records
301will be ignored. The administrator may add a wildcard entry to the
302end of the list such as:
303.Bd -literal -offset indent
304+:::::::::/usr/local/bin/go_away
305
306.Ed
307This entry acts as a catch-all for all users that don't match against
308any of the other entries.
309.Pa /usr/local/bin/go_away
310can be a short shell script or program
311that prints a message telling the user that he is not allowed access
312to the system. This technique is sometimes useful when it is
313desirable to have the system be able to recognize all users in a
314particular NIS domain without necessarily granting them login access.
315See the above text on the shell field regarding security concerns when using
316a shell script as the login shell.
317.Pp
318The primary use of this
319.Pa override
320feature is to permit the administrator
321to enforce access restrictions on NIS client systems. Users can be
322granted access to one group of machines and denied access to other
323machines simply by adding or removing them from a particular netgroup.
324Since the netgroup database can also be accessed via NIS, this allows
325access restrictions to be administered from a single location, namely
326the NIS master server; once a host's access list has been set in
327.Pa /etc/master.passwd ,
328it need not be modified again unless new netgroups are created.
329.Sh NOTES
330.Ss Shadow passwords through NIS
331.Tn FreeBSD
332uses a shadow password scheme: users' encrypted passwords
333are stored only in
334.Pa /etc/master.passwd
335and
336.Pa /etc/spwd.db ,
337which are readable and writable only by the superuser. This is done
338to prevent users from running the encrypted passwords through
339password-guessing programs and gaining unauthorized access to
340other users' accounts. NIS does not support a standard means of
341password shadowing, which implies that placing your password data
342into the NIS passwd maps totally defeats the security of
343.Tn FreeBSD Ns 's
344password shadowing system.
345.Pp
346.Tn FreeBSD
347provides a few special features to help get around this
348problem. It is possible to implement password shadowing between
349.Tn FreeBSD
350NIS clients and
351.Tn FreeBSD
352NIS servers. The
353.Xr getpwent 3
354routines will search for a
355.Pa master.passwd.byname
356and
357.Pa master.passwd.byuid
358maps which should contain the same data found in the
359.Pa /etc/master.passwd
360file. If the maps exist,
361.Tn FreeBSD
362will attempt to use them for user
363authentication instead of the standard
364.Pa passwd.byname
365and
366.Pa passwd.byuid
367maps.
368.Tn FreeBSD Ns 's
369.Xr ypserv 8
370will also check client requests to make sure they originate on a
371privileged port. Since only the superuser is allowed to bind to
372a privileged port, the server can tell if the requesting user
373is the superuser; all requests from non-privileged users to access
374the
375.Pa master.passwd
376maps will be refused. Since all user authentication programs run
377with superuser privilege, they should have the required access to
378users' encrypted password data while normal users will only
379be allowed access to the standard
380.Pa passwd
381maps which contain no password information.
382.Pp
383Note that this feature cannot be used in an environment with
384.No non- Ns Tn FreeBSD
385systems. Note also that a truly determined user with
386unrestricted access to your network could still compromise the
387.Pa master.passwd
388maps.
389.Ss UID and GID remapping with NIS overrides
390Unlike
391.Tn SunOS
392and other operating systems that use Sun's NIS code,
393.Tn FreeBSD
394allows the user to override
395.Pa all
396of the fields in a user's NIS
397.Pa passwd
398entry.
399For example, consider the following
400.Pa /etc/master.passwd
401entry:
402.Bd -literal -offset indent
403+@foo-users:???:666:666:0:0:0:Bogus user:/home/bogus:/bin/bogus
404
405.Ed
406This entry will cause all users in the `foo-users' netgroup to
407have
408.Pa all
409of their password information overridden, including UIDs,
410GIDs and passwords. The result is that all `foo-users' will be
411locked out of the system, since their passwords will be remapped
412to invalid values.
413.Pp
414This is important to remember because most people are accustomed to
415using an NIS wildcard entry that looks like this:
416.Bd -literal -offset indent
417+:*:0:0:::
418
419.Ed
420This often leads to new
421.Tn FreeBSD
422administrators choosing NIS entries for their
423.Pa master.passwd
424files that look like this:
425.Bd -literal -offset indent
426+:*:0:0::::::
427
428.Ed
429Or worse, this
430.Bd -literal -offset indent
431+::0:0::::::
432
433.Ed
434.Sy DO _NOT_ PUT ENTRIES LIKE THIS IN YOUR
435.Sy Pa master.passwd
436.Sy FILE!!
437The first tells
438.Tn FreeBSD
439to remap all passwords to `*' (which
440will prevent anybody from logging in) and to remap all UIDs and GIDs
441to 0 (which will make everybody appear to be the superuser). The
442second case just maps all UIDs and GIDs to 0, which means that
443.Pa all users will appear to be root!
444.Pp
445.Ss Compatibility of NIS override evaluation
446When Sun originally added NIS support to their
447.Xr getpwent 3
448routines, they took into account the fact that the
449.Tn SunOS
450password
451.Pa /etc/passwd
452file is in plain
453.Tn ASCII
454format. The
455.Tn SunOS
456documentation claims that
457adding a '+' entry to the password file causes the contents of
458the NIS password database to be 'inserted' at the position in
459the file where the '+' entry appears. If, for example, the
460administrator places the +:::::: entry in the middle of
461.Pa /etc/passwd,
462then the entire contents of the NIS password map would appear
463as though it had been copied into the middle of the password
464file. If the administrator places the +:::::: entry at both the
465middle and the end of
466.Pa /etc/passwd ,
467then the NIS password map would appear twice: once in the middle
468of the file and once at the end. (By using override entries
469instead of simple wildcards, other combinations could be achieved.)
470.Pp
471By contrast,
472.Tn FreeBSD
473does not have a single
474.Tn ASCII
475password file: it
476has a hashed password database. This database does not have an
477easily-defined beginning, middle or end, which makes it very hard
478to design a scheme that is 100% compatible with
479.Tn SunOS .
480For example,
481the
482.Fn getpwnam
483and
484.Fn getpwuid
485functions in
486.Tn FreeBSD
487are designed to do direct queries to the
488hash database rather than a linear search. This approach is faster
489on systems where the password database is large. However, when
490using direct database queries, the system does not know or care
491about the order of the original password file, and therefore
492it cannot easily apply the same override logic used by
493.Tn SunOS .
494.Pp
495Instead,
496.Tn FreeBSD
497groups all the NIS override entries together
498and constructs a filter out of them. Each NIS password entry
499is compared against the override filter exactly once and
500treated accordingly: if the filter allows the entry through
501unaltered, it's treated unaltered; if the filter calls for remapping
502of fields, then fields are remapped; if the filter calls for
503explicit exclusion (i.e. the entry matches a '-' override),
504the entry is ignored; if the entry doesn't match against any
505of the filter specifications, it's discarded.
506.Pp
507Again, note that the NIS '+' and '-' entries
508themselves are handled in the order in which they were specified
509in the
510.Pa /etc/master.passwd
511file since doing otherwise would lead to unpredictable behavior.
512.Pp
513The end result is that
514.Tn FreeBSD Ns 's
515provides a very close approximation
516of
517.Tn SunOS Ns 's
518behavior while maintaining the database paradigm, though the
519.Xr getpwent 3
520functions do behave somewhat differently from their
521.Tn SunOS
522counterparts.
523The primary differences are:
524.Bl -bullet -offset indent
525.It
526Each NIS password map record can be mapped into the password
527local password space only once.
528.It
529The placement of the NIS '+' and '-' entries does not necessarily
530affect where NIS password records will be mapped into
531the password space.
532.El
533.Pp
534In %99 of all
535.Tn FreeBSD
536configurations, NIS client behavior will be
537indistinguishable from that of
538.Tn SunOS
539or other similar systems. Even
540so, users should be aware of these architectural differences.
541.Pp
542.Ss Using groups instead of netgroups for NIS overrides
543.Tn FreeBSD
544offers the capability to do override matching based on
545user groups rather than netgroups. If, for example, an NIS entry
546is specified as:
547.Bd -literal -offset indent
548+@operator:::::::::
549
550.Ed
551the system will first try to match users against a netgroup called
552`operator'. If an `operator' netgroup doesn't exist, the system
553will try to match users against the normal `operator' group
554instead.
555.Ss Changes in behavior from older versions of FreeBSD
556There have been several bug fixes and improvements in
557.Tn FreeBSD Ns 's
558NIS/YP handling, some of which have caused changes in behavior.
559While the behavior changes are generally positive, it is important
560that users and system administrators be aware of them:
561.Bl -enum -offset indent
562.It
563In versions prior to 2.0.5, reverse lookups (i.e. using
564.Fn getpwuid )
565would not have overrides applied, which is to say that it
566was possible for
567.Fn getpwuid
568to return a login name that
569.Fn getpwnam
570would not recognize. This has been fixed: overrides specified
571in
572.Pa /etc/master.passwd
573now apply to all
574.Xr getpwent 3
575functions.
576.It
577Prior to
578.Fx 2.0.5 ,
579netgroup overrides did not work at
580all, largely because
581.Tn FreeBSD
582did not have support for reading
583netgroups through NIS. Again, this has been fixed, and
584netgroups can be specified just as in
585.Tn SunOS
586and similar NIS-capable
587systems.
588.It
589.Tn FreeBSD
590now has NIS server capabilities and supports the use
591of
592.Pa master.passwd
593NIS maps in addition to the standard Sixth Edition format
594.Pa passwd
595maps.
596This means that you can specify change, expiration and class
597information through NIS, provided you use a
598.Tn FreeBSD
599system as
600the NIS server.
601.El
602.Sh FILES
603.Bl -tag -width /etc/master.passwd -compact
604.It Pa /etc/passwd
605.Tn ASCII
606password file, with passwords removed
607.It Pa /etc/pwd.db
608.Xr db 3 -format
609password database, with passwords removed
610.It Pa /etc/master.passwd
611.Tn ASCII
612password file, with passwords intact
613.It Pa /etc/spwd.db
614.Xr db 3 -format
615password database, with passwords intact
616.El
617.Sh SEE ALSO
618.Xr chpass 1 ,
619.Xr login 1 ,
620.Xr passwd 1 ,
621.Xr getpwent 3 ,
622.Xr login_getclass 3 ,
623.Xr yp 4 ,
624.Xr login.conf 5 ,
625.Xr adduser 8 ,
626.Xr pw 8 ,
627.Xr pwd_mkdb 8 ,
628.Xr vipw 8
629.Sh BUGS
630User information should (and eventually will) be stored elsewhere.
631.Pp
632The YP/NIS password database makes encrypted passwords visible to
633ordinary users, thus making password cracking easier unless you use
634shadow passwords with the
635.Pa master.passwd
636maps and
637.Tn FreeBSD Ns 's
638.Xr ypserv 8
639server.
640.Pp
641Unless you're using
642.Tn FreeBSD Ns 's
643.Xr ypserv 8 ,
644which supports the use of
645.Pa master.passwd
646type maps,
647the YP/NIS password database will be in old-style (Sixth Edition) format,
648which means that site-wide values for user login class, password
649expiration date, and other fields present in the current format
650will not be available when a
651.Tn FreeBSD
652system is used as a client with
653a standard NIS server.
654.Sh COMPATIBILITY
655The password file format has changed since
656.Bx 4.3 .
657The following awk script can be used to convert your old-style password
658file into a new style password file.
659The additional fields
660.Dq class ,
661.Dq change
662and
663.Dq expire
664are added, but are turned off by default.
665These fields can then be set using
666.Xr vipw 8
667or
668.Xr pw 8 .
669.Bd -literal -offset indent
670BEGIN { FS = ":"}
671{ print $1 ":" $2 ":" $3 ":" $4 "::0:0:" $5 ":" $6 ":" $7 }
672.Ed
673.Sh HISTORY
674A
675.Nm
676file format appeared in
677.At v6 .
678The YP/NIS functionality is modeled after
679.Tn SunOS
680and first appeared in
681.Fx 1.1
682The override capability is new in
683.Fx 2.0 .
684The override capability was updated to properly support netgroups
685in
686.Fx 2.0.5 .
687Support for comments first appeared in
688.Fx 3.0 .
689