---
name: "chpass"
section: "1"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/chpass"
---

# chpass(1)

add or change user database information

## NAME

**chpass**, **chfn**, **chsh** – add or change user database information

## SYNOPSIS

**chpass** \[**-s** *newshell*\] \[*user*\]

**chpass** **-a** *list*

## DESCRIPTION

**chpass** allows editing of the user database information associated with *user*, or, by default, the current user. The information is formatted and supplied to an editor for changes.

Only the information that the user is allowed to change is displayed.

**chfn** and **chsh** are synonyms for **chpass**.

The options are as follows:

- **-a** *list*

  The superuser is allowed to directly supply a user database entry, in the format specified by [passwd(5)](/passwd/5.md), as an argument. This argument must be a colon (‘:’) separated list of all the user database fields, although they may be empty.

- **-s** *newshell*

  Attempts to change the user's shell to *newshell*.

Possible display items are as follows:

- Login:

  user's login name

- Password:

  user's encrypted password

- Uid:

  user's login

- Gid:

  user's login group

- Change:

  password change time

- Expire:

  account expiration time

- Class:

  user's general classification

- Home Directory:

  user's home directory

- Shell:

  user's login shell

- Full Name:

  user's real name

- Office Location:

  user's office location

- Office Phone:

  user's office phone

- Home Phone:

  user's home phone

The *login* field is the user name used to access the computer account.

The *password* field contains the encrypted form of the user's password.

The *uid* field is the number associated with the *login* field. Both of these fields should be unique across the system (and often across a group of systems) as they control file access.

While it is possible to have multiple entries with identical login names and/or identical user IDs, it is usually a mistake to do so. Routines that manipulate these files will often return only one of the multiple entries, and that one by random selection.

The *group* field is the group that the user will be placed in at login. Since BSD supports multiple groups (see [groups(1)](/groups/1.md)), this field currently has little special meaning. This field may be filled in with either a number or a group name (see [group(5)](/group/5.md)).

The *change* field is the date by which the password must be changed.

The *expire* field is the date on which the account expires.

Both the *change* and *expire* fields should be entered in the form *month* *day* *year* where *month* is the month name (the first three characters are sufficient), *day* is the day of the month, and *year* is the year.

The *class* field specifies a key in the [login.conf(5)](/login.conf/5.md) database of login class attributes. If empty, the “default” record is used.

The user's *home* *directory* is the full UNIX path name where the user will be placed at login.

The *shell* field is the command interpreter the user prefers. If the *shell* field is empty, the Bourne shell (*/bin/sh*) is assumed. When altering a login shell, and not the superuser, the user may not change from a non-standard shell or to a non-standard shell. Non-standard is defined as a shell not found in */etc/shells*.

The last four fields are for storing the user's *full* *name*, *office* *location*, and *work* and *home* *telephone* numbers.

Once the information has been verified, **chpass** uses [pwd\_mkdb(8)](/pwd_mkdb/8.md) to update the user database.

## ENVIRONMENT

The [vi(1)](/vi/1.md) editor will be used unless the environment variable EDITOR is set to an alternate editor. When the editor terminates, the information is re-read and used to update the user database itself. Only the user, or the superuser, may edit the information associated with the user.

## FILES

- */etc/master.passwd*

  user database

- */etc/passwd*

  user database, with confidential information removed

- */etc/ptmp*

  lock file for the passwd database

- */etc/shells*

  list of approved shells

- */var/tmp/pw.XXXXXXXXXX*

  temporary copy of the user passwd information

## DIAGNOSTICS

- Attempting to lock password file, please wait or press ^C to abort

  The password file is currently locked by another process; **chpass** will keep trying to lock the password file until it succeeds or the user hits the interrupt character (control-C by default). If **chpass** is interrupted while trying to gain the lock, any changes made will be lost.

  If the process holding the lock was prematurely terminated, the lock file may be stale and **chpass** will wait forever trying to lock the password file. To determine whether a live process is actually holding the lock, the admin may run the following:

  ```
  $ fstat /etc/ptmp
  ```

  If no process is listed, it is safe to remove the */etc/ptmp* file to clear the error.

## SEE ALSO

[finger(1)](/finger/1.md), [login(1)](/login/1.md), [passwd(1)](/passwd/1.md), [getusershell(3)](/getusershell/3.md), [login.conf(5)](/login.conf/5.md), [passwd(5)](/passwd/5.md), [pwd\_mkdb(8)](/pwd_mkdb/8.md), [vipw(8)](/vipw/8.md) Robert Morris and Ken Thompson, “Password security: a case history”, *Communications of the ACM*, Volume 22, Issue 11, pp. 594–597, Nov. 1979.

## HISTORY

The **chpass** command appeared in 4.3BSD-Reno.
