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