xref: /freebsd/usr.sbin/pw/pw.8 (revision 8aac90f18aef7c9eea906c3ff9a001ca7b94f375)
1.\" Copyright (C) 1996
2.\" David L. Nugent.  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.\"
13.\" THIS SOFTWARE IS PROVIDED BY DAVID L. NUGENT AND CONTRIBUTORS ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL DAVID L. NUGENT OR CONTRIBUTORS BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.Dd November 28, 2022
26.Dt PW 8
27.Os
28.Sh NAME
29.Nm pw
30.Nd create, remove, modify & display system users and groups
31.Sh SYNOPSIS
32.Nm
33.Op Fl R Ar rootdir
34.Op Fl V Ar etcdir
35.Cm useradd
36.Oo Fl n Oc Ar name
37.Op Fl mNoPq
38.Op Fl C Ar config
39.Op Fl c Ar comment
40.Op Fl d Ar homedir
41.Op Fl e Ar accexpdate
42.Op Fl G Ar grouplist
43.Op Fl g Ar group
44.Op Fl H Ar fd
45.Op Fl h Ar fd
46.Op Fl k Ar skeldir
47.Op Fl L Ar class
48.Op Fl M Ar mode
49.Op Fl p Ar passexpdate
50.Op Fl s Ar shell
51.Op Fl u Ar uid
52.Op Fl w Ar passmethod
53.Op Fl Y Op Fl y Ar nispasswd
54.Nm
55.Op Fl R Ar rootdir
56.Op Fl V Ar etcdir
57.Cm useradd
58.Fl D
59.Op Fl q
60.Op Fl b Ar basehome
61.Op Fl C Ar config
62.Op Fl e Ar accexpdays
63.Op Fl G Ar grouplist
64.Op Fl g Ar group
65.Op Fl i Ar mingid , Ns Ar maxgid
66.Op Fl k Ar skeldir
67.Op Fl M Ar mode
68.Op Fl p Ar passexpdays
69.Op Fl s Ar shell
70.Op Fl u Ar minuid , Ns Ar maxuid
71.Op Fl w Ar passmethod
72.Op Fl Y Op Fl y Ar nispasswd
73.Nm
74.Op Fl R Ar rootdir
75.Op Fl V Ar etcdir
76.Cm userdel
77.Oo Fl n Oc Ar name Ns | Ns Oo Fl u Oc Ar uid
78.Op Fl r
79.Op Fl Y Op Fl y Ar nispasswd
80.Nm
81.Op Fl R Ar rootdir
82.Op Fl V Ar etcdir
83.Cm usermod
84.Oo Fl n Oc Ar name Ns | Ns Ar uid Oo Fl u Ar newuid Oc | Fl u Ar uid
85.Op Fl mNPq
86.Op Fl C Ar config
87.Op Fl c Ar comment
88.Op Fl d Ar homedir
89.Op Fl e Ar accexpdate
90.Op Fl k Ar skeldir
91.Op Fl G Ar grouplist
92.Op Fl g Ar group
93.Op Fl H Ar fd
94.Op Fl h Ar fd
95.Op Fl L Ar class
96.Op Fl l Ar newname
97.Op Fl M Ar mode
98.Op Fl p Ar passexpdate
99.Op Fl s Ar shell
100.Op Fl w Ar passmethod
101.Op Fl Y Op Fl y Ar nispasswd
102.Nm
103.Op Fl R Ar rootdir
104.Op Fl V Ar etcdir
105.Cm usershow
106.Oo Fl n Oc Ar name Ns | Ns Oo Fl u Oc Ar uid
107.Op Fl 7aFP
108.Nm
109.Op Fl R Ar rootdir
110.Op Fl V Ar etcdir
111.Cm usernext
112.Op Fl q
113.Op Fl C Ar config
114.Nm
115.Op Fl R Ar rootdir
116.Op Fl V Ar etcdir
117.Cm groupadd
118.Oo Fl n Oc Ar name
119.Op Fl oNPqY
120.Op Fl C Ar config
121.Op Fl g Ar gid
122.Op Fl H Ar fd
123.Op Fl h Ar fd
124.Op Fl M Ar members
125.Nm
126.Op Fl R Ar rootdir
127.Op Fl V Ar etcdir
128.Cm groupdel
129.Oo Fl n Oc Ar name Ns | Ns Oo Fl g Oc Ar gid
130.Op Fl Y
131.Nm
132.Op Fl R Ar rootdir
133.Op Fl V Ar etcdir
134.Cm groupmod
135.Oo Fl n Oc Ar name Ns | Ns Ar gid Oo Fl g Ar newgid Oc | Fl g Ar gid
136.Op Fl NPqY
137.Op Fl C Ar config
138.Op Fl d Ar oldmembers
139.Op Fl H Ar fd
140.Op Fl h Ar fd
141.Op Fl l Ar newname
142.Op Fl M Ar members
143.Op Fl m Ar newmembers
144.Nm
145.Op Fl R Ar rootdir
146.Op Fl V Ar etcdir
147.Cm groupshow
148.Oo Fl n Oc Ar name Ns | Ns Oo Fl g Oc Ar gid
149.Op Fl aFP
150.Nm
151.Op Fl R Ar rootdir
152.Op Fl V Ar etcdir
153.Cm groupnext
154.Op Fl C Ar config
155.Op Fl q
156.Nm
157.Op Fl R Ar rootdir
158.Op Fl V Ar etcdir
159.Cm lock
160.Oo Fl n Oc Ar name Ns | Ns Oo Fl u Oc Ar uid
161.Op Fl q
162.Op Fl C Ar config
163.Nm
164.Op Fl R Ar rootdir
165.Op Fl V Ar etcdir
166.Cm unlock
167.Oo Fl n Oc Ar name Ns | Ns Oo Fl u Oc Ar uid
168.Op Fl q
169.Op Fl C Ar config
170.Sh DESCRIPTION
171The
172.Nm
173utility is a command-line based editor for the system
174.Ar user
175and
176.Ar group
177files, allowing the superuser an easy to use and standardized way of adding,
178modifying and removing users and groups.
179Note that
180.Nm
181only operates on the local user and group files.
182.Tn NIS
183users and groups must be
184maintained on the
185.Tn NIS
186server.
187The
188.Nm
189utility handles updating the
190.Xr passwd 5 ,
191.Xr master.passwd 5 ,
192.Xr group 5
193and the secure and insecure
194password database files, and must be run as root.
195.Pp
196The first one or two keywords provided to
197.Nm
198on the command line provide the context for the remainder of the arguments.
199The keywords
200.Cm user
201and
202.Cm group
203may be combined with
204.Cm add ,
205.Cm del ,
206.Cm mod ,
207.Cm show ,
208or
209.Cm next
210in any order.
211(For example,
212.Cm showuser ,
213.Cm usershow ,
214.Cm show user ,
215and
216.Cm user show
217all mean the same thing.)
218This flexibility is useful for interactive scripts calling
219.Nm
220for user and group database manipulation.
221Following these keywords,
222the user or group name or numeric id may be optionally specified as an
223alternative to using the
224.Fl n Ar name ,
225.Fl u Ar uid ,
226.Fl g Ar gid
227options.
228.Pp
229The following flags are common to most or all modes of operation:
230.Bl -tag -width "-G grouplist"
231.It Fl R Ar rootdir
232Specifies an alternate root directory within which
233.Nm
234will operate.
235Any paths specified will be relative to
236.Va rootdir .
237.It Fl V Ar etcdir
238Set an alternate location for the password, group, and configuration files.
239Can be used to maintain a user/group database in an alternate location.
240If this switch is specified, the system
241.Pa /etc/pw.conf
242will not be sourced for default configuration data,
243but the file
244.Pa pw.conf
245in the specified directory will be used instead
246.Pq or none, if it does not exist .
247The
248.Fl C
249flag may be used to override this behaviour.
250As an exception to the general rule where options must follow the operation
251type, the
252.Fl V
253flag must be used on the command line before the operation keyword.
254.It Fl C Ar config
255By default,
256.Nm
257reads the file
258.Pa /etc/pw.conf
259to obtain policy information on how new user accounts and groups are to be created.
260The
261.Fl C
262option specifies a different configuration file.
263While most of the contents of the configuration file may be overridden via
264command-line options, it may be more convenient to keep standard information in a
265configuration file.
266.It Fl q
267Use of this option causes
268.Nm
269to suppress error messages,
270which may be useful in interactive environments where it
271is preferable to interpret status codes returned by
272.Nm
273rather than messing up a carefully formatted display.
274.It Fl N
275This option is available in
276.Cm add
277and
278.Cm modify
279operations, and tells
280.Nm
281to output the result of the operation without updating the user or group
282databases.
283You may use the
284.Fl P
285option to switch between standard passwd and readable formats.
286.It Fl Y
287Using this option with any of the update modes causes
288.Nm
289to run
290.Xr make 1
291after changing to the directory
292.Pa /var/yp .
293This is intended to allow automatic updating of
294.Tn NIS
295database files.
296If separate passwd and group files are being used by
297.Tn NIS ,
298then use the
299.Fl y Ar nispasswd
300option to specify the location of the
301.Tn NIS
302passwd database so that
303.Nm
304will concurrently update it with the system password
305databases.
306.El
307.Sh USER OPTIONS
308The following options apply to the
309.Cm useradd
310and
311.Cm usermod
312commands:
313.Bl -tag -width "-G grouplist"
314.It Oo Fl n Oc Ar name
315Required unless
316.Fl u Ar uid
317is given.
318Specify the user/account name.
319In the case of
320.Cm usermod
321can be a
322.Ar uid .
323.It Fl u Ar uid
324Required if
325.Ar name
326is not given.
327Specify the user/account numeric id.
328In the case of
329.Cm usermod
330if paired with
331.Ar name ,
332changes the numeric id of the named user/account.
333.Pp
334Usually, only one of these options is required,
335as the account name will imply the uid, or vice versa.
336However, there are times when both are needed.
337For example, when changing the uid of an existing user with
338.Cm usermod ,
339or overriding the default uid when creating a new account with
340.Cm useradd .
341To automatically allocate the uid to a new user with
342.Cm useradd ,
343then do
344.Em not
345use the
346.Fl u
347option.
348Either the account or userid can also be provided immediately after the
349.Cm useradd ,
350.Cm userdel ,
351.Cm usermod ,
352or
353.Cm usershow
354keywords on the command line without using the
355.Fl n
356or
357.Fl u
358options.
359.El
360.Bl -tag -width "-G grouplist"
361.It Fl c Ar comment
362This field sets the contents of the passwd GECOS field,
363which normally contains up to four comma-separated fields containing the
364user's full name, office or location,
365and work and home phone numbers.
366These sub-fields are used by convention only, however, and are optional.
367If this field is to contain spaces,
368the comment must be enclosed in double quotes
369.Ql \&" .
370Avoid using commas in this field as these are used as sub-field separators,
371and the colon
372.Ql \&:
373character also cannot be used as this is the field separator for the passwd
374file itself.
375.It Fl d Ar homedir
376This option sets the account's home directory.
377Normally,
378this is only used if the home directory is to be different from the
379default determined from
380.Pa /etc/pw.conf
381- normally
382.Pa /home
383with the account name as a subdirectory.
384.It Fl e Ar accexpdate
385Set the account's expiration date.
386Format of the date is either a UNIX time in decimal, or a date in
387.Ql dd-mmm-yy[yy]
388format, where dd is the day,
389mmm is the month, either in numeric or alphabetic format
390('Jan', 'Feb', etc) and year is either a two or four digit year.
391This option also accepts a relative date in the form
392.Ql \&+n[mhdwoy]
393where
394.Ql \&n
395is a decimal,
396octal (leading 0) or hexadecimal (leading 0x) digit followed by the
397number of Minutes, Hours, Days, Weeks, Months or Years from the current date at
398which the expiration date is to be set.
399.It Fl p Ar passexpdate
400Set the account's password expiration date.
401This field is similar to the account expiration date option, except that it
402applies to forced password changes.
403This is set in the same manner as the
404.Fl e
405option.
406.It Fl g Ar group
407Set the account's primary group to the given group.
408.Ar group
409may be defined by either its name or group number.
410.It Fl G Ar grouplist
411Set secondary group memberships for an account.
412.Ar grouplist
413is a comma, space, or tab-separated list of group names or group numbers.
414The user is added to the groups specified in
415.Ar grouplist ,
416and removed from all groups not specified.
417The current login session is not affected by group membership changes,
418which only take effect when the user reconnects.
419Note: do not add a user to their primary group with
420.Ar grouplist .
421.It Fl L Ar class
422This option sets the login class for the user being created.
423See
424.Xr login.conf 5
425and
426.Xr passwd 5
427for more information on user login classes.
428.It Fl m
429This option instructs
430.Nm
431to attempt to create the user's home directory.
432While primarily useful when adding a new account with
433.Cm useradd ,
434this may also be of use when moving an existing user's home directory elsewhere
435on the file system.
436The new home directory is populated with the contents of the
437.Ar skeleton
438directory, which typically contains a set of shell configuration files that the
439user may personalize to taste.
440Files in this directory are usually named
441.Pa dot . Ns Aq Ar config
442where the
443.Pa dot
444prefix will be stripped.
445When
446.Fl m
447is used on an account with
448.Cm usermod ,
449existing configuration files in the user's home directory are
450.Em not
451overwritten from the skeleton files.
452.Pp
453When a user's home directory is created,
454it will by default be a subdirectory of the
455.Ar basehome
456directory as specified by the
457.Fl b
458option, bearing the name of the new account.
459This can be overridden by the
460.Fl d
461option on the command line, if desired.
462.It Fl M Ar mode
463Create the user's home directory with the specified
464.Ar mode ,
465modified by the current
466.Xr umask 2 .
467If omitted, it is derived from the parent process'
468.Xr umask 2 .
469This option is only useful in combination with the
470.Fl m
471flag.
472.It Fl k Ar skeldir
473Set the
474.Ar skeleton
475directory, from which basic startup and configuration files are copied when
476the user's home directory is created.
477This option only has meaning when used with the
478.Fl d
479or
480.Fl m
481flags.
482.It Fl s Ar shell
483Set or changes the user's login shell to
484.Ar shell .
485If the path to the shell program is omitted,
486.Nm
487searches the
488.Ar shellpath
489specified in
490.Pa /etc/pw.conf
491and fills it in as appropriate.
492Note that unless you have a specific reason to do so, you should avoid
493specifying the path - this will allow
494.Nm
495to validate that the program exists and is executable.
496Specifying a full path (or supplying a blank "" shell) avoids this check
497and allows for such entries as
498.Pa /nonexistent
499that should be set for accounts not intended for interactive login.
500.It Fl h Ar fd
501This option provides a special interface by which interactive scripts can
502set an account password using
503.Nm .
504Because the command line and environment are fundamentally insecure mechanisms
505by which programs can accept information,
506.Nm
507will only allow setting of account and group passwords via a file descriptor
508(usually a pipe between an interactive script and the program).
509.Ar sh ,
510.Ar bash ,
511.Ar ksh
512and
513.Ar perl
514all possess mechanisms by which this can be done.
515Alternatively,
516.Nm
517will prompt for the user's password if
518.Fl h Ar 0
519is given, nominating
520.Em stdin
521as the file descriptor on which to read the password.
522Note that this password will be read only once and is intended
523for use by a script rather than for interactive use.
524If you wish to have new password confirmation along the lines of
525.Xr passwd 1 ,
526this must be implemented as part of an interactive script that calls
527.Nm .
528.Pp
529If a value of
530.Ql \&-
531is given as the argument
532.Ar fd ,
533then the password will be set to
534.Ql \&* ,
535rendering the account inaccessible via password-based login.
536.It Fl H Ar fd
537Read an encrypted password string from the specified file descriptor.
538This is like
539.Fl h ,
540but the password should be supplied already encrypted in a form
541suitable for writing directly to the password database.
542See
543.Xr openssl-passwd 1
544and
545.Xr crypt 3
546for more details about generating an encrypted password hash.
547.El
548.Pp
549It is possible to use
550.Cm useradd
551to create a new account that duplicates an existing user id.
552While this is normally considered an error and will be rejected, the
553.Fl o
554option overrides the check for duplicates and allows the duplication of
555the user id.
556This may be useful if you allow the same user to login under
557different contexts (different group allocations, different home
558directory, different shell) while providing basically the same
559permissions for access to the user's files in each account.
560.Pp
561The
562.Cm useradd
563command also has the ability to set new user and group defaults by using the
564.Fl D
565option.
566Instead of adding a new user,
567.Nm
568writes a new set of defaults to its configuration file,
569.Pa /etc/pw.conf .
570When using the
571.Fl D
572option, you must not use either
573.Fl n Ar name
574or
575.Fl u Ar uid
576or an error will result.
577Use of
578.Fl D
579changes the meaning of several command line switches in the
580.Ar useradd
581command.
582These are:
583.Bl -tag -width "-G grouplist"
584.It Fl D
585Set default values in
586.Pa /etc/pw.conf
587configuration file, or a different named configuration file if the
588.Fl C Ar config
589option is used.
590.It Fl b Ar basehome
591Set the root directory in which user home directories are created.
592The default value for this is
593.Pa /home ,
594but it may be set elsewhere as desired.
595.It Fl e Ar accexpdays
596Set the default account expiration period in days.
597When
598.Fl D
599is used, the
600.Ar accexpdays
601argument is interpreted differently.
602It must be numeric and represents the number of days after creation
603that the account expires.
604A value of 0 suppresses automatic calculation of the expiry date.
605.It Fl p Ar passexpdays
606Set the default password expiration period in days.
607When
608.Fl D
609is used, the
610.Ar passexpdays
611argument is interpreted differently.
612It must be numeric and represents the number of days after creation
613that the account expires.
614A value of 0 suppresses automatic calculation of the expiry date.
615.It Fl g Ar group
616Set the default group for new users.
617If a blank group is specified using
618.Fl g Ar \&"" ,
619then new users will be allocated their own private primary group
620with the same name as their login name.
621If a group is supplied, either its name or uid may be given as an argument.
622.It Fl G Ar grouplist
623Set the default groups in which new users are granted membership.
624This is a separate set of groups from the primary group.
625Avoid nominating the same group as both primary and extra groups.
626In other words, these extra groups determine membership in groups
627.Em other than
628the primary group.
629.Ar grouplist
630is a comma-separated list of group names or ids, and are always
631stored in
632.Pa /etc/pw.conf
633by their symbolic names.
634.It Fl L Ar class
635This option sets the default login class for new users.
636.It Fl k Ar skeldir
637Set the default
638.Em skeleton
639directory,
640from which prototype shell and other initialization files are copied when
641.Nm
642creates a user's home directory.
643See description of
644.Fl k
645for naming conventions of these files.
646.It Xo
647.Fl u Ar minuid Ns Cm \&, Ns Ar maxuid ,
648.Fl i Ar mingid Ns Cm \&, Ns Ar maxgid
649.Xc
650Set the minimum and maximum user and group ids allocated for new
651accounts and groups created by
652.Nm .
653The default values for each is 1000 minimum and 32000 maximum.
654.Ar minuid
655and
656.Ar maxuid
657are both numbers, where max must be greater than min,
658and both must be between 0 and 32767
659.Po the same applies to
660.Ar mingid
661and
662.Ar maxgid
663.Pc .
664In general,
665user and group ids less than 100 are reserved for use by the system,
666and numbers greater than 32000 may also be reserved for special purposes
667.Pq used by some system daemons .
668.It Fl w Ar passmethod
669The
670.Fl w
671option selects the default method used to set passwords for newly created user
672accounts.
673.Ar passmethod
674is one of:
675.Pp
676.Bl -tag -width random -offset indent -compact
677.It Cm no
678disable login on newly created accounts
679.It Cm yes
680force the password to be the account name
681.It Cm none
682force a blank password
683.It Cm random
684generate a random password
685.El
686.Pp
687The
688.Cm random
689or
690.Cm no
691methods are the most secure; in the former case,
692.Nm
693generates a password and prints it to stdout,
694which is suitable when users are issued passwords rather than being allowed
695to select their own
696.Pq possibly poorly chosen
697password.
698The
699.Cm no
700method requires that the superuser use
701.Xr passwd 1
702to render the account accessible with a password.
703.It Fl y Ar path
704This sets the pathname of the database used by
705.Tn NIS
706if you are not sharing
707the information from
708.Pa /etc/master.passwd
709directly with
710.Tn NIS .
711You should only set this option for
712.Tn NIS
713servers.
714.El
715.Pp
716The
717.Cm userdel
718command has three distinct options.
719The
720.Fl n Ar name
721and
722.Fl u Ar uid
723options have already been covered above.
724The additional option is:
725.Bl -tag -width "-G grouplist"
726.It Fl r
727This tells
728.Nm
729to remove the user's home directory and all of its contents.
730The
731.Nm
732utility errs on the side of caution when removing files from the system.
733Firstly,
734it will not do so if the uid of the account being removed is also used by
735another account on the system, and the
736.Dq home
737directory in the password file is
738a valid path that commences with the character
739.Ql \&/ .
740Secondly, it will only remove files and directories that are actually owned by
741the user, or symbolic links owned by anyone under the user's home directory.
742Finally, after deleting all contents owned by the user only empty directories
743will be removed.
744If any additional cleanup work is required, this is left to the administrator.
745.El
746.Pp
747Mail spool files and
748.Xr crontab 5
749files are always removed when an account is deleted as
750these are unconditionally attached to the user name.
751Jobs queued for processing by
752.Xr at 1
753are also removed if the user's uid is unique and not also used by another
754account on the system.
755.Pp
756The
757.Cm usermod
758command adds one additional option:
759.Bl -tag -width "-G grouplist"
760.It Fl l Ar newname
761This option allows changing of an existing account name to
762.Ar newname .
763The new name must not already exist, and any attempt to duplicate an
764existing account name will be rejected.
765.El
766.Pp
767The
768.Cm usershow
769command allows viewing of an account in one of two formats.
770By default, the format is identical to the format used in
771.Pa /etc/master.passwd
772with the password field replaced with a
773.Ql \&* .
774If the
775.Fl P
776option is used, then
777.Nm
778outputs the account details in a more human readable form.
779If the
780.Fl 7
781option is used, the account details are shown in v7 format.
782The
783.Fl a
784option lists all users currently on file.
785Using
786.Fl F
787forces
788.Nm
789to print the details of an account even if it does not exist.
790.Pp
791The command
792.Cm usernext
793returns the next available user and group ids separated by a colon.
794This is normally of interest only to interactive scripts or front-ends
795that use
796.Nm .
797.Sh GROUP OPTIONS
798The
799.Fl C
800and
801.Fl q
802options (explained at the start of the previous section) are available
803with the group manipulation commands.
804Other common options to all group-related commands are:
805.Bl -tag -width "-m newmembers"
806.It Oo Fl n Oc Ar name
807Required unless
808.Fl g Ar gid
809is given.
810Specify the group name.
811In the case of
812.Cm groupmod
813can be a gid.
814.It Fl g Ar gid
815Required if
816.Ar name
817is not given.
818Specify the group numeric id.
819In the case of
820.Cm groupmod
821if paired with
822.Ar name ,
823changes the numeric id of the named group.
824.Pp
825As with the account name and id fields, you will usually only need
826to supply one of these, as the group name implies the uid and vice
827versa.
828You will only need to use both when setting a specific group id
829against a new group or when changing the uid of an existing group.
830.It Fl M Ar memberlist
831This option provides an alternative way to add existing users to a
832new group
833.Pq in Cm groupadd
834or replace an existing membership list
835.Pq in Cm groupmod .
836.Ar memberlist
837is a comma separated list of valid and existing user names or uids.
838.It Fl m Ar newmembers
839Similar to
840.Fl M ,
841this option allows the
842.Em addition
843of existing users to a group without replacing the existing list of
844members.
845Login names or user ids may be used, and duplicate users are
846silently eliminated.
847.It Fl d Ar oldmembers
848Similar to
849.Fl M ,
850this option allows the
851.Em deletion
852of existing users from a group without replacing the existing list of
853members.
854Login names or user ids may be used, and duplicate users are
855silently eliminated.
856.El
857.Pp
858.Cm groupadd
859also has a
860.Fl o
861option that allows allocation of an existing group id to a new group.
862The default action is to reject an attempt to add a group,
863and this option overrides the check for duplicate group ids.
864There is rarely any need to duplicate a group id.
865.Pp
866The
867.Cm groupmod
868command adds one additional option:
869.Bl -tag -width "-m newmembers"
870.It Fl l Ar newname
871This option allows changing of an existing group name to
872.Ar newname .
873The new name must not already exist,
874and any attempt to duplicate an existing group
875name will be rejected.
876.El
877.Pp
878Options for
879.Cm groupshow
880are the same as for
881.Cm usershow ,
882with the
883.Fl g Ar gid
884replacing
885.Fl u Ar uid
886to specify the group id.
887The
888.Fl 7
889option does not apply to the
890.Cm groupshow
891command.
892.Pp
893The command
894.Cm groupnext
895returns the next available group id on standard output.
896.Sh USER LOCKING
897The
898.Nm
899utility
900supports a simple password locking mechanism for users; it works by
901prepending the string
902.Ql *LOCKED*
903to the beginning of the password field in
904.Xr master.passwd 5
905to prevent successful authentication.
906.Pp
907The
908.Cm lock
909and
910.Cm unlock
911commands take a user name or uid of the account to lock or unlock,
912respectively.
913The
914.Fl V ,
915.Fl C ,
916and
917.Fl q
918options as described above are accepted by these commands.
919.Sh NOTES
920For a summary of options available with each command, you can use
921.Dl pw [command] help
922For example,
923.Dl pw useradd help
924lists all available options for the
925.Cm useradd
926operation.
927.Pp
928The
929.Nm
930utility allows 8-bit characters in the passwd GECOS field (user's full name,
931office, work and home phone number subfields), but disallows them in
932user login and group names.
933Use 8-bit characters with caution, as connection to the Internet will
934require that your mail transport program supports 8BITMIME, and will
935convert headers containing 8-bit characters to 7-bit quoted-printable
936format.
937.Xr sendmail 8
938does support this.
939Use of 8-bit characters in the GECOS field should be used in
940conjunction with the user's default locale and character set
941and should not be implemented without their use.
942Using 8-bit characters may also affect other
943programs that transmit the contents of the GECOS field over the
944Internet, such as
945.Xr fingerd 8 ,
946and a small number of TCP/IP clients, such as IRC, where full names
947specified in the passwd file may be used by default.
948.Pp
949The
950.Nm
951utility writes a log to the
952.Pa /var/log/userlog
953file when actions such as user or group additions or deletions occur.
954The location of this logfile can be changed in
955.Xr pw.conf 5 .
956.Sh FILES
957.Bl -tag -width /etc/master.passwd.new -compact
958.It Pa /etc/master.passwd
959The user database
960.It Pa /etc/passwd
961A Version 7 format password file
962.It Pa /etc/login.conf
963The user capabilities database
964.It Pa /etc/group
965The group database
966.It Pa /etc/pw.conf
967Pw default options file
968.It Pa /var/log/userlog
969User/group modification logfile
970.El
971.Sh EXAMPLES
972Add new user Glurmo Smith (gsmith).
973A gsmith login group is created if not already present.
974The login shell is set to
975.Xr csh 1 .
976A new home directory at
977.Pa /home/gsmith
978is created if it does not already exist.
979Finally, a random password is generated and displayed:
980.Bd -literal -offset indent
981pw useradd -n gsmith -c "Glurmo Smith" -s csh -m -w random
982.Ed
983.Pp
984Delete the gsmith user and their home directory, including contents.
985.Bd -literal -offset indent
986pw userdel -n gsmith -r
987.Ed
988.Pp
989Add the existing user jsmith to the wheel group,
990in addition to the other groups jsmith is already a member of.
991.Bd -literal -offset indent
992pw groupmod wheel -m jsmith
993.Ed
994.Pp
995Generate random password and show it in both plain text and
996encrypted form not modifying any database.
997.Bd -literal -offset indent
998pw usermod nobody -Nw random
999.Ed
1000.Sh EXIT STATUS
1001The
1002.Nm
1003utility returns EXIT_SUCCESS on successful operation, otherwise
1004.Nm
1005returns one of the
1006following exit codes defined by
1007.Xr sysexits 3
1008as follows:
1009.Bl -tag -width xxxx
1010.It EX_USAGE
1011.Bl -bullet -compact
1012.It
1013Command line syntax errors (invalid keyword, unknown option).
1014.El
1015.It EX_NOPERM
1016.Bl -bullet -compact
1017.It
1018Attempting to run one of the update modes as non-root.
1019.El
1020.It EX_OSERR
1021.Bl -bullet -compact
1022.It
1023Memory allocation error.
1024.It
1025Read error from password file descriptor.
1026.El
1027.It EX_DATAERR
1028.Bl -bullet -compact
1029.It
1030Bad or invalid data provided or missing on the command line or
1031via the password file descriptor.
1032.It
1033Attempted to remove, rename root account or change its uid.
1034.El
1035.It EX_OSFILE
1036.Bl -bullet -compact
1037.It
1038Skeleton directory is invalid or does not exist.
1039.It
1040Base home directory is invalid or does not exist.
1041.It
1042Invalid or non-existent shell specified.
1043.El
1044.It EX_NOUSER
1045.Bl -bullet -compact
1046.It
1047User, user id, group or group id specified does not exist.
1048.It
1049User or group recorded, added, or modified unexpectedly disappeared.
1050.El
1051.It EX_SOFTWARE
1052.Bl -bullet -compact
1053.It
1054No more group or user ids available within specified range.
1055.El
1056.It EX_IOERR
1057.Bl -bullet -compact
1058.It
1059Unable to rewrite configuration file.
1060.It
1061Error updating group or user database files.
1062.It
1063Update error for passwd or group database files.
1064.El
1065.It EX_CONFIG
1066.Bl -bullet -compact
1067.It
1068No base home directory configured.
1069.El
1070.El
1071.Sh SEE ALSO
1072.Xr chpass 1 ,
1073.Xr passwd 1 ,
1074.Xr umask 2 ,
1075.Xr group 5 ,
1076.Xr login.conf 5 ,
1077.Xr passwd 5 ,
1078.Xr pw.conf 5 ,
1079.Xr pwd_mkdb 8 ,
1080.Xr vipw 8
1081.Sh HISTORY
1082The
1083.Nm
1084utility was written to mimic many of the options used in the SYSV
1085.Em shadow
1086support suite, but is modified for passwd and group fields specific to
1087the
1088.Bx 4.4
1089operating system, and combines all of the major elements
1090into a single command.
1091